我遇到的问题是,当npc和播放器在5像素之内时,会触发冲突,然后在控制台中显示npc的清单。问题在于,npc库存将仅显示一次。

我想这样做,以便每次播放器位于npc的5像素以内时,都会显示其库存。但是我也不希望当播放器位于npc的5像素以内时,碰撞仅在它们第一次接近时一次触发。

这是我的代码...

// collision for npc and player
function npc2Collision(){
  for(var i = 0; i < 1; i++){
    game.addEventListener('enterframe', function() {
      //detects whether player sprite is within 5
      //pixels of the npc sprite
      if(player.within(npc2,5) && !npc2.isHit){
        console.table(npcInvObject);
        npc2.isHit = true;
      }
    });
  }
}
npc2Collision();

最佳答案

为了防止再次触发碰撞,您可以使用由检查设置的简单标志(及其反向标志):

function npc2Collision(){
  for(var i = 0; i < 1; i++){
    game.addEventListener('enterframe', function() {
      //detects whether player sprite is within 5
      //pixels of the npc sprite
      if(player.within(npc2,5) && !npc2.isHit){
        // split the checks so distance works well
        if (!player.collided) {
          console.table(npcInvObject);
          npc2.isHit = true;
          player.collided = true;
        }
      } else {
        player.collided = false;
    });
  }
}


这将运行一次,在播放器上设置collided标志,直到播放器离开碰撞半径后才会再次触发。

09-19 13:29