我的游戏开发框架有一个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
因为框架中的另一个细节:Point
is 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
这可以做到吗?在这种情况下,我可以覆盖赋值运算符的行为吗?