1

私はゲームの物理学にFarseerを使用しており、いくつかの重要なクラスがPlanetありPlanetPropます。各惑星には、大きな円形の物体と「フィールド」があります。このフィールドは、体の周りの大きなセンサーです。PlanetPropsは、現在存在する惑星のフィールド(PlanetInfoと呼ばれる構造体)に向かって引き寄せられます。PlanetPropそこで、衝突したフィクスチャがセンサーであるかどうかを(呼び出されるたびに)検出する衝突ハンドラーを設定しました。

次に、A)センサーがaに属しているかどうかを検出しPlanet、B)PlanetPropを惑星に向かって引っ張るように設定します。

つまり、クラス内の本体からのフィクスチャとの衝突コールバックを使用してクラスにアクセスすることは可能ですか?

編集:これにはUserDataが含まれますか?C ++を使用している場合は、そのクラスへのポインターを配置できる可能性がありますが、c#を使用しています。

4

1 に答える 1

0

C#には、「参照型」と「値型」があります。参照型はclassキーワードで作成されます。値型はstructキーワードで作成されます。(MSDNの詳細な説明。)

参照(たとえば、あるPlanet myPlanet場合は ""変数class Planet)はポインタに非常に似ています。同じスペース(アーキテクチャに応じて32ビットまたは64ビット)を使用し、参照型のインスタンスを「ポイント」(参照)します。ポインターとは異なり、ポインターに対して算術演算を実行することはできません。これは、ガベージコレクターがその処理を実行し、まだ参照されているオブジェクトを追跡できるようにするためです(したがって、ポインターは収集されません)。

したがってUserData、を惑星オブジェクトのインスタンスに設定するのは非常に安全です。同じオブジェクトを参照し、コピーは作成されません。

値型(例:)がある場合は別の話になりますstruct Planet。これは、割り当てるときにコピーされます。(実際、この場合、UserDataは型objectであり、参照型を想定しているため、フレームワークは値型を不変の参照型にコピーすることで値型を「ボックス化」します。)

個人的には、特にメモリを気にするゲーム開発を行う場合は、参照型と値型に異なる構文の強調表示色を使用すると便利だと思います。

于 2013-02-10T14:08:16.253 に答える