子弹射击目标算法 - Java
Bullet Shooting On Target Algorithm - Java
我正在制作一款可以射击的游戏。我的算法有问题,子弹指向鼠标的方向但没有朝它移动。你能给我一个更好的算法并告诉我为什么我的算法不起作用吗?所有这些代码都在 Java 中。 顺便说一句,class MImage 是我制作的 class,所以不要被它弄糊涂了。 `
private double angle;
public Bullet(int xx, int yy, int x, int y,Gun gun, int id, double angle) {
this.x = xx;
this.y = yy;
tx = x;
ty = y;
xorg = xx;
yorg = yy;
this.gun = gun;
this.id = id;
this.angle = angle;
try {
image = new MImage(ImageIO.read(new File("PATH")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
image.rotateBy((int)Math.toDegrees(angle));
stopwatch.start();
}
private int speed = 3,time = 0;;
public void update() {
double speedy, speedx;
speedy = speed * Math.sin(Math.toRadians(angle));
speedx = speed * Math.cos(Math.toRadians(angle));
y = (int) ((-5) * time * time + speedy * time + yorg);
x = (int) (speedx * time + xorg);
time++;
System.out.println(y + " --- " + x);
if(stopwatch.getElapsedTime() > 500) {
terminate(id);
}
}
`
这是我创建 class
的新实例的时候
public boolean shoot(int x, int y, int tx, int ty) {
boolean worked = false;
if(amo >= 0) {
bullets.add(new Bullet(x,y,tx,ty,this,bullets.size(),Math.atan2(ty-y,tx-x)));
amo --;
worked = true;
}
return worked;
}
谢谢
我找到了问题的答案。该算法一点也不难,但它并不完美,但仍然有效。这是简单的三角函数......如果你让 angle = Math.atan2(dy,dx)
然后 velocityX = speed*Math.cos(angle)
然后让 velocityY = speed*Math.sin(angle)
然后在更新函数中放这个代码 x += velocityX y+= velocityY
我正在制作一款可以射击的游戏。我的算法有问题,子弹指向鼠标的方向但没有朝它移动。你能给我一个更好的算法并告诉我为什么我的算法不起作用吗?所有这些代码都在 Java 中。 顺便说一句,class MImage 是我制作的 class,所以不要被它弄糊涂了。 `
private double angle;
public Bullet(int xx, int yy, int x, int y,Gun gun, int id, double angle) {
this.x = xx;
this.y = yy;
tx = x;
ty = y;
xorg = xx;
yorg = yy;
this.gun = gun;
this.id = id;
this.angle = angle;
try {
image = new MImage(ImageIO.read(new File("PATH")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
image.rotateBy((int)Math.toDegrees(angle));
stopwatch.start();
}
private int speed = 3,time = 0;;
public void update() {
double speedy, speedx;
speedy = speed * Math.sin(Math.toRadians(angle));
speedx = speed * Math.cos(Math.toRadians(angle));
y = (int) ((-5) * time * time + speedy * time + yorg);
x = (int) (speedx * time + xorg);
time++;
System.out.println(y + " --- " + x);
if(stopwatch.getElapsedTime() > 500) {
terminate(id);
}
}
`
这是我创建 class
的新实例的时候public boolean shoot(int x, int y, int tx, int ty) {
boolean worked = false;
if(amo >= 0) {
bullets.add(new Bullet(x,y,tx,ty,this,bullets.size(),Math.atan2(ty-y,tx-x)));
amo --;
worked = true;
}
return worked;
}
谢谢
我找到了问题的答案。该算法一点也不难,但它并不完美,但仍然有效。这是简单的三角函数......如果你让 angle = Math.atan2(dy,dx)
然后 velocityX = speed*Math.cos(angle)
然后让 velocityY = speed*Math.sin(angle)
然后在更新函数中放这个代码 x += velocityX y+= velocityY