2013-02-11 117 views
1

我正在做一个平铺2d方平台游戏。到目前为止,我做了一些事情。 我正在使用libgdx的矩形进行基本的碰撞检测,所以考虑 我现在只有草块了现在我在Java中做了一个单独的块世界(文件阅读器没有准备好) 问题是我的检测只在第一次工作换句话说,如果我产生碰撞 到它检测到碰撞的块并且这样做。尽管如果我将球员排在 的顶部,那么与碰撞球员永远落在一起。LibGdx - 平铺游戏碰撞检测

下面是代码world.update(); =>

public void update() { 

    Iterator<block> cb = Blocks.iterator(); 
    while (cb.hasNext()) { 

     block b = cb.next(); 
     if (b.getBounds().overlaps(player.getBounds())) { 

      if (player.getPosition().x >= b.getPosition().x + 32) { 
       //RIGHT 
       player.getVelocity().x = 0; 
      } else if (player.getPosition().x + 32 <= b.getPosition().x) { 
       //Left 
       player.getVelocity().x = 0; 
      } 
      //All Y 
      player.getVelocity().y = 0; 
     } 
     if (!b.getBounds().overlaps(player.getBounds())) { 
      player.getVelocity().y = -gravity; 
     } 

    } 
} 

回答

2

while循环正在申请重力每个块您的播放器不相交。所以如果你有10个方块,并且玩家只相交1,那么你仍然会使用重力9次。你应该只将重力变化应用于玩家一次。

在你的循环之前设置一个标志(boolean hitSomething = false),如果玩家击中任何块,则将其设置为真(hitSomething = true)。然后,在循环之后,如果hitSomething为假,则将重力应用于玩家。

使用调试器来逐步更新方法是一种很好的方法,可以找出代码在这种情况下所做的工作。它应该比等待Stack Overflow调试代码更快。