私のゲーム開発フレームワークには、Point
クラス (stores x
、y
coordinates、その他の便利なもの) があります。私のゲーム オブジェクト@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
と、temp
オブザーバー レジストリも複製されます。そして、temp
の状態が変化@someSprite
すると通知され、混乱が生じます。
次にこれを行うことができます:
temp = @someSprite.position.clone
temp.remove_observer(@someSprite)
しかし、それは非現実的でハックな気がします。
別のアプローチは次のとおりです。
temp = Point.new(@someSprite.position)
Point
別の値を取得するためのコンストラクターを作成しますPoint
(オブザーバーレジストリをコピーせずに)。これはこれまでのところ最良のアプローチのように思えますが、私が達成したいのは
temp = @someSprite.position
これはできますか?この場合、代入演算子の動作をオーバーライドできますか?