飛行機が飛んでいく画像の背景に青い四角形を表示してみよう

ソーラー「あらためて


飛行機がゲーム画面上を右に動いていく


プログラムを実行してみましょう


そのプログラムはこちらです

👇

#include "DxLib.h"


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{



ChangeWindowMode(TRUE); // ウインドウモードに設定します


if (DxLib_Init() == -1) // DXライブラリを初期化処理しています

{

return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します

}


int graphichandle;


graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");



SetDrawScreen(DX_SCREEN_BACK);//👈新たに登場 🌞SetDrawScreen関数です


for (int x = 0; x < 640; x++) {



DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈今はここ💖新たに登場 🌞 ClearDrawScreen関数です

}



WaitKey(); //🌞 キーの入力を待っています 何かキーが入力がされるまで これ以上プログラムは実行されません


DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します

}


デバッグなしで実行をしてから一度プログラムを終了し

生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらからご覧になれます

👇


https://youtu.be/DyjfFOV2Ad8



マックス「う~ん よしよし


ソーラー


飛行機が右に飛んでいくのを表示するプログラムに成功したな


そうだな


このままでも味わい深いが


さらに


背景に何か欲しいな


そう...


青い空だ」


solarplexuss「青い空・・・?


それだったら


飛行機の画像の背景として


四角い青い領域を


DrawBox関数で表示したらいいんじゃない?」


そのプログラムはこちらです

👇


#include "DxLib.h"


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{



ChangeWindowMode(TRUE); // ウインドウモードに設定します


if (DxLib_Init() == -1) // DXライブラリを初期化処理しています

{

return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します

}


int graphichandle;


graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");



SetDrawScreen(DX_SCREEN_BACK);//👈新たに登場 🌞SetDrawScreen関数です


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);//👈💖💖この位置にDrawBox関数を記述しました



for (int x = 0; x < 640; x++) {


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です

}



WaitKey(); //🌞 キーの入力を待っています 何かキーが入力がされるまで これ以上プログラムは実行されません


DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します

}


デバッグなしで実行をしてから一度プログラムを終了し

生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果は


一瞬だけ


青い四角形の画像が表示されますが


すぐに消え


真っ黒い画面の中を


黒い飛行機が飛んでいくことになります


(あまりにも青い四角形の画像が表示されて消えるのが早すぎて


動画キャプチャソフトではその様子をキャプチャすることはできませんでした)


solarplexuss「おかしいな?


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


を実行してるのに


なんで   


一瞬だけ


青い四角形の画像が表示されて


すぐに消えるのかな?」


ソーラー「それは


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


の記述されている位置が関係しています


このプログラムでは


SetDrawScreen(DX_SCREEN_BACK);//👈新たに登場 🌞SetDrawScreen関数です


を実行しているので


SetDrawScreen(DX_SCREEN_BACK);


の実行後に


    🌞🌞🌞描かれる画像はすべて裏画面に表示されることになります🌞🌞🌞



solarplexuss「裏画面 うわあ やっぱりそうなるんだ」


ソーラー「そうなんです 忘れそうになるね


そして


SetDrawScreen(DX_SCREEN_BACK);


を実行した後に


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


を実行していますね


だから


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


によって描かれる


青い四角形の画像は裏画面に描かれることになります


次に



for (int x = 0; x < 640; x++) {


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です

}


を実行しています


x=0のときから

xの値を1ずつ値を増やしながら

x=639まで


for文のブロック{}内の命令文

👇

DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です

👆


繰り返し実行されることになります


まず


x=0のとき


DrawGraph(0, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です


が実行されることになります


DrawGraph(0, 230, graphichandle, TRUE);


が実行されると


青い四角形に続いて


         💖💖💖裏画面の💖💖💖👈👈👈ここに注目


真ん中 左端のほうに


飛行機の画像が


描かれることになります


この時


          💖裏画面には💖


青い四角形の画像

飛行機の画像

描かれています


その状態で



ScreenFlip();



が実行されると


表画面に


裏画面に描かれていた


青い四角形の画像

飛行機の画像

表示されることになります


ScreenFlip();


をつかっているので


しばらくの間


青い四角形の画像

飛行機の画像

表示されることになります


そして


ClearDrawScreen();


の実行により


           🌞表画面と裏画面の両方に描かれている🌞👈👈👈ここに注目


青い四角形の画像

飛行機の画像

消去されることになります」


マックス「(*´▽`*) フム~フム~」


ソーラー「みんな


この時点で


青い四角形の画像



表画面からも裏画面からも消去されているところがポイントだよ



次に


x=1のとき


DrawGraph(1, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です


が実行されることになります


DrawGraph(1, 230, graphichandle, TRUE);


が実行されると


          💖裏画面の💖


真ん中 左端のほうに


先ほどの飛行機の画像が表示されていた位置より


右に1ドットずれた位置から飛行機の画像が


描かれることになります


この時


          💖裏画面には💖



飛行機の画像(だけ)

描かれることになります


(青い四角形はすでに消去されています)


その状態で



ScreenFlip();



が実行されると


表画面に


裏画面に描かれていた


飛行機の画像(だけ)

表示されることになります


ScreenFlip();


をつかっているので


しばらくの間


飛行機の画像

表示されることになります


そして


ClearDrawScreen();


の実行により


表画面と裏画面に描かれている


飛行機の画像

消去されることになります




次に


x=2のとき


DrawGraph(2, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です


が実行されることになります


DrawGraph(2, 230, graphichandle, TRUE);


が実行されると


          💖裏画面の💖


真ん中 左端のほうに


先ほどの飛行機の画像が表示されていた位置より


右に1ドットずれた位置から飛行機の画像が


描かれることになります


この時


          💖裏画面には💖



飛行機の画像(だけ)

描かれています


その状態で



ScreenFlip();



が実行されると


表画面に


裏画面に描かれていた


飛行機の画像

表示されることになります


ScreenFlip();


をつかっているので


しばらくの間


飛行機の画像

表示されることになります


そして


ClearDrawScreen();


の実行により


表画面と裏画面に描かれている


飛行機の画像

消去されることになります


以下繰り返し



マックス「ということは・・・


SetDrawScreen(DX_SCREEN_BACK);


を実行した後に


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


を実行しているだろう


このとき


青い四角形の画像は裏画面に描かれているわけだ


だからこの段階では


表画面(ゲーム画面)には


まだ何も描かれていない


青い四角形が表画面(ゲーム画面)に描かれるのは



x=0のときのfor文のブロック{}内の命令文


👇

DrawGraph(0, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です

👆



ScreenFlip();


が実行されるときだろう


ScreenFlip();


の実行により


DrawGraph(0, 230, graphichandle, TRUE);


によって裏画面に描かれた飛行機の画像と


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


によって裏画面に描かれた青い四角形の画像が


            ある一定の間


表画面(ゲーム画面)に描かれるわけだ


だが


次に


ClearDrawScreen();


を実行しているので


あっという間に


飛行機の画像



青い四角形の画像



表画面と裏画面から消去されるわけだ


x=1以降では


for文のブロック{}内の命令文


👇

DrawGraph(0, 230, graphichandle, TRUE);


ScreenFlip();//👈👈👈ここで再び登場 🌞ScreenFlip関数です


ClearDrawScreen();//👈 🌞 ClearDrawScreen関数です

👆


が実行されていくことになるが


(裏画面に)飛行機の画像を描く


DrawGraph(0, 230, graphichandle, TRUE);


しか実行されないので


裏画面に描かれた画像を表画面に表示する


ScreenFlip();


を実行しても


表画面に青い四角形はもう描かれることはなく


飛行機の画像だけが描かれ右に動いてみえるようになるわけだ」



ソーラー「(^^♪そうなんです


だから


プログラムを実行すると


一瞬しか


青い四角形は表示されないんだね」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る