使用canvas + javascript进行2D碰撞检测

时间:2015-02-15 22:05:08

标签: javascript html5 canvas

嘿,我正在尝试在HTML5画布和Javascript中实现简单游戏。 我的问题是玩家在平台之间跳跃。每当玩家在平台上跳跃(我有阵列平台位置)时我会关闭引力,因此玩家不会落在地上。然后在我的更新方法(一直刷新的方法)中我调用另一个方法来检查循环是否玩家跳到平台位置。问题是它只适用于一个平台,因为当我添加更多平台时,方法循环通过平台位置和播放器倒下。有没有办法我可以不断检查所有平台位置,而不仅仅是一个? 我的代码检查玩家是否在平台上

 for(i=0;i<platforms.length;i++) {
              if ((player.y <= platforms[i].y) && (player.y >= platforms[i].y - 5) && (player.x >= platforms[i].x) && (player.x <= (platforms[i].x + platforms[i].width + 10)) && (player.jumping == true)) {
                  ground = true;
                  player.jumping=false;
              }
              else if((player.y >= platforms[i].y) && (player.y <= platforms[i].y - 5) && (player.x <= platforms[i].x) && (player.x >= (platforms[i].x + platforms[i].width + 10)) && (player.jumping == false)){
                  ground=false;
              }
              if ((player.x >= platforms[i].x - 10) && (player.x <= (platforms[i].x + platforms[i].width + 10)) && (player.y <= platforms[i].y + platforms[i].height + 10) && (player.y >= platforms[i].y-5)) {
                  player.velY = 0;

              }
              if ((player.y <= platforms[i].y) && (player.x >= platforms[i].x - 10) && (player.x <= (platforms[i].x + platforms[i].width + 10)) && (ground == true)) {
                  player.y = platforms[i].y;
                  player.jumping = false;
              }
          }

2 个答案:

答案 0 :(得分:0)

在测试所有平台时使用标记。这是伪代码:

var isOnPlatform=false;

for(i=0;i<platforms.length;i++) {

    if( testPlayerIsOnThisPlatform ){ isOnPlatform=true; }

}

if(isOnPlatform){ turn off gravity };

答案 1 :(得分:0)

您正在为当前平台设置各种变量(例如,您设置ground = true等),然后for循环进入下一个平台,并立即破坏您为之前平台设置的所有内容。当您找到播放器所在的平台时(例如,突破循环,设置标记或其他内容),您似乎无法保留设置。