飛行機の飛んでいく速度を変化させる方法 その2
ソーラー「そうなんだ
みんな 飛行機が2倍の速さで飛ぶ仕組みがわかったかな?
もう一回
もともとの通常の速度(1倍速)で飛行機が飛んでいく様子を見てよ
👇
#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++) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
WaitKey(); //🌞 キーの入力を待っています 何かキーが入力がされるまで これ以上プログラムは実行されません
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://youtu.be/YAC-j31RGl8
👆
ソーラー「
これが1倍速 もともと飛行機の飛んでいく速度なんだね」
マックス「このプログラムの
for (int x = 0; x < 640; x++) {
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
が実行されると
x=0
から
x=639
まで
xの値を1ずつ大きくしながら
DrawGraph(
DrawGraph(
DrawGraph(
・
・
・
DrawGraph(639, 230, graphichandle, TRUE);
が実行されることになるだろう
つまり
1回のfor{}文の繰り返し(ループ)
で
1ドットずつ横にずれながら飛行機が描かれることになるわけだ
その様子を示す図がこれだ
👇
https://solalion.blogspot.com/2021/08/blog-post_7.html
このとき
飛行機の描画開始位置は
0,1,2・・・・・・・
となっているな」
ソーラー「そうだね
今度は
もう一回
もともとの通常の速度(1倍速)の2倍速で飛行機が飛んでいく様子を見てよ」
👇
#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++) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(2*x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
WaitKey(); //🌞 キーの入力を待っています 何かキーが入力がされるまで これ以上プログラムは実行されません
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://www.youtube.com/watch?v=UB-A8-R3x_c
ソーラー「
👆
もともと飛行機の飛んでいく速度
の2倍の速度で
飛行機が飛んでいるね
このプログラムのfor{}文
👇
for (int x = 0; x < 640; x++) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(2*x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
の
DrawGraph(2*x, 230, graphichandle, TRUE);
に
ご注目ください
このfor{}文が実行されると
x=0
から
x=639
まで
xの値を1ずつ大きくしながら
DrawGraph(
DrawGraph(
DrawGraph(
・
・
・
DrawGraph(1278, 230, graphichandle, TRUE);
が実行されることになります
このとき
飛行機の描画開始位置は
0,2,4・・・・・・・
となります
つまり
1回のfor{}文の繰り返し(ループ)
で
2ドットずつ横にずれながら飛行機が描かれることになります
その様子を示す図がこちらです
👇
https://solalion.blogspot.com/2021/08/blog-post_58.html
マックス「
つまり
1回のfor{}文の繰り返しで
1ドットずつ飛行機の画像が右にずれて描かれていたのが
1回のfor{}文の繰り返しで
2ドットずつ飛行機の画像が右にずれて描かれることになったので
速度が2倍になったように見えるわけだ」
ソーラー「そうなんです
ところで
このプログラムのfor{}文にご注目ください
👇
for (int x = 0; x < 640; x++) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(2*x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
👆
この for{}文のように
DrawGraph関数の第一引数が
DrawGraph(2*x, 230, graphichandle, TRUE);
のように
2*x
なら
飛行機の描画開始位置は
0,2,4・・・・・・・
となりました」
マックス「うむうむ 飛行機の飛ぶ速度が2倍になったわけだ」
ソーラー「でも
飛行機の描画開始位置を
0,2,4・・・・・・・
と変化させる別の方法はいくらでもあると思いませんか?」
マックス「??
はい?
飛行機の描画開始位置を
0,2,4・・・・・・・
と変化させる別の方法??
for (int x = 0; x < 640; x++) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(2*x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置は
0,2,4・・・・・・・
と変化するので
飛行機の飛ぶ速度は2倍になったわけだが・・・
飛行機の描画開始位置を
0,2,4・・・・・・・
と変化させる別の方法か・・・」
solarplexuss「
今のfor{}文
👇
for (int x = 0; x < 640; x++) {
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(2*x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
の
🍋for (int x = 0; x < 640; x++) 🍋
を
🍓for (int x = 0; x < 640; x=x+2) 🍓
にして
🍋DrawGraph(2*x, 230, graphichandle, TRUE);🍋
を
🍓DrawGraph(x, 230, graphichandle, TRUE);🍓
にした
for (int x = 0; x < 640; x=x+2){
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
飛行機の描画開始位置が
0,2,4・・・・・・・
と変化するんじゃない?」
for (int x = 0; x < 640; x=x+2){
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
が実行されると
まず
1回目のfor{}文の繰り返し(ループ)の時
DrawGraph(0, 230, graphichandle, TRUE);
が実行されることになります
このとき
飛行機の描画開始位置は0ですね
このときxの値は0ですが
次に
2回目のfor{}文の繰り返し(ループ)の時
for (int x = 0; x < 640; x=x+2)
により
x=x+2
が実行され
xの値は2となります
ですので
DrawGraph(2, 230, graphichandle, TRUE);
が実行されることになります
このとき
飛行機の描画開始位置は2になるよね
このときxの値は2ですが
次に
3回目のfor{}文の繰り返し(ループ)の時
for (int x = 0; x < 640; x=x+2)
により
x=x+2
が実行され
xの値は4となります
ですので
DrawGraph(4, 230, graphichandle, TRUE);
が実行されることになります
このとき
飛行機の描画開始位置は4になるよね
こうして
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置は
0,2,4・・・・・・・
と変化するので
飛行機の飛ぶ速度は2倍になるよね」
マックス「おおわ
やるな~
よくわかったなあ」
solarplexuss「えへへ、
いやあ
たまたま気づいたんだよ~ん
for (int x = 0; x < 640; x++)
となっている場合
1回のfor{}文の繰り返しごとに
xの値は
0,1,2・・・・・・・
と増えていきます
となると
DrawGraph(2*x, 230, graphichandle, TRUE);
の
2*xに
0,1,2,3・・・・・・・
が代入されていくので
2*xの値は
0,2,4,6・・・・・・・
になるので
飛行機の描画開始位置は
0,2,4,6・・・・・・・
と変化するので
飛行機の飛ぶ速度は2倍になるよね
ところで
0,2,4,6・・・・・・・
自体は
数字の並び
だよね
0,2,4,6・・・・・・・
は
0に2を足すと右隣の2になる
2に2を足すと右隣の4になる
4に2を足すと右隣の6になる
・
・
・
という構造になっているっておもったの
ということは
1回のfor{}文の繰り返しごとに
xの値に2を足せばいいと思ったの
で
for (int x = 0; x < 640; x=x+2)
のように
条件式を適当に
x=x+2
にして
DrawGraph(x, 230, graphichandle, TRUE);
を実行してみたら
たまたまうまい具合に
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置は
0,2,4・・・・・・・
と変化して
飛行機の飛ぶ速度は
2倍になったんだよ」
ソーラー「確かに
x=x+2は
xの値に2を加える命令文だよね」
マックス「
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置が
0,1,2・・・・・・・
と変化する場合を
飛行機の飛んでいく速度の基準とした場合
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置が
0,2,4・・・・・・・
と変化する場合は
基準の2倍の速度で飛行機は飛んでいくことになるんだろう
1回のfor{}文の繰り返しごとに
2ドットずつ右にずれて飛行機が描かれるからなあ
だったら
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置が
0,3,6・・・・・・・
と変化する場合は
1回のfor{}文の繰り返しごとに
3ドットずつ右にずれて飛行機が描かれるため
基準の3倍の速度で飛行機は飛んでいくことになるんじゃないか?
1回のfor{}文の繰り返しごとに
飛行機の描画開始位置を
0,3,6・・・・・・・
と変化させるためには
今のfor{}文の
for (int x = 0; x < 640; x=x+2)
の部分を
for (int x = 0; x < 640; x=x+3)
に変えた
for (int x = 0; x < 640; x=x+3){
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
を事項することになるだろう
逆に言うと
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
と記述すれば
基準の3倍の速度で飛行機は飛んでいくことになるわけだ
基準の5倍の速度で飛行機を飛ばすには
for (int x = 0; x < 640; x=x+3)
の部分を
for (int x = 0; x < 640; x=x+5)
に変えた
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
を実行すればいいわけだ」
solarplexuss「おおお・・・」
ソーラー「つまり
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
飛行機の飛ぶ速度は2倍速になり
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
飛行機の飛ぶ速度は3倍速になり
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
飛行機の飛ぶ速度は4倍速になり
・
・
・
・
・
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
飛行機の飛ぶ速度は100倍速になります
for (int x = 0; x < 640;
ProcessMessage();
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
なら
飛行機の飛ぶ速度はa倍速になるんだね
不思議だね
x=x+a
と記述するだけで
飛行機の飛ぶ速度はa倍速になるんだからね」
」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます