ボンバーマン風のゲームで敵に四方向に弾を撃たせたいのですが
うまくいきません。
症状:弾を撃ったあとに敵が移動すると弾も敵が移動した方向に一緒に
動いてしまいます。
弾は一度だしたら壁にぶつかるまでまっすぐ飛ばしたいのですがどうしたらいいですか?
宜しくお願いします
四方向のショット
Re:四方向のショット
まず○ンバーマンで弾を打つっという行動が分かりませんが・・・^^;
コードがないので何とも言えないですけど、
一緒に移動するということは、弾、敵の位置を計算する変数が同じになっている
もしくは、関数でそれぞれ計算するとしたら、
弾の座標を渡すところを、敵の座標を渡してしまっている
ぐらいでしょうか。
コードを公開すればもっと良い回答が得られるかも知れません。
コードがないので何とも言えないですけど、
一緒に移動するということは、弾、敵の位置を計算する変数が同じになっている
もしくは、関数でそれぞれ計算するとしたら、
弾の座標を渡すところを、敵の座標を渡してしまっている
ぐらいでしょうか。
コードを公開すればもっと良い回答が得られるかも知れません。
Re:四方向のショット
返信ありがとうございます。
ソースは敵から向きをもらい、その方向に弾を出すという風にしたいのですが・・・
void enemy_shot::hassya(Enemy *date , Map *map , Player *life)
{
for(int i = 0; i < ENEMY ; i++)
{
if(date->enemy.tama_flag == 1 &&teki_shot.shot_flag == 0)
{
teki_shot.x = date->enemy.x;
teki_shot.y = date->enemy.y;
teki_shot.shot_flag = 1;
teki_shot.shot_move_flag = 1;
}
if(teki_shot.shot_flag == 1)
{
if(date->enemy.muki == 0 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 1;
teki_shot[i].y -= 5;
if(map->map[teki_shot[i].y/32-1][teki_shot[i].x/32] == 2)
{
map->map[teki_shot[i].y/32-1][teki_shot[i].x/32] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].y < -80)
{
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
teki_shot[i].shot_move_flag = 0;
}
}
if(date->enemy[i].muki == 1 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 2;
teki_shot[i].x -= 5;
if(map->map[teki_shot[i].y/32][teki_shot[i].x/32 - 1] == 2)
{
map->map[teki_shot[i].y/32][teki_shot[i].x/32 - 1] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].x < -80)
{
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
teki_shot[i].shot_move_flag = 0;
}
}
if(date->enemy[i].muki == 2 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 3;
teki_shot[i].x += 5;
if(map->map[teki_shot[i].y/32][teki_shot[i].x/32 + 1] == 2)
{
map->map[teki_shot[i].y/32][teki_shot[i].x/32 + 1] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].x > 480)
{ teki_shot[i].shot_move_flag = 3;
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
}
}
if(date->enemy[i].muki == 3 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 4;
teki_shot[i].y += 5;
if(map->map[teki_shot[i].y/32 + 1][teki_shot[i].x/32] == 2)
{
map->map[teki_shot[i].y/32 + 1][teki_shot[i].x/32] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].y > 640)
{
teki_shot[i].shot_move_flag = 0;
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
}
}
}
}
}
ソースは敵から向きをもらい、その方向に弾を出すという風にしたいのですが・・・
void enemy_shot::hassya(Enemy *date , Map *map , Player *life)
{
for(int i = 0; i < ENEMY ; i++)
{
if(date->enemy.tama_flag == 1 &&teki_shot.shot_flag == 0)
{
teki_shot.x = date->enemy.x;
teki_shot.y = date->enemy.y;
teki_shot.shot_flag = 1;
teki_shot.shot_move_flag = 1;
}
if(teki_shot.shot_flag == 1)
{
if(date->enemy.muki == 0 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 1;
teki_shot[i].y -= 5;
if(map->map[teki_shot[i].y/32-1][teki_shot[i].x/32] == 2)
{
map->map[teki_shot[i].y/32-1][teki_shot[i].x/32] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].y < -80)
{
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
teki_shot[i].shot_move_flag = 0;
}
}
if(date->enemy[i].muki == 1 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 2;
teki_shot[i].x -= 5;
if(map->map[teki_shot[i].y/32][teki_shot[i].x/32 - 1] == 2)
{
map->map[teki_shot[i].y/32][teki_shot[i].x/32 - 1] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].x < -80)
{
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
teki_shot[i].shot_move_flag = 0;
}
}
if(date->enemy[i].muki == 2 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 3;
teki_shot[i].x += 5;
if(map->map[teki_shot[i].y/32][teki_shot[i].x/32 + 1] == 2)
{
map->map[teki_shot[i].y/32][teki_shot[i].x/32 + 1] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].x > 480)
{ teki_shot[i].shot_move_flag = 3;
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
}
}
if(date->enemy[i].muki == 3 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 4;
teki_shot[i].y += 5;
if(map->map[teki_shot[i].y/32 + 1][teki_shot[i].x/32] == 2)
{
map->map[teki_shot[i].y/32 + 1][teki_shot[i].x/32] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}
if(teki_shot[i].y > 640)
{
teki_shot[i].shot_move_flag = 0;
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
}
}
}
}
}
Re:四方向のショット
コードは規約通り、プレタグで囲ってください。
コードを載せてもらったんですが、何がどうなってるのか、
コメントもないので、余裕のない自分にはどうもできませんが、
プロジェクトごとUPする、
もしくは、デバッガで弾の移動するような所をすべてブレークポイントで止めながら、
一つずつ動作を追っていってください。
後者のが、一番ベストだとは思いますが・・・。
コードを載せてもらったんですが、何がどうなってるのか、
コメントもないので、余裕のない自分にはどうもできませんが、
プロジェクトごとUPする、
もしくは、デバッガで弾の移動するような所をすべてブレークポイントで止めながら、
一つずつ動作を追っていってください。
後者のが、一番ベストだとは思いますが・・・。