簡體   English   中英

使用canvas + javascript進行2D碰撞檢測

[英]2D Collision detection with canvas + javascript

嘿,我正在嘗試在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;
              }
          }

在測試所有平台時使用標志。 這是偽代碼:

var isOnPlatform=false;

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

    if( testPlayerIsOnThisPlatform ){ isOnPlatform=true; }

}

if(isOnPlatform){ turn off gravity };

您正在為當前平台設置各種變量(例如,您設置ground = true等),然后for循環進入下一個平台並立即破壞您為之前平台設置的所有內容。 當您找到播放器所在的平台時(例如,突破循環,設置標記或其他內容),您似乎沒有做任何事情來保留設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM