2

私のゲーム開発フレームワークには、Pointクラス (stores xycoordinates、その他の便利なもの) があります。私のゲーム オブジェクト@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

これはできますか?この場合、代入演算子の動作をオーバーライドできますか?

4

3 に答える 3