Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';t创建“的多个实例”;“敌人”;正确的Java_Java - Fatal编程技术网

我能';t创建“的多个实例”;“敌人”;正确的Java

我能';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

当我试图创造一个以上的“敌人”时,他们相互叠加,行为不正确。Ints enemyX和enemyY表示它的坐标。我知道它们可能不应该是静态的,但是另一个类使用敌方.enemyX/Y引用它们。我如何创建多个“敌人”,并且仍然使用敌方.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));
    }
}
导入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