トップページ > 記事閲覧
DrawRotaGraph以外のメモリから画像読み込む関数が
名前:6pチーズ 日時: 2017/11/25 20:18

初心者です。初心者です。大事なことなので二(ry Windows10,VisualStudio2017でDX.LIBを使用して2Dの戦車のゲームを作ろうとしています。 今までは正常に動作していたのですが、突如DrawGraph以外の画像描画関数が動作しなくなりました。 詳しい状況が未だ把握できていないのですが、Whileの中で上から DrawGraph DrawLotagraph DrawRotagraph2 の順番で使っているのですが、初めのDrawGraphでの背景だけ描画できます。(BGM等もなります) DrawGraph (0, 0, fieldimage, 0);//背景描画 DrawRotaGraph(playerx, playery, 0.6f, (DX_PI / 180 * playerdirection),playerimage , TRUE);;//プレイヤーのキャタピラ部分描画 DrawRotaGraph2(playerx, playery, 50, 170, 0.25f, playercannondirection, playercannon,FALSE,FALSE);//プレイヤーの主砲描画 縮小が0.6等かなり小さくなっているのは画像が無駄に大きかったため&ウィンドウを拡大したときも滑らかに描画するためです。 playerx,playeryはint型を三角関数で更新しています。 解決方法わかる方がいらっしゃればお願いします。 何か他に必要な情報があれば聞いてください。
メンテ

Page: 1 |

Re: DrawRotaGraph以外のメモリから画像読み込む関数が ( No.1 )
名前:管理人 日時:2017/11/25 23:33

プログラム全体を拝見しないと推測しかできませんが、原因として考えられるのは 1.playerx, playery の座標が意図しない座標になっている 2.playerimage や playercannon に正常なグラフィックハンドルが代入されていない の二つがあります ブレークポイント( F9 )の機能を使用して DrawRotaGraph の箇所でプログラムを停止して、 playerx, playery の座標が正常か、や、playerimage や playercannon に -1 ( 読み込めなかった )が 代入されていないかなどを確認してみてください m(_ _)m > 縮小が0.6等かなり小さくなっているのは画像が無駄に大きかったため 無駄に大きい画像とのことですが、どのくらいの大きさなのでしょうか?
メンテ
Re: DrawRotaGraph以外のメモリから画像読み込む関数が ( No.2 )
名前:6pチーズ 日時:2017/11/26 07:40

F9の使い方がわからなかったので他の方法で確認しました。 最初のDrawGraphをplayerimageに書き換えたら、描画できました。 しかし、引数のx,yをplayerx等の変数にすると、描画できなくなりました。 変数に適切な値が代入できていないのでしょうか? DrawRotaGraphも、変数から定数(100,100)に書き換えてみたら、適切に描画されました。 適切な値が代入できていないとすれば、どうすれば解決できますか? 座標は、 playerx += cos(DX_PI / 180.0 * playerdirection) * 2; // x座標を更新 playery += sin(DX_PI / 180.0 * playerdirection) * 2; // y座標を更新 のようにして更新しています。(playerx,playeryはint型です。) 無駄に大きい画像ですが、大きいと言っても100*100程度です。縮小しているのは微調整のレベルなので問題ないかと思っていました。
メンテ
Re: DrawRotaGraph以外のメモリから画像読み込む関数が ( No.3 )
名前:管理人 日時:2017/11/26 23:23

> F9の使い方がわからなかったので他の方法で確認しました。 ブレークポイントはプログラムの実行を途中で止めて、止めた時点での変数の値などを確認できる 今回のような意図しない動作( バグ )の修正に必須と言っていい機能なので、使われることをお勧めします プログラムの実行を止めたい行にカーソルを移動した状態で F9 を押すとブレークポイントが置かれます その状態で F5 でデバッグ実行を開始して、ブレークポイントを置いた箇所にプログラムの実行が来ると プログラムが自動的に止まり、その時点での変数の値などを確認することができます 一時停止した実行を再開したい場合は F5 を、1行だけ進めたい場合は F10 を、止めた行が関数の呼び出しで、 その関数の中に入りたい場合は F11 を、設置したブレークポイントを解除したい場合はブレークポイントを 置いた行で再度 F9 を押します > 変数に適切な値が代入できていないのでしょうか? はい > 適切な値が代入できていないとすれば、どうすれば解決できますか? 適切な値を代入できていないのは、6pチーズさんが作成されたプログラムのどこかで適切ではない値を playerx、 playery に代入しているということですので、playerx や playery の値を変更している箇所を 調べて原因を究明する必要があります 色々な箇所で実行を止めて、どの段階で playerx と playery に適切ではない値が代入されて しまっているかをブレークポイントの機能を使用して突き止めます > 座標は、 >  playerx += cos(DX_PI / 180.0 * playerdirection) * 2; // x座標を更新 >  playery += sin(DX_PI / 180.0 * playerdirection) * 2; // y座標を更新 > のようにして更新しています。(playerx,playeryはint型です。) playerdirection の値が意図していない値となっていて、playerx や playery の値が画面外の座標に なってしまっているということはないのでしょうか? 裏画面への描画の結果を表示に反映させるためにどこかで ScreenFlip(); を実行していると思うのですが、その直前に DrawFormatString( 0, 0, GetColor( 255,255,255 ), "playerx:%d playery:%d", playerx, playery ); という記述を増やせば画面左上に playerx と playery の値が白色の文字で表示されますので、その表示が playerx:-1000 playery:5000 のような、画面外の値になってしまっていないかを確認してみてください > 無駄に大きい画像ですが、大きいと言っても100*100程度です。縮小しているのは微調整のレベルなので問題ないかと思っていました。 100x100 でしたら画像のサイズが原因では無さそうです
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存