0

私も新しいXNAについて質問があり、グーグルを検索した後、ドキュメントで明確な答えを見つけることができませんでした。

質問1:

私がこれを行う場合:

Rectangle afterMoveRect = collisionRectangle;
afterMoveRect.Offset((int)moveAmount.X, (int)moveAmount.Y);

私は今しました:

A.別の名前のrefferencecollisionRectangleとその後に移動されたcollisionRectangle

また

B.collisionRectangleの複製コピーを作成し、コピーのみを移動しました。

2番目の質問:

私がこれを行う場合:

Matrix transform = localTransform;

transform = transform * otherTransform;

localTransformのコピーを作成してそのコピーを複数回作成しましたか、それともlocalTransformを参照して別の識別​​子を使用して乗算しましたか?

両方の質問は同じです、私はオリジナルを変更しましたか(おそらく意図せずに)

質問3:

オリジナルを変更したかどうかはどうやってわかりますか?代入演算子を使用するときに、オリジナルを新しい名前で参照するか(Javaのように)、他のオブジェクトのディープコピーを作成するかどうかをどのように知ることができますか?

4

2 に答える 2

1

またはがまたはであるかどうRectangleかに完全に依存します。Matrixstructclass

(値型)の場合structはコピーされ、別のインスタンスで作業しています。参照されるclass(参照型)の場合は、同じオブジェクトで作業しています。

msdnによると、RectangleMatrixはどちらも構造体であるため、コピーで作業しています。

于 2012-09-30T21:19:32.130 に答える
1

これは、参照型と値型と呼ばれます。参照型(基本的にクラス)は、値として指定された場合は作成されず、参照のみがポイントされるため、その場合、新しい名前の変更は元の名前に影響します。値型(構造体)の場合、コピーが実行され、その後2つは独立して処理されます。

Matrixとは両方ともRectangle構造体であり、コピーされました。

于 2012-09-30T21:19:33.550 に答える