我无法创建多个" Enemy"正确的Java

时间:2015-06-23 01:59:18

标签: java

当我尝试创造不止一个" Enemy"它们堆叠在一起并表现不正确。 Int enemyX和enemyY代表它的坐标。我知道他们可能不应该是静态的,但另一个类使用Enemy.enemyX / Y引用它们。如何创建多个" Enemies"并且仍然使用Enemy.enemyX / Y给每个敌人的坐标。谢谢。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

public class Enemy extends GameObject {

    public static int enemyX = 50;
    public static int enemyY = 360;
    public int enemyMoveX = (int) (Math.random() * 10) + 5,
            enemyMoveY = (int) (Math.random() * 10) + 5;
    public int angle;

    public void tick() {
        angle++;
        if (angle == 360) {
            angle = 0;
        }
        enemyX += enemyMoveX;
        enemyY += enemyMoveY;
        if (enemyX > 1250 || enemyX < 50) {
            enemyMoveX = -enemyMoveX;
        }
        if (enemyY > 670 || enemyY < 50) {
            enemyMoveY = -enemyMoveY;
        }
        enemyX = Main.clamp(enemyX, 0, Main.WIDTH - 32);
        enemyY = Main.clamp(enemyY, 0, Main.HEIGHT - 53);
    }

    static int sizeX = 30, sizeY = 30;
    Color randomColor = new Color(255, (int) (Math.random() * 125),
            (int) (Math.random() * 125), 255);

    public void render(Graphics g) {
        g.setColor(randomColor);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.translate(enemyX + (sizeX / 2), enemyY + (sizeY / 2));
        g2d.rotate(Math.toRadians(angle), 0, 0);
        g2d.fill(new Rectangle2D.Double(sizeX / -2, sizeY / -2, sizeX, sizeY));
    }
}

3 个答案:

答案 0 :(得分:0)

您好,您不应该使用static

的原因之一
public static int enemyX = 50;
public static int enemyY = 360;

这意味着Enemy的每个实例都会始终具有某些x / y值。

此外,如果您要使用Graphics2D g2d = (Graphics2D) g.create();,则应确保在不再需要时致电g2d.dispose();

答案 1 :(得分:0)

简单,不要将enemyX和enemyY声明为静态变量。

public static int enemyX = 50;
public static int enemyY = 360;

应该是:

private int enemyX = 50;
private int enemyY = 360;

public int getEnemyX() { return enemyX;}
public int getEnemyY() { return enemyY;}

获取每个敌人的坐标,
遍历您的敌人列表/数组,并致电getEnemyX()getEnemyY()

答案 2 :(得分:0)

public class Enemy extends GameObject{

public static int enemyX;
public static int enemyY;
public int enemyMoveX = (int)(Math.random() * 10) + 5,
        enemyMoveY = (int)(Math.random() * 10) + 5;
public int angle;

为什么不成功:

public class Enemy extends GameObject{

 private int enemyX;
 private int enemyY;
....

然后添加两个方法,可以将X和Y值返回给其他类/方法。

public int getEnemyX() {
 return enemyX;
}

public int getEnemyY() {
 return enemyY;
}

当你将enemyX和enemyY声明为static时,它意味着变量的所有实例都是相同的。通过不使它们成为静态,每个实例都可以具有自己的价值。

编辑:您还需要一个构造函数来制作敌人的每个实例。

public Enemy(int xValue, int yValue) {
 enemyX = xValue;
 enemyY = yValue;
}