java - 处理中的多个类

标签 java collision-detection

我正在制作一个游戏,你控制一个方 block ,物体会在随机的地方产生,你必须捡起这些物体才能获得分数,同时还必须躲避从一边到另一边的大方 block 。现在我有 2 个类(一个用于敌人 - 大方 block - 一个用于英雄),我还没有使用生成对象完成点系统,但这不是我现在想做的。

所以我现在的问题是,当你用你的英雄接触“敌人”时,我真的不知道如何让这个人失去游戏/生命。我想知道如何在不类的情况下做到这一点,但我想知道当他们在不同的类(class)时如何做到这一点。

如果有人可以用代码和注释解释如何做到这一点,这会对我有很大帮助:)(我读过一些关于类的“扩展”的内容,但我不确定这是否是我应该使用的或不是)。

这是我的游戏目前的屏幕截图,只是为了更好地说明它:

http://i.gyazo.com/d87f4353064da39ec7a91a28febcc1ca.png

这是主代码页:

Hero myHero = new Hero(400,480,5);
Enemies myEnemies = new Enemies(50,50,10);
Enemies myEnemies2 = new Enemies(50,350,15);
Enemies myEnemies3 = new Enemies(50,650,12);

void setup() {
    size(900,800);
    frameRate(30);
    smooth();
}

void draw() {
    background(0);
    myHero.keyPressed();
    myEnemies.enemyDisplay();
    myEnemies.enemyMove();
    myEnemies2.enemyDisplay();
    myEnemies2.enemyMove();
    myEnemies3.enemyDisplay();
    myEnemies3.enemyMove();
}

第 1 类:

class Enemies {
    float xpos, ypos, speed;

    Enemies(float x, float y, float s) {
        xpos = x;
        ypos = y;
        speed = s;
    } 

    void enemyDisplay() {
        rect(xpos, ypos, 100, 100); 
    }

    void enemyMove() {
        xpos += speed;
        if((xpos > width - 100) || (xpos < 0)) {
            speed *= -1;
        }
    }
}

第 2 类:

class Hero {
    float xpos_, ypos_, speed_;

    Hero(float x, float y, float s) {
        xpos_ = x;
        ypos_ = y;
        speed_ = s;
    }     

    void keyPressed() {
        if (key == CODED) {
            if (keyCode == UP) {
                ypos_ -= speed_;
            }
            if (keyCode == DOWN) {
                ypos_ += speed_;
            }
            if (keyCode == LEFT) {
                xpos_ -= speed_;
            }
            if (keyCode == RIGHT) {
                xpos_ += speed_;
            }     
        }
        rect(xpos_,ypos_,30,30);
    }
}

最佳答案

我相信您提出的问题涉及基本的碰撞检测和对象交互。

我首先将 Enemies 创建为 List 并在 setup() 调用期间创建它/添加元素:

List<Enemies> enemies = new List<Enemies>();
enemies.add(new Enemies(50,50,10));

这允许您将所有敌人存储在一个对象下。所以你的 draw() 方法看起来像:

void draw(){
    background(0);
    myHero.keyPressed();

    for(Enemies enemy : enemies)
    {
        enemy.enemyDisplay();
        enemy.enemyMove();

        if (hero.isCollidingWith(enemy)) // collision method defined in the hero object, but you could define it in the Enemies class as well, it doesn't really matter
        {
            hero.removeHealth(); // method defined in hero that removes health
        }
    }
}

此方法将位于您的一个类中:

public boolean isColliding(Enemies enemy)
{
  // check the x and y coordinates of each object

}

我希望这有助于为您指明正确的方向。

关于java - 处理中的多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26533350/

相关文章:

c++ - 三角形内的顶点 - 碰撞检测

c++ - 编译三角形交集代码?

ios - 带有碰撞检测的 UIView 永久线性动画

java - 应用程序未加载 Music LibGDX

java - C++ 和 Java 中 CRC32 的不同结果

java - 如何检查遍历是否已达到 Java 二维数组中的某个索引?

java - 我的边缘碰撞算法无法正常工作

javascript - 分离轴定理难点

java - 如何在TeeChart中用DASH风格绘制ColorLine?

java - 使用 Spring 的 JPA 存储库进行计数器