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