はじめまして、いつもこちらのHPを参考にさせてもらってます。
今、シューティングゲームを作ってるんですが画面をスクロールさせるプログラムが思いつきません。
どのようにコードを書けばよいか、教えていただけますでしょうか
無題
-
雷
Re:無題
スクロールのシューティングなら、
画面の背景がそこまで変化しなくて良いなら
■:←を画像とすると
■
■
同じ画像を繋げてしまえばいいのでは?と思います。(管理人さんと同じかな?
僕は、座標をx,yで管理して、一定速度で進んでいくとしたとき(y方向に)
画像(??? * 480 のサイズ)としたとき、
画像の表示の始点をどんどん減らして行きます。(y方向に)
一枚目の始点をx,yとすると
二枚目の始点がx,y+480となるということです。
(yはどんどん減っていくとします。
その後、yは-480を超えると思います。
そうしたら、y=0として元に戻します
それ以外に、gX,gYを作って、こちらはどんどん増やしていくと考えます(gYを
そうすれば、gX,gY = 100, 500 の地点に障害物や微妙に背景を変更したように見せる表示を!!
(建物を加えたりwwww
とか出来そうだな~と考えますが、出来るかどうか走りません。
どうでしょうか?
画面の背景がそこまで変化しなくて良いなら
■:←を画像とすると
■
■
同じ画像を繋げてしまえばいいのでは?と思います。(管理人さんと同じかな?
僕は、座標をx,yで管理して、一定速度で進んでいくとしたとき(y方向に)
画像(??? * 480 のサイズ)としたとき、
画像の表示の始点をどんどん減らして行きます。(y方向に)
一枚目の始点をx,yとすると
二枚目の始点がx,y+480となるということです。
(yはどんどん減っていくとします。
その後、yは-480を超えると思います。
そうしたら、y=0として元に戻します
それ以外に、gX,gYを作って、こちらはどんどん増やしていくと考えます(gYを
そうすれば、gX,gY = 100, 500 の地点に障害物や微妙に背景を変更したように見せる表示を!!
(建物を加えたりwwww
とか出来そうだな~と考えますが、出来るかどうか走りません。
どうでしょうか?
-
木霊
Re:無題
#include "DxLib.h"
void Speed_Change ( int &Temp_Speed );// スクロールスピードの変更
void Speed_Scope_Check ( int &Temp_Speed );// スクロールスピードの範囲チェック
void Graphic_Scroll ( int &Start_Pos, int &End_Pos, int Temp_Handle, int Roll_Spd = 1 );
// 背景の下方向スクロール(のみ)を行う関数
// *****************************************************************************
// メイン
// *****************************************************************************
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
if ( DxLib_Init () == -1 ) { // ---- DXライブラリ初期化処理
return -1;
}
SetDrawScreen ( DX_SCREEN_BACK );
ClearDrawScreen ();
int Gr_Handle = LoadGraph ( "Test_Graphic.bmp" ); // グラフィックの読み込み
int Start_Y_Position = 0, End_Y_Position = 480; // スクロールに使う変数の宣言と初期化
int Scroll_Speed = 1; // スクロールスピードの宣言と初期化
while ( ProcessMessage () == 0 ) { // ------------------ ループ開始
Speed_Change ( Scroll_Speed ); // スクロールスピードの変更
Graphic_Scroll ( Start_Y_Position, End_Y_Position, Gr_Handle, Scroll_Speed );
// スクロールを行う関数呼び出し
ScreenFlip ();
ClearDrawScreen ();
if ( CheckHitKey ( KEY_INPUT_F12 ) != 0 ) { break; }
}
InitGraph ();
DxLib_End (); // -DXライブラリの使用終了処理
return 0; // ---------------- ソフトの終了
}
void Speed_Change ( int &Temp_Speed )
{
if ( CheckHitKey ( KEY_INPUT_A ) != 0 ) { Temp_Speed --; }
if ( CheckHitKey ( KEY_INPUT_Z ) != 0 ) { Temp_Speed ++; }
Speed_Scope_Check ( Temp_Speed );
return;
}
void Speed_Scope_Check ( int &Temp_Speed )
{
if ( Temp_Speed <= 1 ) { Temp_Speed = 1; }
if ( Temp_Speed >= 16 ) { Temp_Speed = 16; }
return;
}
void Graphic_Scroll ( int &Start_Pos, int &End_Pos, int Temp_Handle, int Roll_Spd )
{
/* if ( Start_Pos >= 480 ) {
Start_Pos = 0;
End_Pos = 480;
}
DrawRectGraph ( 0, 0, 0, Start_Pos, 640, End_Pos, Temp_Handle, TRUE, FALSE );
if ( End_Pos != 480 ) {
DrawRectGraph ( 0, End_Pos, 0, 0, 640, 480 +End_Pos, Temp_Handle, TRUE, FALSE );
}
Start_Pos += Roll_Spd;
if ( ( Start_Pos +End_Pos ) > 480 ) { End_Pos -= Roll_Spd; }
*/
if ( Start_Pos <= 0 ) {
Start_Pos = 480;
End_Pos = 0;
}
DrawRectGraph ( 0, 0, 0, Start_Pos, 640, 480, Temp_Handle, TRUE, FALSE );
DrawRectGraph ( 0, End_Pos, 0, 0, 640, Start_Pos, Temp_Handle, TRUE, FALSE );
Start_Pos -= Roll_Spd;
End_Pos += Roll_Spd;
return;
}
あまり上手なコードではないですが参考程度に・・・(640×480の画像は御自分で用意してください)一応AキーとZキーでスクロールスピードを変更できます