前提・実現したいこと
DXライブラリの"DrawGraph"があいまいになるエラーを解決したい
発生している問題・エラーメッセージ
コード | 説明 | プロジェクト |
---|---|---|
E0266 | "DrawGraph"があいまいです | VisualStudio_2019用 |
該当のソースコード
C++
1#include "DxLib.h" 2 3#define SHOT 15 4 5// WinMain関数 6int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 7 LPSTR lpCmdLine, int nCmdShow) 8{ 9 10 SetFullScreenResolutionMode(DX_FSRESOLUTIONMODE_MAXIMUM); 11 SetGraphMode(1920, 1080, 16); 12 13 int BallX, BallY, BallGraph; 14 int SikakuX, SikakuY, SikakuGraph,SikakuMuki; 15 int SikakuDamageFlag, SikakuDamageCounter, SikakuDamageGraph; 16 int ShotX[SHOT], ShotY[SHOT], ShotFlag[SHOT], ShotGraph; 17 int SikakuW, SikakuH, ShotW, ShotH; 18 int ShotBFlag; 19 int i; 20 21 // DXライブラリ初期化処理 22 if (DxLib_Init() == -1) return -1; 23 24 // グラフィックの描画先を裏画面にセット6 25 SetDrawScreen(DX_SCREEN_BACK); 26 27 // ボール君のグラフィックをメモリにロード&表示座標をセット 28 BallGraph = LoadGraph("Ball.png"); 29 BallX = 288; BallY = 400; 30 31 // 四角君のグラフィックをメモリにロード&表示座標をセット 32 SikakuGraph = LoadGraph("Samplepng.png"); 33 SikakuX = 0; SikakuY = 50; 34 35 SikakuDamageGraph = LoadGraph("SikakuDam.png"); 36 37 SikakuDamageFlag = 0; 38 39 //弾のグラフィックをメモリにロード 40 ShotGraph = LoadGraph("Shot.png"); 41 42 // 弾1・2が画面上に存在しているか保持する変数に『存在していない』を意味する0を代入しておく 43 for (i = 0; i < SHOT; i++) 44 { 45 ShotFlag[i] = 0; 46 } 47 48 //ショットボタンが前のフレームで押されたかどうかを保存する変数に0を代入 49 ShotBFlag = 0; 50 51 // 四角君の移動方向をセット 52 SikakuMuki = 1; 53 54 //弾と四角のグラフィックのサイズを考える 55 GetGraphSize(ShotGraph, &ShotW, &ShotH); GetGraphSize(SikakuGraph, &SikakuW, &SikakuH); 56 57 // 移動ルーチン 58 while (1) 59 { 60 // 画面を初期化(真っ黒にする) 61 ClearDrawScreen(); 62 clsDx(); 63 64 // ボール君の操作ルーチン 65 { 66 // ↑キーを押していたらボール君を上に移動させる 67 if (CheckHitKey(KEY_INPUT_UP) == 1) BallY -= 6; 68 69 // ↓キーを押していたらボール君を下に移動させる 70 if (CheckHitKey(KEY_INPUT_DOWN) == 1) BallY += 6; 71 72 // ←キーを押していたらボール君を左に移動させる 73 if (CheckHitKey(KEY_INPUT_LEFT) == 1) BallX -= 6; 74 75 // →キーを押していたらボール君を右に移動させる 76 if (CheckHitKey(KEY_INPUT_RIGHT) == 1) BallX += 6; 77 78 79 // スペースキーを押した場合は処理を分岐 80 if (CheckHitKey(KEY_INPUT_SPACE)) 81 { 82 //前フレームでショットボタンを押したかが保存されている変数が0だったら弾を発射 83 if (ShotBFlag == 0) 84 { 85 // 画面上にでていない弾があるか、弾の数だけ繰り返して調べる 86 for (i = 0; i < SHOT; i++) 87 { 88 // 弾iが画面上にでていない場合はその弾を画面に出す 89 if (ShotFlag[i] == 0) 90 { 91 int Bw, Bh, Sw, Sh; 92 93 // ボール君と弾の画像のサイズを得る 94 GetGraphSize(BallGraph, &Bw, &Bh); 95 GetGraphSize(ShotGraph, &Sw, &Sh); 96 97 // 弾iの位置をセット、位置はボール君の中心にする 98 ShotX[i] = (Bw - Sw) / 2 + BallX; 99 ShotY[i] = (Bh - Sh) / 2 + BallY; 100 101 // 弾iは現時点を持って存在するので、存在状態を保持する変数に1を代入する 102 ShotFlag[i] = 1; 103 104 // 一つ弾を出したので弾を出すループから抜けます 105 break; 106 } 107 } 108 } 109 //前フレームでショットボタンを押されていたかを保存する変数に1を代入 110 ShotBFlag = 1; 111 } 112 else 113 { 114 /*ショットボタンが押されていなかった場合は前フレームで 115 ショットボタンが押されていたかを保存する変数に0を代入*/ 116 ShotBFlag = 0; 117 } 118 119 // ボール君が画面左端からはみ出そうになっていたら画面内の座標に戻してあげる 120 if (BallX < 0) BallX = 0; 121 122 // ボール君が画面右端からはみ出そうになっていたら画面内の座標に戻してあげる 123 if (BallX > 1920 - 16) BallX = 1920 - 16; 124 125 // ボール君が画面上端からはみ出そうになっていたら画面内の座標に戻してあげる 126 if (BallY < 0) BallY = 0; 127 128 // ボール君が画面下端からはみ出そうになっていたら画面内の座標に戻してあげる 129 if (BallY > 1080 - 16) BallY = 1080 - 16; 130 131 // ボール君を描画 132 DrawGraph(BallX, BallY, BallGraph, TRUE); 133 134 } 135 136 //弾の数だけ弾を動かす処理を繰り返す 137 for (i = 0; i < SHOT; i++) { 138 //自機の弾iの移動ルーチン 139 if (ShotFlag[i] == 1) 140 { 141 //弾iを16ドット上に移動させる 142 ShotY[i] -= 16; 143 144 //画面外に出てしまった場合は存在状態を保持している変数に0を代入する 145 if (ShotY[i] < -80) 146 { 147 ShotFlag[i] = 0; 148 } 149 150 //画面に弾iを描画する 151 DrawGraph(ShotX[i], ShotY[i], ShotGraph, TRUE); 152 } 153 } 154 // 四角君の移動ルーチン 155 if (SikakuDamageFlag == 1) { 156 DrawGraph(SikakuX, SikakuY, SikakuDamageGraph, TRUE); 157 158 SikakuDamageCounter++; 159 160 if (SikakuDamageCounter == 30) 161 { 162 SikakuDamageFlag = 0; 163 } 164 } 165 else 166 { 167 // 四角君の座標を移動している方向に移動する 168 if (SikakuMuki == 1) SikakuX += 3; 169 if (SikakuMuki == 0) SikakuX -= 3; 170 171 // 四角君が画面右端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する 172 if (SikakuX > 1900 - 16) 173 { 174 SikakuX = 1900 - 16; 175 SikakuMuki = 0; 176 } 177 178 // 四角君が画面左端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する 179 if (SikakuX < 0) 180 { 181 SikakuX = 0; 182 SikakuMuki = 1; 183 } 184 185 // 四角君を描画 186 DrawGraph(SikakuX, SikakuY, SikakuGraph, FALSE); 187 } 188 //弾と敵の当たり判定、弾の数だけ繰り返す 189 for(i = 0;i < SHOT;i++) 190 { 191 //弾iが存在している場合のみ次の処理に移る 192 if (ShotFlag[i] == 1) 193 { 194 // 四角君との当たり判定 195 if (((ShotX[i] > SikakuX && ShotX[i] < SikakuX + SikakuW) || 196 (SikakuX > ShotX[i] && SikakuX < ShotX[i] + ShotW)) && 197 ((ShotY[i] > SikakuY && ShotY[i] < SikakuY + SikakuH) || 198 (SikakuY > ShotY[i] && SikakuY < ShotY[i] + ShotH))) 199 { 200 // 接触している場合は当たった弾の存在を消す 201 ShotFlag[i] = 0; 202 } 203 } 204 205 } 206 207 printfDx("X %d:Y %d", BallX, BallY); 208 // 裏画面の内容を表画面にコピーする 209 ScreenFlip(); 210 211 212 // Windows 特有の面倒な処理をDXライブラリにやらせる 213 // -1 が返ってきたらループを抜ける 214 if (ProcessMessage() < 0) break; 215 216 // もしESCキーが押されていたらループから抜ける 217 if (CheckHitKey(KEY_INPUT_ESCAPE)) break; 218 } 219 220 DxLib_End(); // DXライブラリ使用の終了処理 221 222 return 0; // ソフトの終了 223} 224 225
試したこと
"F5"キーで『デバックの開始』ををする。(エラーを残したまま)
結果
新しくウィンドウが出てきて
ビルドエラーが発生しました。最後に成功したビルドを実行しますか?
と表示される。
補足情報(FW/ツールのバージョンなど)
こちらのサイトを参考にしています。
使用しているツール類のバージョン
- Visual Studio 2019 16.2.1
- DXライブラリ Windows版 VisualStudio(C++)用(Ver3.20f)
エラーメッセージは何と言うてますか? コードのどこ(何行目)ですか?
エラー一覧で上記のようなエラーが4つ
132,151,156,186行目の
132:DrawGraph(BallX, BallY, BallGraph, TRUE);
151:DrawGraph(ShotX[i], ShotY[i], ShotGraph, TRUE);
156:DrawGraph(SikakuX, SikakuY, SikakuDamageGraph, TRUE);
186:DrawGraph(SikakuX, SikakuY, SikakuGraph, FALSE);
の部分です。
・・・もしかしてエラー一覧に書いてあることってエラーメッセージではないのですか?
僕の環境ではその症状を再現できませんでした。ちゃんとコンパイル/リンクできます。
回答ありがとうございました。自分のほうでもう少し解決方法を探してみます。
回答1件
あなたの回答
tips
プレビュー