当我尝试创造不止一个" 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));
}
}
答案 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;
}