トップページ > 記事閲覧
少ししか描画していないのに重い
名前:PP 日時: 2020/09/20 23:24

dxlibで32*32の画像サイズを5個しか描画していないのに重いのですが、これは何故なのでしょうか? #include "DxLib.h" int j; int pX = 0, pY = 0; void enemy(int x,int y) { int enemy = LoadGraph("knife.png"); DrawGraph(x, y, enemy, TRUE); //敵の設定 } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); // ウィンドウモードに変更 if (DxLib_Init() == -1) return -1; while (!ProcessMessage()) { SetDrawScreen(DX_SCREEN_BACK); //描画先をMakeScreen用の画面から裏画面に変更 ClearDrawScreen(); //裏画面のデータを全て削除 if (CheckHitKey(KEY_INPUT_UP) == 1) pY -= 3; if (CheckHitKey(KEY_INPUT_DOWN) == 1) pY += 3; if (CheckHitKey(KEY_INPUT_LEFT) == 1) pX -= 3; if (CheckHitKey(KEY_INPUT_RIGHT) == 1) pX += 3; for (j = 0; j < 5; j++) { enemy(100+30*j, 100); //敵を5個描画 } int player = LoadGraph("player.png"); DrawGraph(pX, pY, player, TRUE); //プレイヤーの描画 ScreenFlip(); //裏画面データを表画面へ反映 } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ

Page: 1 |

Re: 少ししか描画していないのに重い ( No.1 )
名前:あいおい? 日時:2020/09/20 23:33

LoadGraph("knife.png"); でなんどもテクスチャを生成してるからではないでしょうか? 同じ画像ファイルを参照するのであれば、必要なグラフィックハンドルはひとつで済むはずです。
メンテ
Re: 少ししか描画していないのに重い ( No.2 )
名前:PP 日時:2020/09/20 23:51

実行中何度も敵を出したいので、関数で処理を行いたいです。 なので、何度もテクスチャを生成するしかないと思うのですが、どうすればいいですか?
メンテ
Re: 少ししか描画していないのに重い ( No.3 )
名前:名無し 日時:2020/09/21 02:24

>実行中何度も敵を出したいので、関数で処理を行いたいです。 >なので、何度もテクスチャを生成するしかないと思うのですが、どうすればいいですか? 画像は毎フレーム読み込む必要はないです。 (一度読み込めば、基本的にDeleteGraph関数等で消去しない限り残ってます。) ゲームやシーンの開始時に読み込んでおいて、ループ内ではグラフィックハンドルを指定して描画すればいいです。 自作関数で処理したいなら、グラフィックハンドルを自作関数に引数で渡すか、グローバル変数にグラフィックハンドルを入れて参照してください。 あと、サンプルだと自作関数使うメリットがあまりないようですが? 自作関数使わなくても以下のようにすればいいと思います。 (自作関数で処理したい理由があるならもう少し具体的に理由書いた方がいいですよ。) #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); // ウィンドウモードに変更 if (DxLib_Init() == -1) return -1; int j; int pX = 0, pY = 0; //ループ開始前に画像は読み込んでおく int enemy = LoadGraph("knife.png"); int player = LoadGraph("player.png"); while (!ProcessMessage()) { SetDrawScreen(DX_SCREEN_BACK); //描画先をMakeScreen用の画面から裏画面に変更 ClearDrawScreen(); //裏画面のデータを全て削除 if (CheckHitKey(KEY_INPUT_UP) == 1) pY -= 3; if (CheckHitKey(KEY_INPUT_DOWN) == 1) pY += 3; if (CheckHitKey(KEY_INPUT_LEFT) == 1) pX -= 3; if (CheckHitKey(KEY_INPUT_RIGHT) == 1) pX += 3; for (j = 0; j < 5; j++) {//敵を5個描画 DrawGraph(100+30*j, 100,enemy, TRUE); } DrawGraph(pX, pY, player, TRUE); //プレイヤーの描画 ScreenFlip(); //裏画面データを表画面へ反映 } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ
Re: 少ししか描画していないのに重い ( No.4 )
名前:PP(解決) 日時:2020/09/21 10:25

LoadGraph関数を外部変数にしたらできました。皆さん本当にありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存