インベーダー
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: インベーダー
一キャラづつ処理せずに、まとめて処理すれば良いだけです。
右に進んでいたら、右端に来たら全部を一度に下げます。左端も同様です。
ソースがないので、ちよっと簡単な説明すぎかも知れませんが。
右に進んでいたら、右端に来たら全部を一度に下げます。左端も同様です。
ソースがないので、ちよっと簡単な説明すぎかも知れませんが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
00
Re: インベーダー
プログラムはこんな感じなんですが、これでは駄目ですかね
// 敵
EMAX_X = 10;
typedef struct {
int xPos;
int yPos;
int Speed;
bool En;
bool xDir;
bool yDir;
int no;
} ENEMYSTATE;
ENEMYSTATE e_state[EMAX_X];
for( int x = 0; x < EMAX_X; x++ ){
e_state[x].En = false;
e_state[x].Speed = 10;
e_state[x].xDir = false;
e_state[x].yDir = false;
e_state[x].xPos = 40 + x * 32;
e_state[x].yPos = 40;
}
for( int x = 0; x < EMAX_X; x++ ){
if( e_state[x].En == false ){ // テーブルが空か??
e_state[x].En = true; // 生まれた
}
if( e_state[x].En == true ){
if( e_state[x].xDir == false ){
if( CTm.GetFrame_local() % 20 == 0 ){
e_state[x].xPos += e_state[x].Speed;
if( e_state[x].xPos >= 440 ){
e_state[x].xDir = true;
e_state[x].yDir = true;
}
}
} else if( e_state[x].xDir == true ){
if( CTm.GetFrame_local() % 20 == 0 ){
e_state[x].xPos -= e_state[x].Speed;
if( e_state[x].xPos <= 40 ){
e_state[x].yDir = true;
e_state[x].xDir = false;
}
}
}
if( e_state[x].yDir == true ){
e_state[x].yPos += 32;
e_state[x].yDir = false;
}
DrawGraph( e_state[x].xPos, e_state[x].yPos, g_state.my_en[0], TRUE );
}
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: インベーダー
これだと一体づつ判定しているので、
e_state[x].yDir = true;
のフラグはキャラ毎ではなく一個で良いです。
つまり、yDir = true;で良いです。
ループの外にint yDir = false;をお忘れなく。
で下に下げる処理は別ループに分けてください。
for( int x = 0; x < EMAX_X; x++ ){
if( e_state[x].En == true ){
if( yDir == true ){
e_state[x].yPos += 32;
e_state[x].yDir = false;
}
}
}
描画も分けることをおすすめします。
for( int x = 0; x < EMAX_X; x++ ){
if( e_state[x].En == true ){
DrawGraph( e_state[x].xPos, e_state[x].yPos, g_state.my_en[0], TRUE );
}
}by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。