なにかボタンを押したときだけ 飛行機の近くに 弾が表示されるようにしてみよう

つづきです



ソーラー「そうなんです


次は


飛行機の移動に応じて


弾も


一緒に


くっついて移動するようにしてみましょう」


マックス「なはは


そのプログラムは俺に任せろ」


飛行機の移動に応じて


弾も


一緒に


くっついて移動するプログラムはこちらです

👇

#include "DxLib.h"



struct Character {

int x;

int y;

int graphichandle;



};

//👆🌞Characterの構造体宣言です




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

{



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


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

{

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

}




SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です



struct Character jibunnohikouki;

//👆🌞jibunnohikoukiの構造体変数宣言です


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


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

//👆🌞構造体変数jibunnohikoukiのメンバ変数の初期化を行っています




struct Character jibunnotama;

//👆🌞jibunnotamaの構造体変数宣言です


jibunnotama.x = 0;


jibunnotama.y = 0;


jibunnotama.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");

//👆🌞構造体変数jibunnotamaのメンバ変数の初期化を行っています



while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


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


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);




DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);



ScreenFlip();


ClearDrawScreen();


};



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


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

}


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

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

👇


https://www.youtube.com/watch?v=2gXJI4yS1zw



solarplexuss「う~ん ねえ


飛行機にくっついて弾が移動するのは


いいんだけど


普通のシューティングゲームでは


何かのボタンを押したときだけ


自分の弾が表示されて発射されるんじゃない?


飛行機に弾がくっついて表示されたままになるんじゃなくて


すくなくとも


なにかボタンを押したときだけ


飛行機の近くに


弾が表示されるようにできないかな?」


マックス「たとえば


Zボタンをおしたときだけ


自分の弾が


飛行機の近くに


表示されるようにするってわけか」



solarplexuss「そうそうそう」



ソーラー「それでは


なにかボタンを押したときだけ


飛行機の近くに


弾が表示されるようにしてみましょう


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

👇

👇solarplexuss「え、もう完成したの?」

👇

👇

👇


#include "DxLib.h"


struct Character {

int x;

int y;

int graphichandle;


};

//👆🌞Characterの構造体宣言です




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

{



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


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

{

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

}




SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です



struct Character jibunnohikouki;

//👆🌞jibunnohikoukiの構造体変数宣言です


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


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

//👆🌞構造体変数jibunnohikoukiのメンバ変数の初期化を行っています




struct Character jibunnotama;

//👆🌞jibunnotamaの構造体変数宣言です


jibunnotama.x = 0;


jibunnotama.y = 0;


jibunnotama.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");

//👆🌞構造体変数jibunnotamaのメンバ変数の初期化を行っています



while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


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


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


ScreenFlip();


ClearDrawScreen();


};



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


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

}


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

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

👇


https://youtu.be/m9YYUA_Mx3Q


マックス「


おお


なんか


自分の弾が


ついたり

消えたり


しているじゃないか?」


ソーラー「このプログラムでは


Zボタン


を押していると


自分の弾が表示され


Zボタン


を押していないと


自分の弾が表示されないという仕組みになっているんだよ」


solarplexuss「へえ~」


ソーラー「このプログラムの仕組みを考察してみましょう


このプログラムの注目ポイントはwhile{}文だね


👇


while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


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


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;



DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);



if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}

👆

このwhile{}文のブロック{}内の


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


に注目してください


Zボタンを押した状態で


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


が実行されると


GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として


16が返るので


keyには16が代入されることになります


ですので


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;


PAD_INPUT_UP

PAD_INPUT_DOWN

PAD_INPUT_LEFT

PAD_INPUT_RIGHT



8

1

2

4

の値を持つので



if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;



if (16 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;

if (16 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;

if (16 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;

if (16 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;


となります


&演算

16 & 8

16 & 1

16 & 2

16 & 4

0の値をもつので


if (16 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;

if (16 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;

if (16 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;

if (16 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;



if (0) jibunnohikouki.y = jibunnohikouki.y - 4;

if (0) jibunnohikouki.y = jibunnohikouki.y + 4;

if (0) jibunnohikouki.x = jibunnohikouki.x - 4;

if (0) jibunnohikouki.x = jibunnohikouki.x + 4;



となり


jibunnohikouki.y = jibunnohikouki.y - 4;

jibunnohikouki.y = jibunnohikouki.y + 4;

jibunnohikouki.x = jibunnohikouki.x - 4;

jibunnohikouki.x = jibunnohikouki.x + 4;



実行されません


ですので


DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);



が実行されると


飛行機の画像データは


飛行機の画像データの左上の頂点が


x座標 jibunnohikouki.x

y座標 jibunnohikouki.y


つまり


(jibunnohikouki.x,jibunnohikouki.y)



始点とする位置から


描かれることになります


次に


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}



PAD_INPUT_A



16の値を持つので


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


if (16 & 16) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


となります


&演算

16 & 16

1の値をもつので


if (16 & 16) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}



if (1) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


となり


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


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


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


が実行されると


DrawGraph関数の引数が


jibunnohikouki.x+35

jibunnohikouki.y+20,


となっているので


飛行機の画像データの表示される始点


x座標 jibunnohikouki.x

y座標 jibunnohikouki.y


つまり


(jibunnohikouki.x,jibunnohikouki.y)


から


x方向(右)に35ドット

y方向に(下)に20ドット


ずれた位置を始点として


自分の弾の画像データが表示されることになるんだよ


次は


もし


何もボタンを押していなければ


ゲーム画面には何が表示されるかな?


もし


何もボタンを押していない状態で


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


が実行されると


GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として


0が返るので


keyには0が代入されることになります


ですので


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;



PAD_INPUT_UP

PAD_INPUT_DOWN

PAD_INPUT_LEFT

PAD_INPUT_RIGHT



8

1

2

4

の値を持つので



if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;



if (0 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;

if (0 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;

if (0 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;

if (0 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;


となります


&演算

0 & 8

0 & 1

0 & 2

0 & 4

すべて

0の値をもつので


if (0 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;

if (0 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;

if (0 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;

if (0 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;



if (0) jibunnohikouki.y = jibunnohikouki.y - 4;

if (0) jibunnohikouki.y = jibunnohikouki.y + 4;

if (0) jibunnohikouki.x = jibunnohikouki.x - 4;

if (0) jibunnohikouki.x = jibunnohikouki.x + 4;



となり


jibunnohikouki.y = jibunnohikouki.y - 4;

jibunnohikouki.y = jibunnohikouki.y + 4;

jibunnohikouki.x = jibunnohikouki.x - 4;

jibunnohikouki.x = jibunnohikouki.x + 4;



実行されません


ですので


DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);



が実行されると


飛行機の画像データは


飛行機の画像データの左上の頂点が


x座標 jibunnohikouki.x

y座標 jibunnohikouki.y



(jibunnohikouki.x,jibunnohikouki.y)



始点とする位置から


描かれることになります


次に


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


PAD_INPUT_A



16の値を持つので


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}



if (0 & 16) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


となります

&演算

0 & 16

0の値をもつので


if (0 & 16) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}



if (0) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


となり


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


は実行されません


つまり


なにもボタンを押していないと


自分の弾の画像データは表示されないんだよ」



マックス「なにもボタンを押していないと


飛行機の画像データは


表示されても


自分の弾の画像データは


表示されないってわけだ


いったて普通のことだな」


ソーラー「


もし


キーボードの↑ボタンと


キーボードのZボタンを


同時に押している状態で


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


が実行されると


GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として


          💖8と16を足した😊24😊が返るので💖


keyには24が代入されることになります


ですので


このwhile{}文のブロック{}内の命令文

👇

while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


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


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


👆



if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;




PAD_INPUT_UP

PAD_INPUT_DOWN

PAD_INPUT_LEFT

PAD_INPUT_RIGHT



8

1

2

4


の値を持つので


if (24 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;

if (24 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;

if (24 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;

if (24 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;


となります


&演算

24 & 8は1の値をもち

24 & 1は0の値をもち

24 & 2は0の値をもち

24 & 4は0の値をもつので


if (24 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;

if (24 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;

if (24 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;

if (24 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;



if (1) jibunnohikouki.y = jibunnohikouki.y - 4;

if (0) jibunnohikouki.y = jibunnohikouki.y + 4;

if (0) jibunnohikouki.x = jibunnohikouki.x - 4;

if (0) jibunnohikouki.x = jibunnohikouki.x + 4;


となり


jibunnohikouki.y = jibunnohikouki.y - 4;


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


飛行機の画像データの表示される始点の位置は


jibunnohikouki.yより4ドット


上になります


ですので


DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


が実行されると


飛行機の画像データは


上に4ドット移動することになります


次に


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


PAD_INPUT_A



16の値を持つので


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}



if (24 & 16) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


となります


&演算

24 & 16

1の値をもつので


if (24 & 16) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}




if (1) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


となり


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


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


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


が実行されると


DrawGraph関数の引数が


jibunnohikouki.x+35

jibunnohikouki.y+20,


となっているので


飛行機の画像データの表示される始点


から


x方向(右)に35ドット

y方向に(下)に20ドット


ずれた位置を始点として


自分の弾の画像データが表示されることになるんだよ」


マックス「つまり


キーボードの↑ボタンと


キーボードのZボタンを


同時に押していると


while{}文

👇


while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


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


int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


if (key & PAD_INPUT_A) {


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}



以下の

while{}文


と等しくなるわけだ

👇


while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {


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


jibunnohikouki.y = jibunnohikouki.y - 4;



DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


}


だから


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


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


jibunnohikouki.y = jibunnohikouki.y - 4;



DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);




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


だから


キーボードの↑ボタンと


キーボードのZボタンを


同時に押していると


while{}文のブロック{}内の命令文が1回繰り返し実行


されるごとに


jibunnohikouki.y = jibunnohikouki.y - 4;



DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);


が実行されることになるわけだ


while{}文のブロック{}内の命令文が1回繰り返し実行


されるごとに


飛行機の画像データは上に4ドット移動することになる


飛行機の画像データは


飛行機の画像データの左上の頂点が


x座標 jibunnohikouki.x

y座標 jibunnohikouki.y



(jibunnohikouki.x,jibunnohikouki.y)



始点とする位置から描かれ



自分の弾の画像データは


自分の弾の画像データの左上の頂点が


x座標 jibunnohikouki.x+35

y座標 jibunnohikouki.y+20


(jibunnohikouki.x+35,jibunnohikouki.y+20)



始点とする位置から描かれることになる


飛行機の画像データの表示される始点から


x方向(右)に35ドット

y方向に(下)に20ドット


ずれた位置を始点として


自分の弾の画像データが表示されることになるわけだ


つまり


飛行機の近くに自分の弾が表示された状態で


飛行機の画像データは上に4ドット移動することになるわけだ」






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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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