PlatformerのXNA2.0への移植
相変わらずPlatformerをいじっている。
XNA2.0には GraphicsDevice.Viewport.TitleSafeArea というものがない。 TitleSafeAreaというのはつまりビューポートの中で、アナログディスプレイで表示したときに、 テキストを表示して良い安全範囲ということだろう。
Viewport v = GraphicsDevice.Viewport; Vector2 hudLocation = new Vector2(0, 0); Vector2 center = new Vector2(v.Width / 2.0f, v.Height / 2.0f);
こんな感じで適当にごまかした。 TitleSafeArea自体はなかなか便利そうなものだから今度から使ってみよう。
RectangleExtensions.csの中で使われてた謎の引数宣言
public static Vector2 GetIntersectionDepth(this Rectangle rectA, Rectangle rectB)
などはどうやら 拡張メソッド というものらしい。 C#2.0には無くてC#3.0から。 C#はなかなか愉快なことをやってくれる。 まだ良くこの新しい仕様について理解してないのだが、 とりあえずthisはとっぱらっても動くらしいことがわかった。 先を急ぐ。
XNA3.0にはRectangle構造体にCenterというプロパティが追加されたらしい。 XNA2.0には無いようだ。 Centerの値はPoint構造体らしいんで、
Rectangle r = GetBounds(x, y); exit = new Point(r.X + r.Width / 2, r.Y + r.Height / 2);
とかやってごまかした。
そしたらXNA2.0でも動いた。やれやれ。 XNA Game Studio 3.0 このリリースの新機能 というところにまとめて書いてあるようだ。
C#2.0では
public bool IsAlive { get; private set; }
というような省略した書き方は(インターフェイスでない限り)できないらしい。 ちゃんと
public bool IsAlive { get { return isAlive; } private set { isAlive = value; } } bool isAlive;
という具合に書くと動いた。 やばい。仕様がリアルタイムでどんどん変わっていく。 それがXNA (笑)。