GはGame1のG

xnaで Game1 : Game のインスタンスのメンバによそのクラスのインスタンスからアクセスする方法。

たとえばTakoというクラスがあるとして、 Game1のgraphicsとかspriteBatchが参照したいことがある。 全部コンストラクタの引数で渡してやるのはたいへんなので、

new Tako(this)

とかでGame1のインスタンスを渡してやる。 Takoの方には

Game1 g;
public Tako(Game1 g){
  this.g = g;
}

とかで値を受け取る。 すると、g.spriteBatchとかg.graphics.GraphicDevice.Viewport.Widthなど値を参照しまくり。 なんか邪道臭しまくりなんですけど。

Javaでは内部クラスで逃げていたが、C#Javaとちと内部クラスの扱いが違ってて、めんどくさい。 そもそも内部クラス使うとソースは長くなるわ、入れ子は深くなるは、あまり良い書き方とも思えん。 Game1全体を丸投げするのでなく、 必要なリソースだけ構造体かクラスにして渡してあげるのが正しいやり方かもしれんが、 まあ、初心者にとってはわかりやすさやシンプルさの方が重要だと思うのです。

たとえば spriteBatchなどをpublic static宣言しておけば Game1.spriteBatchなどと参照できるのだが、 これもどうかなぁ。 大して美しくないし。