代码之家  ›  专栏  ›  技术社区  ›  eeze

将玩家移动n个单位,使其靠近点X

  •  0
  • eeze  · 技术社区  · 7 年前

    我有一个球员,看起来像这样:

    {
       x: [could be any integer],
       y: [could be any integer],
       facing: {
          x: [could be any integer],
          y: [could be any integer]
       }
    }
    

    假设玩家在( player.x ,则, player.y ),并且播放器朝向鼠标的方向,鼠标位于( player.facing.x ,则, player.facing.y ),我可以使用什么公式沿鼠标方向移动玩家n个单位?

    这是我迄今为止所尝试的,但它总是会产生 null :

    var facingDistance = Math.sqrt(Math.pow(game.players[i].facing.x, 2) - Math.pow(game.players[i].x, 2));
    
    game.players[i].x += (game.players[i].speed/facingDistance) *
    (game.players[i].x - game.players[i].facing.x);
    
    game.players[i].y += (game.players[i].speed/facingDistance) *
    (game.players[i].y - game.players[i].facing.y);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   meowgoesthedog    7 年前
    // prefetch player object for cleaner code
    var plr = game.players[i];
    
    // normalized player direction
    var facingDX = plr.facing.x - plr.x;
    var facingDY = plr.facing.y - plr.y;
    var facingLen = Math.sqrt(facingDX * facingDX + facingDY * facingDY);
    facingDX /= facingLen;
    facingDY /= facingLen;
    
    // add n times this to position + round to integer coordinates
    plr.x = Math.round(plr.x + facingDX * n);
    plr.y = Math.round(plr.y + facingDY * n);