好的,我刚开始学习java(我通常用Objective-C编程)。我的第一款游戏是类似于神奇宝贝的游戏,然而,它显然更加简化......
我遇到的麻烦是我无法找到一种方法来阻止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;
}
然而,当我实现这个时,玩家会被卡住并且无法释放。
谢谢你们
答案 0 :(得分:1)
碰撞检测是一个广泛而深刻的主题,有很多方法可以实现它。
我强烈建议您阅读The Guide To Implementing 2D Platformers,这应该会给您一些很好的建议。我使用Sonic Retro Physics Guide实现了一个2D平台引擎,这非常有用。
在我的游戏中 Clover:一个奇怪的故事我(不必要!)实现了一个更复杂的每像素碰撞与边界框的混合。方法是计算出所需的移动路径,然后逐个像素地检查是否有任何阻碍 - 如果有的话,只移动到那个像素减去一个。
创建一个在所有情况下都完美无缺的2D引擎是一个非常高的命令,而不是你应该尝试的东西。对演员的体型有一些限制,以及任何可以在单个刻度中行进的最大速度将使您的生活更轻松。省略可以推动玩家的事情会更容易,因为你只需要在一个'方向'进行一次碰撞检测(即当玩家移动时,而不是当所有其他玩家移动时)。