【问题标题】:Slick2D Collision Detection - Strange MovementSlick2D 碰撞检测 - 奇怪的运动
【发布时间】:2013-03-22 10:17:35
【问题描述】:

我目前使用的集合检测方法可以解释碰撞,但会根据方向产生奇怪的效果。它将:

  • 如果玩家击中对象的右侧,则始终工作。
  • 如果玩家击中对象的顶部或底部,请将其推到一边。
  • 如果玩家撞到对象的左侧,则第一次工作,但下次检测到左侧发生碰撞时会将玩家传送到对象的另一侧。

这是当前的碰撞检测代码:

if(player.playerBounds.intersects(portal.bounds)&&player.isMovingLeft){
       player.playerX=(portal.x+portal.width);
       player.playerX++;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingRight){
        player.playerX=(portal.x-player.width);
        player.playerX--;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingUp){
        player.playerY=(portal.y+portal.height);
        player.playerY--;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingDown){
        player.playerY=(portal.y+player.height);
        player.playerY++;
    }

【问题讨论】:

    标签: java collision-detection slick2d


    【解决方案1】:

    你可以试试下面的代码,看看它是否有效?

    bool collide = player.playerBounds.intersects(portal.bounds);
    
    if(collide && player.isMovingLeft){
       player.playerX = (portal.x + portal.width) + 1;
    }
    else if(collide && player.isMovingRight){
        player.playerX = (portal.x - player.width) - 1;
    }
    else if(collide && player.isMovingUp){
        player.playerY = (portal.y + portal.height) + 1;
    }
    else if(collide && player.isMovingDown){
        player.playerY = (portal.y + player.height) - 1;
    }
    

    可能的原因是:

    • 多次检查碰撞。
    • 移动玩家正在改变移动方向。
    • 其他代码与此代码冲突。
    • isMovingX 无法正常工作。

    【讨论】:

    • 它运行了,但它最终与原始代码具有相同的效果。
    【解决方案2】:

    在这里回答我自己的问题。前进方向的标志从未改变过,这是问题的根源。一个方向是正常的,因为它与我通常会进入的第一个方向对齐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多