| 0からのゲームプログラミング > 画像の移動 |
| Back Next |
| 更新日 2003.11.15 |
| 画像の移動 |
| 前回の表示させる位置は、うまく変更出来たでしょうか。止まって表示されているだけでは面白くありませんので、今回は画像を動かしてみましょう。 前回は、ID3DXSprite::Draw メソッドの4番目のパラメータを変更して、画像の表示位置を変更していました。スプライトでは、拡大縮小・回転も簡単に出来てしまいます。それらを統一した書き方で扱いたい為、プログラムコードを変更します。 例えば、前回は、こんな風に書いていました。(表示位置は変更されています。) |
|
これを、とりあえず、以下のコードをコピーして書き換えてみて下さい。 |
|
さらに、コードを加えます。Screen.h 内の 『CScreenStage クラスの定義』 と書かれたところを見て下さい。そこで、テクスチャと書かれたところの下に、マトリックスの行を一行加えて下さい。 |
|
そして、今度は ScreenStage.cpp に戻って、CScreenStage::Move メンバ関数に以下の一行を加えます。 |
|
以上の3箇所を変更して、ビルド(メイク)して実行出来ることを確認して下さい。 |
![]() |
画像の表示位置の指定は、ID3DXSprite::Draw メソッドの4番目のパラメータでするのを止め、D3DXMatrixTransformation2D 関数の最後のパラメータで指定するように変更しました。このパラメータには、D3DXVECTOR2 構造体へのポインタを指定します。D3DXVECTOR2 は、x成分・y成分を一まとめにした構造体です。 以上の変更を加えたことでしていることは、D3DXMatrixTransformation2D 関数 を使ってマトリックス(行列)を作成し、そのマトリックスを ID3DXSprite::SetTransform メソッド でセットしてから、ID3DXSprite::Draw メソッド でスプライトを描画しています。 ただ単に、座標変換してから描画する、といった書き方に変えただけです。これで、拡大縮小・回転も扱えるようになります。前回のコードでは、座標変換のコードを書きませんでしたが、DirectX 側で暗黙の内にされています。3Dの場合もこの、座標変換してから描画する、というやり方は変わりません。簡単に言えば、使う関数が変わるだけ、と思って頂いていいでしょう。(あ、簡単に言い過ぎたかも!?) マトリックス(行列)を使うといっても、そんなに恐れないで下さい。マトリックスは、D3DXMATRIX 構造体が管理してくれますので、計算は用意されている関数を使えば出来ます。 さて、本題の画像を移動させるプログラムを作りましょう。画像を移動させる為には、その位置を保持する変数が必要になります。x 座標と y 座標を保持出来ればいいのですから、その x と y を一まとめにした D3DXVECTOR2 構造体 を使います。Screen.h の『CScreenStage クラスの定義』内に、メンバ変数を追加します。 |
|
そして、CScreenStage クラスのコンストラクタで、値を初期化しておきます。コンストラクタのどこでセットしても構いませんが、ここでは ファイルパック終了と書かれた下辺りでやっておきます。ファイルパック終了の意味については、もう少し先でやります。 CScreenStage クラスのコンストラクタ 内 |
|
最後に、CScreenStage::Move メンバ関数 内の、D3DXMatrixTransformation2D 関数で、m_vec2 のアドレスを渡すように書き換えて下さい。 |
|
さて、ビルド(メイク)して実行させてみましょう。はい、何も変わっていませんね。移動させるコードを書いていないので当然ですね。 それでは、変換行列を作成の手前にコードを加えてみます。例えば、以下のようにして、実行させてみましょう。 |
|
![]() |
| どうだったでしょうか。簡単でしょ!?若干変更箇所が多かったのでややこしかったかも知れませんが、その内慣れると思います。速さを変えたり色々変更していって下さい。 DirectX 9.0 SDK では、描画関連の計算は、主に float 型 が使われています。D3DXVECTOR2 構造体の メンバも、float 型 です。定数を記述するときには、float 型を意識した書き方で書くようにした方が単純なミスを防げます。上の例では、1.0f と最後に f を付けています。1 だけなら、整数型(普通は int 型)で、1.0 と書けば、double 型になります。データ型が違えば、計算過程で結果が違ってくることもありますので、注意するようにしましょう。それらを理解した上で、別の書き方で書くのは構いませんが。 それでは、また次回まで。さようなら。 |
| 【スポンサード リンク】 |
| Back Next |
| 0からのゲームプログラミング > 画像の移動 |