【问题标题】:Collision detection for separate class instances - Processing Java单独类实例的碰撞检测 - 处理 Java
【发布时间】:2015-11-24 04:35:42
【问题描述】:

我有一个生成敌人的类和一个生成玩家的类。此刻,他们都是两个互相靠近的圆圈。我已经为它们崩溃时做了碰撞检测功能,但我无法让它工作。我已经在类之外创建了函数并尝试调用每个类的位置变量,但它说我不能对非静态字段进行静态引用。我还尝试了每个类中的碰撞检测,但也不起作用。

class Player {
    int Pos_X;
    int Pos_Y;
    int Speed;

    Player(int x, int y, int speed) {
        this.Pos_X = x;
        this.Pos_Y = y;
        this.Speed = speed;
    }

    void Update() {
        ellipse(Pos_X, Pos_Y, 40, 40);
        Pos_X += Speed;
    }
}

class Enemy {
    int Pos_X;
    int Pos_Y;
    int Speed;

    Enemy(int x, int y, int speed) {
        this.Pos_X = x;
        this.Pos_Y = y;
        this.Speed = speed;
    }

    void Update() {
        ellipse(Pos_X, Pos_Y, 40, 40);
        Pos_X -= Speed;
    }
}

Player Player1;
Enemy Enemy1;
void setup() {
    size (500, 500);
    Player1 = new Player (0, 200, 3);
    Enemy1 = new Enemy (500, 200, 3);
}

void draw() {
    background(200);
    Player1.Update();
    Enemy1.Update();
    if (intersectsBox(Player.Pos_X, Player.Pos_Y)) { 
        ellipse(100, 100, 100, 100);
    }
}

boolean intersectsBox(float X, float Y) {
    if (X > Enemy.Pos_X && X < Enemy.Pos_X + 40) {
        if (Y > Enemy.Pos_Y && Y < Enemy.Pos_Y + 40) {
          return true;
        }
    }
}

【问题讨论】:

  • 请格式化代码并创建MCVE
  • intersectsBox() 中缺少“return false”语句。

标签: java processing


【解决方案1】:

要使用类中的变量,您必须引用该类的实例。在您的代码中,Enemy 是一个类,Enemy1 是该类的一个实例。所以当你尝试这样做时:

if (X > Enemy.Pos_X && X < Enemy.Pos_X + 40) {

处理给您一个错误,因为您使用的是类,而不是实例。 Processing 不知道您说的是哪个敌人。相反,您必须这样做:

if (X > Enemy1.Pos_X && X < Enemy1.Pos_X + 40) {

现在 Processing 知道您正在谈论的 Enemy 类的哪个实例。您还可以将 Enemy 的实例作为 参数 传递给该函数,这样您就可以使用它与多个敌人发生碰撞。

只是一般性建议:如果您遵循标准格式和命名约定,您的代码将更容易阅读 - 缩进您的代码(如果您在编辑器中按 ctrl+t,处理将为您完成),并且确保只有类以大写字母开头。方法和变量应以小写字母开头。

【讨论】:

  • 啊,现在一切都说得通了。谢谢。我可以在 11 分钟内勾选你的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2012-09-14
相关资源
最近更新 更多