初めまして。DXライブラリでプログラミングをしていて、バグで躓いてしまったので質問させていただきます。 https://github.com/nihotamor/touhou ソースコードです。クラスが増えてしまいましたが、主に行っていることはGameManagerからSceneGameを更新、描画、SceneGameからPlayerを更新、描画です。 現在、プレイヤーを表示しているところなのですが、斜め入力をしたときにグラフィックの最下段が最上部に表示されてしまいます。 個別にDrawGraphを用いてPlayerクラスとは別に描画したところ正常な描画を確認済みです。 また、SceneGame関数で if (cross & 0x1 && cross & 0x2) { // vec = vec / 1.4142F; } このようにコメントアウトすると上記のようなエラーは起きませんでした。 同様のことをDrawGraphF関数を用いてやってみましたが、そちらでは正常に描画できたので、ライブラリのバグではないかと思い投稿しました。 自分のミスでエラーが起きているかもしれないので、その場合は間違いなどを指摘していただけるとありがたいです。
すみません、エラーであるという 『斜め入力をしたときにグラフィックの最下段が最上部に表示されてしまいます。』 についてもう少し詳細を教えていただけないでしょうか? あと、現在載せていただいた URL にはプレイヤーキャラクターの画像しかないので、 プログラム実行時に 2651:画像ファイル resources\image\0\title\back.png がありません 2650:画像ファイル resources\image\0\title\title3.png がありません 2656:File Open Error : resources\sound\th_bomb1.wav 2653:画像ファイル resources\image\0\title\title7.png がありません 2652:画像ファイル resources\image\0\title\cross.png がありません 2660:File Open Error : resources\sound\th_1up.wav 2660:Sound File Load Error : resources\sound\th_bomb1.wav 2663:画像ファイル resources\image\0\title\lunatic.png がありません 2665:Sound File Load Error : resources\sound\th_1up.wav 2667:画像ファイル resources\image\0\title\hard.png がありません 2664:File Open Error : resources\sound\th_bomb0.wav と、数々のエラーが出力され、画面もプレイヤーキャラクターが表示されるだけとなっています 画面の構成に必要なファイルもアップしていただければエラーの状況を理解することができるかもしれません…
すみません。説明力不足でした。 まず、プレイヤーの画像をLoadDivGraphで48 * 48の横4行、縦3列を読み込んでいます。 その画像をプレイヤーの位置に表示しています。 ここで、通常は以下のように画像が表示されるのですが、 https://drive.google.com/open?id=1oQFlGvBEnMs3R80ZLAsZawt7DlhJ3BdY 斜め入力(例えば、上と右)をしてしまうと、以下のように画像が表示されてしまいます。 https://drive.google.com/open?id=1ZKUfMZ_v7kaN89cTxl_WC4uN-C95ujhp 分かりやすいように色を1段目の箒を赤、2段目の箒を青に変えてみたところ、 2段目の画像を表示している際に、1段目の赤い箒の部分が表示されています。 それとは別に、DrawGraphF関数を使って適当な位置に同じグラフィックを描画したところ、 https://drive.google.com/open?id=1uDn_xG89xvfivkvO7yVV2ijxVP2HaZM_ このようになりました。左上のDrawGraphFで描画して所には頭上に箒が表示されていないので、 グラフィックデータが破壊されているわけではないのだと思います。 しかし、DrawRotaGraphF関数を用いた場合先述したようなエラーが起きるので、 DrawRotaGraphF関数に何か問題があるのではないか、と思いました。 また、現在作成済みのすべてのリソースファイルをアップロードしておきました。 画像のリンクが禁止語句判定になっていたので、@を抜いてリンクを参照してください。
詳しいご説明ありがとうございます、状況を理解できました すみません、リファレンスには記載がないのですが、DrawGraphF や DrawRotaGraphF などの float系の関数で 別の分割画像の端の1ドットが描画されてしまうのは仕様となります LoadDivGraph で読み込まれた画像は、別々のテクスチャに分けられることなく一つのテクスチャに転送され、描画の際は 描画する範囲を限定することで別々の画像のように扱っているのですが、DrawGraphF や DrawRotaGraphF のような ドットの区切りがクッキリしない float型座標を使用する関数では、指定する描画座標によっては隣接する分割画像の 端の1ドットが一緒に描画されてしまいます この現象はライブラリ側の処理では避けられないので、大変申し訳ないのですが LoadDivGraph で読み込む画像の各分割単位の 一番外側の1ドットは透明ドットにするようにしてください m(_ _;m
なるほど、仕様だったのですね。すっきりしました。 お忙しい中わざわざ回答していただきありがとうございます。