固定スクロールについて
Posted: 2014年6月23日(月) 23:47
ゲームでよくある固定されたステージが、キャラクターがある程度移動するとステージがX座標のマイナス方向にスクロールしていくという処理ってどうやればいいんですか?
やったことがないので、まだコードも書いてません。ヒントやアドバイスを貰えると幸いです。
お願いします。
やったことがないので、まだコードも書いてません。ヒントやアドバイスを貰えると幸いです。
お願いします。
//*********************************************************************
// ステージ1の処理
//*********************************************************************
#include <stdio.h> //C言語
#include "gs.h" //学内ライブラリ
#include "def.h" //共通定義
#include "Stage1.h" //ステージ1
#include "Curlsan.h" //カールじいさん
#include "Kama.h" //鎌
#include "Kumanote.h" //熊の手
#include "Sukoppu.h" //スコップ
//変数宣言----------------------------------------------------
int Stage1X; //ステージ1X座標
int JariX; //砂利のX座標
//変数参照----------------------------------------------------
extern gsTexture sStage1; //ステージ1
extern int gTimer; //タイマー
extern int gSceneMode; //シーンモード
extern OBJ gCurlsan; //カールじいさんの構造体
extern gsSound sStageBGM; //ステージBGM
extern OBJ gWaku; //枠
extern gsTexture sJari; //砂利
//開始------------------------------------------------------------------------------------------------------
void Stage1Start(void)
{
gsPlaySound( sStageBGM, LOOP_ON);//ステージBGM再生
gTimer = 0; //タイマーの初期化
Stage1X = 0; //ステージ1のX座標を初期化
JariX=0; //砂利のX座標を初期化
//各ファイルにある開始処理を呼び出す
CurlsanStart();
KamaStart();
KumanoteStart();
SukoppuStart();
}
//メイン----------------------------------------------------------------------------------------------------
void Stage1Main(void)
{
Stage1Move();
//ステージのX座標が画面の横サイズより小さかったら
if( Stage1X < -GS_WINDOW_WIDTH)
{
Stage1X += GS_WINDOW_WIDTH; //ステージを画面右に移す
}
//砂利のX座標が画面の横サイズより小さかったら
if( JariX < -GS_WINDOW_WIDTH)
{
JariX += GS_WINDOW_WIDTH; //砂利を画面右に移す
}
//各ファイルにあるメイン処理を呼び出す
CurlsanMain();
KamaMain();
KumanoteMain();
SukoppuMain();
if( gsKeyState(VK_SPACE) == GSKS_DOWN ||
gsGetJoyPadState(0, JOYPAD_BUTTON4) == GSKS_DOWN)
{
gSceneMode = 1; //タイトルに移動
gsStopSound( sStageBGM); //ステージBGMを停止
}
}
//表示-------------------------------------------------------------------------------------------------------
void Stage1Draw(void)
{
gsDraw2D( sStage1, Stage1X, 0); //ステージを普通に描画
gsDraw2D( sStage1, Stage1X+GS_WINDOW_WIDTH, 0);//ステージを右画面分戻して描画
gsDraw2D( sJari, JariX, 377); //砂利を普通に描画
gsDraw2D( sJari, JariX+GS_WINDOW_WIDTH, 377); //砂利を右画面分戻して描画
//各ファイルの表示処理を呼び出す
CurlsanDraw();
KamaDraw();
KumanoteDraw();
SukoppuDraw();
}
//移動-------------------------------------------------------------------------------------------------------
void Stage1Move(void)
{
//Dキー、カールさんのX座標が430なら
if( gsKeyState('D') == GSKS_PRESS && gCurlsan.x == 430)
{
Stage1X -= 4; //ステージを-4ずらす
JariX -= 4; //砂利を-4ずらす
}
}