プログラム

2007年07月27日

【講座004】書き加えたコードの意味

まず、最初に加えたインスタンス変数たちを紹介します。

Texture2D myTexture;
SpriteBatch spriteBatch;
Vector2 spritePosition = Vector2.Zero;
Vector2 spriteSpeed = new Vector2(50.0f, 50.0f);

はじめに、Texure2Dというクラスは何か、ということを説明します。このクラスは、グラフィックチップが読み書きできる平面グリッド、を意味していまして、簡単に言うと、画面の上に貼る透明な板だと思った方がいいです。
昔々にMSXとか、ファミコンベーシックでプログラムを組んだことがある方はSPRITE関数なんてのがあって、背景画像の上にスプライトでキャラクタを動かして、あれやこれやと、ゲームを作ったりしていたと思うのですが、サイズが自由に設定できる透明な板(スプライト)と考えるのが、理解しやすいと思います。
で、このクラスへのインスタンス変数をmyTextureという名前にしたわけですが、お気づきの方もいらっしゃると思いますが、複数の絵を動かしたい場合などには、このインスタンス変数を必要な分だけ定義しなければならない、ということですね。

プログラムの中を読み取るときには、先に一気に読み取ってしまった方がわかりやすいときもあるので、このmyTextureが、どう使われているのか、もうちょっと見てみましょう。

LoadGraphicsContentメソッドの中では、絵を読み込ましています。

myTexture = content.Load<Texture2D>("face");

という形ですね。この、content.Loadというのは、右側のソリューションエクスプローラで一覧されている、様々なデータと、ひも付けを行うメソッドです。ですから、今回はTexture2Dクラスのデータを読み込むよ、ってことで<>内に、Texture2Dと書いてありまして、その後、ファイル名(拡張子無し)を設定します。

Drawメソッドの中では、実際に絵を描くのに、次のようなコードを使っています。

spriteBatch.Draw(myTexture, spritePosition, Color.White);

このような形で使われるわけです。

さて、次は、SpriteBatchです。これは、GraphicsDeviceへスプライトのグループを描画し表示させるクラスです。習うより慣れろってこともありますから、このクラスについては、今は「おまじない」だと思って使っていた方がいいでしょう。後の回で、いろいろと実験をしてみたいと思います。
ちなみに、このインスタンス変数 spriteBatchは、LoadGraphicsContentメソッドの中で、

spriteBatch = new SpriteBatch(graphics.GraphicsDevice);

とgraphics.GraphicsDeviceとのやりとりでインスタンスを作るときに使われ、Drawメソッドの中で、

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
spriteBatch.Draw(myTexture, spritePosition, Color.White);
spriteBatch.End();

と使われて、さっきのmyTextureを使って、絵を描いています。ここのspritePositionというのは、どこに表示するのか、を意味していますが、
spritePositionとspriteSpeedは、Vector2の変数として宣言されています。
2次元の座標を表すのに、このクラスを用いるのがC#っぽいところ。C言語などでも構造体とかで、座標を表したりもしましたので、プログラミングをやっている人にはわかりやすいかも。ところで、2次元の座標はX軸とY軸でできていて、画面の左上が(X,Y)=(0,0)で、右に行くほどXの値が大きくなり、下に行くほどYの値がおおきくなります。

2次元の座標系





そこで、spritePositionには当初(0,0)を設定し、spriteSpeedには当初(50.0, 50.0)を設定する、と書かれています。「50.0f」っていう風に最後に「f」が付いていない?と思われるかもしれません。これは、この「50.0」という値がfloat型なんだよってことを意味しています。単に「50.0」と書いてビルドしてみるとわかりますが、50.0と表示すると、それはdouble型であることになってしまい、ビルドエラーになってしまいます。
なんだか、よく分らない気持ちになるかもしれません。こういうところで、よく分らないからプログラム嫌いってなっちゃう人も多くて、すごく残念なんですが、私ははっきりと言い切っておきます。「こんなこと、気にせず先に進んでください」と。いろいろな本で「型」の考え方が大切だ、とかいろいろ書いてあるかもしれませんが、それが理解できるようになるのは、結構先ですし、ある種、専門的にコンピュータ数値解析のことをやらないとわかりません。いろいろなプログラミング言語で特徴がありますが、C#(C言語系,Javaも)特有の問題ですから、深く悩まず、こういうエラーにぶつかったら、「あ、f、付け忘れちゃった」くらいの気持ちで進んでください。

今回も長くなってきたので、これでおしまい。次回は、動かしている部分のコードを読み取っていきましょう。

dmatsu2005 at 07:25コメント(0)トラックバック(0) 
livedoor プロフィール

アロハ

痩せないと死ぬよっていう宣告を受けてしまったので、ダイエットに目覚めたプログラマー(約95kg)

広告

レンタルサーバーなら使えるねっと


Google AdSense
Google検索
訪問者数
  • 今日:
  • 昨日:
  • 累計:

オススメの書籍