我能';t创建“的多个实例”;“敌人”;正确的Java
当我试图创造一个以上的“敌人”时,他们相互叠加,行为不正确。Ints enemyX和enemyY表示它的坐标。我知道它们可能不应该是静态的,但是另一个类使用敌方.enemyX/Y引用它们。我如何创建多个“敌人”,并且仍然使用敌方.enemyX/Y为该类提供每个敌人的坐标。多谢各位我能';t创建“的多个实例”;“敌人”;正确的Java,java,Java,当我试图创造一个以上的“敌人”时,他们相互叠加,行为不正确。Ints enemyX和enemyY表示它的坐标。我知道它们可能不应该是静态的,但是另一个类使用敌方.enemyX/Y引用它们。我如何创建多个“敌人”,并且仍然使用敌方.enemyX/Y为该类提供每个敌人的坐标。多谢各位 import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D
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));
}
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.geom.Rectangle2D;
公共类敌人扩展游戏对象{
公共静态int enemyX=50;
公共静态整数=360;
public int enemyMoveX=(int)(Math.random()*10)+5,
enemyMoveY=(int)(Math.random()*10)+5;
公共视角;
公共空白勾号(){
angle++;
如果(角度==360){
角度=0;
}
enemyX+=enemyMoveX;
灌肠+=灌肠;
如果(enemyX>1250 | | enemyX<50){
enemyMoveX=-enemyMoveX;
}
如果(Enemy>670 | | Enemy<50){
enemyMoveY=-enemyMoveY;
}
enemyX=主夹钳(enemyX,0,主夹钳宽度-32);
Enemy=主夹钳(Enemy,0,主夹钳高度-53);
}
静态int-sizeX=30,sizeY=30;
颜色randomColor=新颜色(255,(int)(Math.random()*125),
(int)(Math.random()*125),255);
公共空间渲染(图形g){
g、 设置颜色(随机颜色);
Graphics2D g2d=(Graphics2D)g.create();
翻译(enemyX+(sizeX/2),enemyY+(sizeY/2));
g2d.旋转(数学托拉半径(角度),0,0);
g2d.fill(新的矩形2D.Double(sizeX/-2,sizeY/-2,sizeX,sizeY));
}
}
您好,这是您不应该使用静态的原因之一
public static int enemyX = 50;
public static int enemyY = 360;
这意味着,敌人
的每个实例将始终具有精确的某个x/y值
另外,如果要使用
Graphics2D g2d=(Graphics2D)g.create()
,您应该确保调用g2d.dispose()代码>当您不再需要它时您好,这是您不应该使用静态
public static int enemyX = 50;
public static int enemyY = 360;
这意味着,敌人
的每个实例将始终具有精确的某个x/y值
另外,如果要使用Graphics2D g2d=(Graphics2D)g.create()
,您应该确保调用g2d.dispose()代码>当您不再需要它时,不要将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()
简单,不要将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()
为什么不做呢
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;
}
为什么不做呢
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;
}
敌方
类不是敌方
对象。当你说敌人.enemyX
时,代码不知道你指的是哪个敌人
对象。您认为enemyX
不应该是静态的,因为将其设置为静态会将其转换为全局变量,而不是对象成员。这表明您在使用敌方
的代码中有问题,而不是在敌方
类中(在您将成员变量设置为非静态之后)。敌方
类不是敌方
对象。当你说敌人.enemyX
时,代码不知道你指的是哪个敌人
对象。您认为enemyX
不应该是静态的,因为将其设置为静态会将其转换为全局变量,而不是对象成员。这表明您在使用敌方
的代码中有问题,而不是在敌方
类中(在您将成员变量设置为非静态之后)。假设我在另一个类中。我如何创建int=getEnemyX()对不起,我对这个很陌生。如果你在另一个类中,比如说public class TestClass{
,你需要这个类来访问enemyX
和enemyY
位置。通过创建public int-getEnemyX{return enemyX}
您的另一个函数现在可以调用int x=敌方.getEnemyX();
现在x将是EnemyX值。但这是否意味着getEnemyX()
必须是静态的?我的错误是:无法对非静态方法getEnemyX()进行静态引用从类型敌方
Nope.你确定你的类是public class敌方扩展GameObject{private int enemyX;private int enemyY;…
enemyX和enemyY不应该是静态的,返回它们的方法也不应该是静态的。这就是我在另一个类中尝试使用这些方法的方式:int trailX=敌方.getEnemyX(),trailY=敌方.getEnemyY();
这是我的敌方类:公共类敌方扩展游戏对象{private int enemyX,enemyY;公敌(int xValue,int yValue){enemyX=xValue;enemyY=yVa