ゲームでよくある固定されたステージが、キャラクターがある程度移動するとステージがX座標のマイナス方向にスクロールしていくという処理ってどうやればいいんですか?
やったことがないので、まだコードも書いてません。ヒントやアドバイスを貰えると幸いです。
お願いします。
固定スクロールについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 固定スクロールについて
そこを考えるのが楽しいからゲームプログラミングするのでは?と思うんですが。
※ 前例がないのを作るのもゲームプログラマーのお仕事ですよ。
【追記】
せめて、ここまでは分かるんだけどココがわからないと聞いてもらえませんか?
「ゲームでよくある固定されたステージが、キャラクターがある程度移動するとステージがX座標のマイナス方向にスクロールしていくという処理」って2Dゼルダの処理のことでしょうかね? 説明自体が良くわからないので説明不足や理解不足を感じます。
それと「キャラクターがある程度移動しなくてもステージがX座標のマイナス方向にスクロール」することはできているんでしょうか?
※ 前例がないのを作るのもゲームプログラマーのお仕事ですよ。
【追記】
せめて、ここまでは分かるんだけどココがわからないと聞いてもらえませんか?
「ゲームでよくある固定されたステージが、キャラクターがある程度移動するとステージがX座標のマイナス方向にスクロールしていくという処理」って2Dゼルダの処理のことでしょうかね? 説明自体が良くわからないので説明不足や理解不足を感じます。
それと「キャラクターがある程度移動しなくてもステージがX座標のマイナス方向にスクロール」することはできているんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 固定スクロールについて
オフトピック
どんなことを言っているのかまるで理解できないが
if( ある程度移動したら )
{
スクロール
}
って とりあえずやってみればいいんじゃないですかね
if( ある程度移動したら )
{
スクロール
}
って とりあえずやってみればいいんじゃないですかね
-
- 記事: 336
- 登録日時: 11年前
Re: 固定スクロールについて
softyaさん>>回答有難うございます。
いつも説明不足で申し訳ありません。
ステージをそのままX座標のマイナス方向に移動させる処理はできてます。
>2Dゼルダの処理のことでしょうかね?
いえ、ゼルダではありません。ロックマンエグゼのような感じでステージをスクロールさせる処理がしたいんです。ロックマンエグゼってキャラクターがある程度移動したらステージもキャラクターに合わせてスクロールしますよね?(例えば、キャラクターがX座標に+150まで進むとステージもキャラクターの動きに合わせて動くみたいな)。その処理をしたいんです。
usaoさん>>回答有難うございます。
そうですね。実は昨日、一度試しにプログラムを書いた方がいいかなと思ってました。何も書かずにいきなり
ヒントやアドバイスをもらうのは、あまり良くありませんね。とにかくやってみます。
その後にコードとか載せて間違いを指摘してもらいます。
いつも説明不足で申し訳ありません。
ステージをそのままX座標のマイナス方向に移動させる処理はできてます。
>2Dゼルダの処理のことでしょうかね?
いえ、ゼルダではありません。ロックマンエグゼのような感じでステージをスクロールさせる処理がしたいんです。ロックマンエグゼってキャラクターがある程度移動したらステージもキャラクターに合わせてスクロールしますよね?(例えば、キャラクターがX座標に+150まで進むとステージもキャラクターの動きに合わせて動くみたいな)。その処理をしたいんです。
usaoさん>>回答有難うございます。
そうですね。実は昨日、一度試しにプログラムを書いた方がいいかなと思ってました。何も書かずにいきなり
ヒントやアドバイスをもらうのは、あまり良くありませんね。とにかくやってみます。
その後にコードとか載せて間違いを指摘してもらいます。
-
- 記事: 336
- 登録日時: 11年前
Re: 固定スクロールについて
ステージの固定スクロールなんですが、約30分ぐらいで出来ました。
ただ、あともう二つやりたい処理が増えたんですが。
ステージを固定して、キャラクターがある程度進んだらキャラクターに合わせてスクロールさせるという処理は出来ました。
コードはこんな感じに書きました。
ここのステージ処理コードに、アイテム(武器)を選択中は砂利もステージも停止させる処理ができればいいのですが、どう書けばいいですか?
私も色々と試しましたが、うまく動作しません。
ヒントがあればお願いします。
返答が返ってくるまでにもう一度別の処理方法でやってみます。
因みに、キャラクターはカールさんで、カールさんもアイテムを選択中は停止させています。カールさんを停止させる処理はできていますが、ステージと砂利も同じ方法で処理を書くと動作しませんでした。
ただ、あともう二つやりたい処理が増えたんですが。
ステージを固定して、キャラクターがある程度進んだらキャラクターに合わせてスクロールさせるという処理は出来ました。
コードはこんな感じに書きました。
//*********************************************************************
// ステージ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ずらす
}
}
私も色々と試しましたが、うまく動作しません。
ヒントがあればお願いします。
返答が返ってくるまでにもう一度別の処理方法でやってみます。
因みに、キャラクターはカールさんで、カールさんもアイテムを選択中は停止させています。カールさんを停止させる処理はできていますが、ステージと砂利も同じ方法で処理を書くと動作しませんでした。