スクロール

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

スクロール

#1

投稿記事 by リーじゅ » 15年前

こんばんわ。
初めて質問させていただきます。

早速ですが、アクションゲームを作っていて、キャラを中心としてマップの障害物を動かしたいのですが、プログラミングをどうすればいいのでしょうか?

お願いします。 画像

わふー

Re:スクロール

#2

投稿記事 by わふー » 15年前

こんばんは。

if ( マップの障害物を動かしたい ){
マップの障害物を動かす();
}

こんな感じでどうでしょう!

Tatu

Re:スクロール

#3

投稿記事 by Tatu » 15年前

私ならばスクロール時に全ての物体の座標を変化させるのは面倒なので
画面の左上の座標を記録する変数を用意し、
キャラクターの動きに応じて値が変わるようにします。

そして、描画関数の引数の座標を
(物体の座標)-(画面の左上の座標)とします。

キャラクターの動きに合わせてカメラを動かすようなものだと思ってください。

KEYONN_

Re:スクロール

#4

投稿記事 by KEYONN_ » 15年前

こんな感じでどうでしょう。
マップエディタは、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);

}
}
}

閉鎖

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