我正在制作一个坦克游戏,我希望敌人随机发射。
package tanks;
import java.util.ArrayList;
import menu.PlayPanel;
import menu.Tanks;
public class Enemy extends Character
{
int launchPosition;
double distance;
double deltaX, deltaY;
public Player player;
public Enemy enemy;
public ArrayList<EnemyBullet> enemyBullets;
public Enemy(PlayPanel panel)
{
super("/objects/enemy tank.png", "/objects/enemy shooter.png");
this.panel = panel;
speed = 3 + rand.nextInt(5);
maxHP = 80 + rand.nextInt(40);
HP = maxHP;
}
public void draw()
{
launchPosition = rand.nextInt(3);
switch(launchPosition)
{
case 0: //up
x_pos = rand.nextInt(Tanks.getSchermBreedte());
y_pos = ObjWH;
angleCannon = 270;
break;
case 1: //left
x_pos = ObjWH;
y_pos = rand.nextInt(Tanks.getSchermHoogte());
angleCannon = 0;
break;
case 2: //under
x_pos = rand.nextInt(Tanks.getSchermBreedte());
y_pos = Tanks.getSchermHoogte() - ObjWH;
angleCannon = 90;
break;
case 3: //right
x_pos = Tanks.getSchermBreedte()- ObjWH;
y_pos = rand.nextInt(Tanks.getSchermHoogte());
angleCannon = 180;
break;
}
}
public void redraw()
{
deltaX = Math.abs(player.x_pos - enemy.x_pos);
deltaY = Math.abs(player.y_pos - enemy.y_pos);
angle = Math.atan2(deltaY, deltaX);
distance = Math.sqrt((Math.pow(deltaX, deltaX) + Math.pow(deltaY,
deltaY)));
x_move = speed*(deltaX/distance);
y_move = speed*(deltaY/distance);
/*
x_move = speed*Math.cos(Math.toRadians(angle));
y_move = speed*Math.sin(Math.toRadians(angle));
*/
x_pos += x_move;
y_pos += y_move;
if (shoot)
{
shootAngle = angleCannon;
shootTimer.start();
}
}
}
敌人总是在左上角发射+他们不会向玩家移动。我真的不知道为什么会发生这两件事。
答案 0 :(得分:2)
左上角是坐标系的(0,0)。最有可能的是,你将x_pos和/或y_pos与0相乘,或者做一些能让它们非常接近0的其他东西。
distance = Math.sqrt((Math.pow(deltaX, deltaX) + Math.pow(deltaY, deltaY)));
这条线错了。看一下Math.pow的文档。你想要对deltaX和deltaY进行平方,但它实际上并不是你正在做的事情。你正在计算deltaX ^ deltaX和deltaY ^ deltaY,它们都可能很大。取平方根后,除以这个大的距离值除以其他东西。这可能接近0。
另一个答案显而易见,您的代码中可能存在更多错误。最好的方法是使用debugger逐步执行程序,并观察x_pos和y_pos的值会发生什么。你会很快找到你的问题(可能比在这里要求的更快)。
答案 1 :(得分:1)
这里似乎有一个问题
deltaX = Math.abs(player.x_pos - enemy.x_pos);
deltaY = Math.abs(player.x_pos - enemy.x_pos);
deltaX和deltaY具有相同的值。