ページ 1 / 1
スクロール
Posted: 2010年6月27日(日) 00:21
by リーじゅ
こんばんわ。
初めて質問させていただきます。
早速ですが、アクションゲームを作っていて、キャラを中心としてマップの障害物を動かしたいのですが、プログラミングをどうすればいいのでしょうか?
お願いします。

Re:スクロール
Posted: 2010年6月27日(日) 04:44
by わふー
こんばんは。
if ( マップの障害物を動かしたい ){
マップの障害物を動かす();
}
こんな感じでどうでしょう!
Re:スクロール
Posted: 2010年6月27日(日) 10:32
by Tatu
私ならばスクロール時に全ての物体の座標を変化させるのは面倒なので
画面の左上の座標を記録する変数を用意し、
キャラクターの動きに応じて値が変わるようにします。
そして、描画関数の引数の座標を
(物体の座標)-(画面の左上の座標)とします。
キャラクターの動きに合わせてカメラを動かすようなものだと思ってください。
Re:スクロール
Posted: 2010年6月27日(日) 11:37
by KEYONN_
こんな感じでどうでしょう。
マップエディタは、C+WINAPIか、C#で作るか、フリーのものを使うとして、
Map[20][300];にマップチップ番号を代入してあげてください。
#define CHIP_SIZE 16
#define MAX_BLOCKX CHIP_SIZE*20
#define MAX_BLOCKY CHIP_SIZE*300
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 320
typedef struct Map_{
int ChipNumber; //マップチップ
int ChipNumber2; //マップチップ2
int EnemyNumber; //敵の番号(例:Map[0][0].EnemyNumber=1)
}Map_;
Map_ Map[20][300];
//初期化関数
void Init()
{
FILE *fp;
fp=fopen("./data/mapdata01.txt","r");
for(i=0;i<300;i++){
for(j=0;j<20;j++){
if(j!=20)
fscanf(fp,"%d,",&Map[j].ChipNumber);
else
fscanf(fp,"%d",&Map[j].ChipNumber);
}
}
}
//スクロールを計算する関数
void CalcScroll(void)
{
//キャラクターが画面の中心にくるようにする
sx=Player.x-(SCREEN_WIDTH/2);
//sy=Player.y-(SCREEN_HEIGHT/2);
//sxが0より小さいなら0にする。(それ以上下がらないようにする)
if(ScrollX<0) ScrollX=0;
if(ScrollY<0) ScrollY=0;
if(ScrollX>(MAX_BLOCKX)-SCREEN_WIDTH) ScrollX=(MAX_BLOCKX)-SCREEN_WIDTH;
if(ScrollY>(MAX_BLOCKY)-SCREEN_HEIGHT) ScrollY=(MAX_BLOCKY)-SCREEN_HEIGHT;
}
//背景を描画する関数
void DrawBG()
{
int StartX=ScrollX/CHIP_SIZE,StartY=ScrollY/CHIP_SIZE;
int EndX=(ScrollX+SCREEN_WIDTH-1)/16,EndY=(ScrollY+SCREEN_HEIGHT-1)/16;
for(int i=StartY;i<=EndY;i++)
{
for(int j=StartX;j<=EndX;j++)
{
//マップチップを描画する
DrawChip(Map[j].ChipNumber,j*CHIP_SIZE-ScrollX,i*CHIP_SIZE-ScrollY);
}
}
}