|
SpriteのDraw・Draw2Dについて 投稿日時: 2004-10-18 午前 4:33 |
DirectX 9.0 SDK Update (October 2004)になって、Spriteの扱い方がかわって、スプライトの描画がうまくいきません。
まずsprite.Begin(SpriteFlags.None);とsprite.End();が必要になったのはわかりました。
ですが、Draw関数を以下のように、体力の黄色と赤のゲージを描画するコードを呼び出すと、1本で体力を表したいのに、2つ画像が描画されます。 sprite.Draw( barTEX, new Rectangle(0,0,(hero.energy>0)?hero.energy:0,16), new Vector3(0,0,0), new Vector3(10,10,0), Color.White); sprite.Draw( barTEX, new Rectangle((hero.energy>0)?hero.energy:0,16,300,32), new Vector3(0,0,0), new Vector3(10+hero.energy,10,0), Color.White);
Draw2Dは、 public void Draw2D(Texture, Point, float, Point, Color); だけうまく描画されましたが、他は描画さえされません。
以前のバージョンのコードを、ちょっと変更してプログラミングしたので、それがまずいのかもしれませんが、どうやればうまくスプライトを描画できるでしょうか? |
|
|
|
Re: SpriteのDraw・Draw2Dについて 投稿日時: 2004-10-20 午前 1:22 |
サンプルソースを用意しましたので、ここにアクセスしてみてください。
それではアドバイスお願いします。 |
|
|
ゆきすけ
|
 |
| 参加日: 2003-10-19 |
| 投稿数: 23 |
| |
|
Re: SpriteのDraw・Draw2Dについて 投稿日時: 2004-10-20 午前 10:51 |
実際試していませんが、 座標を固定で指定しているという状態でそのように表示されるということは、 テクスチャ、テクスチャ範囲の指定に問題があると思います。
2のべき乗以外のテクスチャをサポートしていない場合、 (GetDeviceCapsのD3DPTEXTURECAPS_NONPOW2CONDITIONALを参照) テクスチャは意図通りのサイズに読み込まれていないことを考慮する必要があります。
また、 Draw2Dでは内部的に変換しているのかもしれませんが、 通常ではテクスチャの貼り付け範囲は0~1を指定する必要があると思います。
|
|
|
|
Re: SpriteのDraw・Draw2Dについて 投稿日時: 2004-10-20 午後 6:08 |
SDKが2003の時は、2のべき乗にしなくても大丈夫でした。
それで今回bmp画像を512x512にしてみましたが、やはりこのようにおかしな描画になってしまいます。
> Draw2Dでは内部的に変換しているのかもしれませんが、 > 通常ではテクスチャの貼り付け範囲は0~1を指定する必要があると思います。
これはどの値を0~1指定すればよいのでしょうか?
もしかするとSDKのバグではないかとも考えているのですが、アドバイスお願いします。 |
|
|
ゆきすけ
|
 |
| 参加日: 2003-10-19 |
| 投稿数: 23 |
| |
|
Re: SpriteのDraw・Draw2Dについて 投稿日時: 2004-10-20 午後 8:14 |
画像ソースのサイズを変更しただけなのに、 ゲージが階段状に展開しているのが画像から読み取れます。 ここから始点と高さの指定が異常であることが確定すると思います。 >これはどの値を0~1指定すればよいのでしょうか? 結果、Spriteはテクスチャの座標指定はそのままで0~1の範囲で指定しなくても良いようです。 すいません忘れてください。
回答は、 SDKエラー・バグではなく、ご自身のHの指定がおかしいことが原因だと推測します。 Rectangleの指定は X,Y,W,Hであり、。おそらく16が正解ですよね?(上のソースも) ちなみに左右の間が埋まっているのはWの指定がおかしいためです。
|
|
|
|
Re: SpriteのDraw・Draw2Dについて 投稿日時: 2004-10-21 午前 12:27 |
> ご自身のHの指定がおかしいことが原因だと推測します。 > Rectangleの指定は X,Y,W,Hであり、。おそらく16が正解ですよね?(上のソースも) > ちなみに左右の間が埋まっているのはWの指定がおかしいためです。
おっしゃる通りでした。お恥ずかしい…。
でも2003のSDKでは、最初のRectangleの指定で正常に描画されていたんですけどね。
それでは、ありがとうございました。 |
|
|