gpt4 book ai didi

java - 单独类实例的碰撞检测 - 处理 Java

转载 作者:行者123 更新时间:2023-12-01 10:51:19 26 4
gpt4 key购买 nike

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

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;
}
}
}

最佳答案

要使用类中的变量,您必须引用该类的实例。在您的代码中,Enemy 是一个类,Enemy1 是该类的实例。因此,当您尝试执行此操作时:

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

处理时会出现错误,因为您使用的是类,而不是实例。处理不知道您正在谈论的哪个敌人。相反,你必须做这样的事情:

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

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

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

关于java - 单独类实例的碰撞检测 - 处理 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33878577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com