我的游戏开发框架有一个Point类(商店x、y坐标和其他有用的东西)。我的游戏对象有一个@position属性,它是一个Point实例。当@position被修改时,游戏对象将被绘制到其他地方。
我的问题是这样的:
@someSprite.position = Point.new(100,100)
temp = @someSprite.position
temp.x = 500
temp成为 的参考@someSprite.position。修改它也会改变精灵的位置。这是我不想要的。我想temp成为一个不同的例子。
我不能做这样的事情:
temp = @someSprite.position.clone
因为框架中的另一个细节:Pointis observable。@someSprite正在观察自己的属性,@someSprite.position。
如果我使用clone, thentemp也会克隆观察者注册表。并且当temp's 的状态发生变化时,@someSprite会收到通知,造成混乱。
那时可以这样做:
temp = @someSprite.position.clone
temp.remove_observer(@someSprite)
但这让人感觉不切实际和骇人听闻。
另一种方法是:
temp = Point.new(@someSprite.position)
我在其中创建了一个构造函数,用于Point从另一个获取值的位置Point(不复制观察者注册表)。这听起来是迄今为止最好的方法,但我想要实现的是
temp = @someSprite.position
这可以做到吗?在这种情况下,我可以覆盖赋值运算符的行为吗?