敌人发射的问题&移动

时间:2015-05-13 12:07:46

标签: java

我正在制作一个坦克游戏,我希望敌人随机发射。

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();
     }

  }

}

敌人总是在左上角发射+他们不会向玩家移动。我真的不知道为什么会发生这两件事。

2 个答案:

答案 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具有相同的值。