無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ちょこ

無題

#1

投稿記事 by ちょこ » 17年前

はじめまして、いつもこちらのHPを参考にさせてもらってます。
今、シューティングゲームを作ってるんですが画面をスクロールさせるプログラムが思いつきません。
どのようにコードを書けばよいか、教えていただけますでしょうか

管理人

Re:無題

#2

投稿記事 by 管理人 » 17年前

携帯で書いているのでサンプルとか書けませんが、

まず連続で表示させて継ぎ目の出来ない画像を用意します。
どんな画像かわかりませんが、とりあえずVGAサイズの画面に対して画像もVGAだとします。

座標(0,n)に1枚表示し、(0,480-n)にもう1枚表示し、nの値を0~-480の範囲をマイナスしてループさせます。

すると出来上がりです。
奥行きや立体感を出したいなら、手前の画像ほど大きく、スクロールを早く表示すれば立体的に表現できますよ。

ちょこ

Re:無題

#3

投稿記事 by ちょこ » 17年前

管理人さん返信ありがとうございます。
これをもっとループさせるためにはこのnの値の範囲を大きくし、それに合った大きめの画像を用意すればよいでしょうか?

Re:無題

#4

投稿記事 by » 17年前

スクロールのシューティングなら、
画面の背景がそこまで変化しなくて良いなら
■:←を画像とすると
 ■
 ■
 
同じ画像を繋げてしまえばいいのでは?と思います。(管理人さんと同じかな?
僕は、座標をx,yで管理して、一定速度で進んでいくとしたとき(y方向に)
画像(??? * 480 のサイズ)としたとき、
画像の表示の始点をどんどん減らして行きます。(y方向に)
一枚目の始点をx,yとすると
二枚目の始点がx,y+480となるということです。
(yはどんどん減っていくとします。

その後、yは-480を超えると思います。
そうしたら、y=0として元に戻します

それ以外に、gX,gYを作って、こちらはどんどん増やしていくと考えます(gYを
そうすれば、gX,gY = 100, 500 の地点に障害物や微妙に背景を変更したように見せる表示を!!
(建物を加えたりwwww
とか出来そうだな~と考えますが、出来るかどうか走りません。

どうでしょうか?

木霊

Re:無題

#5

投稿記事 by 木霊 » 17年前

#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キーでスクロールスピードを変更できます

閉鎖

“C言語何でも質問掲示板” へ戻る