2012-03-08 79 views

回答

1

添加一个此外按钮为“速度”,将汽车(地图)移动到汽车的当前方向!

+0

但如何

  • 更新位置让我的车旋转影响如何X和Y的举动。否则,它只是侧面上下移动。我希望它按照汽车指向的方向移动 – JoshMWilliams 2012-03-08 17:48:10

  • +0

    按下按钮速度时,地图会完全朝相反的方向移动,但汽车停留在同一地点。 – powtac 2012-03-08 17:50:03

    +0

    啊!没有意识到地图已经在移动... – powtac 2012-03-08 17:50:56

    1

    那么,你想根据方向移动汽车吗?

    I'm afraid you'll need to use math!

    无论如何,你可以通过执行以下计算运动方向:

    1. 首先,你需要让汽车的方向。如果你能够旋转它,你可能已经有了这个。请注意,大多数JavaScript函数使用弧度,而不是度数。
    2. 接下来,您需要获得x速度。这是通过获得角度的余弦并将其乘以汽车的速度来计算的。
    3. 最后,获得y的速度。这是通过获取角的正弦和乘法时使用的步骤2

    这里以相同的速度计算是从我的游戏API几个节选的:

    this.getXSpeed  = function() { 
    
          this.direction = Game.Util.fixDirection(this.direction); 
    
          return Game.Util.cos(this.direction) * this.speed; 
         } 
         this.getYSpeed  = function() { 
    
          this.direction = Game.Util.fixDirection(this.direction); 
    
          return -Game.Util.sin(this.direction) * this.speed; 
         } 
    
    
    
    ... 
    
    
    getAngle  : function(point1X, point1Y, point2X, point2Y, hyp) { 
    
    
          //This function uses the arcsine to calculate the angle between 
          //the points, but only if necessary. 
    
          //This function includes some shortcuts for common angles. 
    
    
          if(point1Y == point2Y) { 
           if(point1X < point2X) return 0; 
           else     return 180; 
          } 
    
          if(point1X == point2X) { 
           if(point1Y < point2Y) return 90; 
           else     return 270; 
          } 
    
    
          var xDist = point1X - point2X; 
          var yDist = point1Y - point2Y; 
    
    
          if(xDist == yDist) { 
           if(point1X < point2X) return 45; 
           else     return 225; 
          } 
          if(-xDist == yDist) { 
           if(point1X < point2X) return 315; 
           else     return 135; 
          } 
    
    
          if(hyp==null) 
           hyp = Math.sqrt(xDist*xDist + yDist*yDist); 
    
    
          var D_TO_R = this.D_TO_R; //57. something (radian to degree conversion) 
    
    
          if(point1X<point2X) { 
    
           return Game.Util.fixDirection(-Math.asin((point1Y-point2Y)/hyp) * this.D_TO_R); 
          } else { 
    
           return Game.Util.fixDirection(Math.asin((point1Y-point2Y)/hyp)  * this.D_TO_R+180); 
          } 
    
         } 
    
    +0

    我对这个数学领域不太擅长。我如何获得角度的余弦? – JoshMWilliams 2012-03-08 18:19:51

    +0

    Javascript内置三角函数:'Math.sin(radAngle)'和'Math.cos(radAngle)'将为您提供所需的数字。如果旋转汽车的角度为度数,则用“180/PI”(或57.29578)除。这会将其转换为弧度,而JavaScript需要用于trig函数。 – 2012-03-08 18:23:17

    1

    希望这将帮助你:

    1. 定义运动的初始参数,例如

      ​var speed = 10; 
      var angularStep = Math.PI/180; 
      var rotation = 0; 
      
    2. 减少或转向左边或右边时angularStep增加rotation。可移动的对象(汽车或轨道)与此模式

      movableObject.x += speed * Math.cos(rotation); 
      movableObject.y += speed * Math.sin(rotation);