0

好的,所以我刚刚开始学习 java(我通常用 Objective-C 编程)。我的第一个游戏是一个类似于 Pokémon 的游戏,但是,它显然要简化得多......

我遇到的麻烦是我找不到阻止 2 个精灵相互“重影”的方法。在屏幕上,我设置了边界(边界)、玩家精灵和敌人精灵。

public void playerUpdate(GameContainer gc, int delta) throws SlickException
{
    Input input = gc.getInput();

    // Right Key Pressed
    if (input.isKeyDown(Input.KEY_RIGHT) && (leftKeyPressed == false)
            && (upKeyPressed == false) && (downKeyPressed == false))
    {
        player = walkRight;
        playerX += speed * delta;
        rightKeyPressed = true;
        if (playerX >= Main.getWindowWidth() - pImageWidth)
        {
            playerX -= speed * delta;
        }
    } else if (rightKeyPressed == true) 
    {
        player = standRight; 
        rightKeyPressed = false;
    } 

^^ 这是我需要实现碰撞检测的地方。我已经为每个图像添加了矩形以进行碰撞检测,但是,我并不是在寻找一种让它们消失的方法。我需要一种方法来阻止一个精灵穿过另一个精灵。

有任何想法吗?

我试过使用

if (this.playerBoundingBox.intersects(Enemy.getEnemyBoundingBox())
{
    playerX += speed * delta;
}

但是,当我实施此操作时,播放器会卡住并且无法释放。

多谢你们

4

1 回答 1

1

碰撞检测是一个广泛而深入的话题,实现它的方法有很多。

我强烈建议您阅读实现 2D 平台游戏指南,它应该会给您一些很好的建议。我使用Sonic Retro Physics Guide实现了一个 2D 平台引擎,这非常有用。

在我的游戏Clover: A Curious Tale我(不必要!)实现了一个更复杂的混合逐像素碰撞与边界框。该方法是计算出所需的移动路径,然后逐个像素检查是否有任何阻碍 - 如果有,只移动到那个像素减一的距离。

创建一个在所有情况下都完美无缺的 2D 引擎是一项非常艰巨的任务,而不是您应该尝试的事情。对演员的大小等事物进行一些限制,以及任何事物在单次滴答声中可以移动的最大速度将使您的生活更轻松。省略可以推动玩家的东西会容易得多,因为你只需要在一个“方向”上进行一次碰撞检测(即当玩家移动时,而不是当所有其他演员移动时)。

于 2012-06-26T08:10:06.513 回答