2013-03-26 71 views
0

奥凯进出口比较新的在制作游戏的过程中颈背和IM,我做了型运动学的机构呼吁的平台,我只是想它在一定范围内的第四回迁阶段。有人可以看看我会出错哪里,谢谢。颈背移动平台

private function enterFrameHandler(ev:Event):void 
{ 
if (movingPlatform.position.x <= 150) 
      { 
       movingPlatform.position.x += 10; 
      } 
      if (movingPlatform.position.x >= 260) 
      { 
       movingPlatform.velocity.x -= 10; 
      } 
} 

回答

2

中的一个的第一,如果你的块由10你是10递减velocity.x另一个递增position.x我猜你的意思是在这两个position.x

其次,想象一下movingPlatform.position.x是150,你的enterFrameHandler运行一次。 movingPlatform.position.x将变为160,并且在下一次enterFrameHandler被调用时,如果块将被执行,则由于160不小于或等于150或大于或等于260而不被调用。

可以使用速度来指示侧其运动并倒转,一旦你超越的优势,是这样的:

// assuming velocity is (1,0) 
private function enterFrameHandler(ev:Event):void { 
    if (movingPlatform.position.x <= 150 || movingPlatform.position.x >= 260) { 
     movingPlatform.velocity.x = -movingPlatform.velocity.x; 
    } 

    movingPlatform.position.x += movingPlatform.velocity.x; 
} 

显然,如果对象是已在假设X = 100,这将只是保持反相它的速度,所以要么使这可能会导致问题确保将其150-260之间,或者添加额外的检查,以防止其反转它的方向不止一次。

这可能是做一个更好的方式:

// assuming velocity is (1,0) 
private function enterFrameHandler(ev:Event):void { 
    if (movingPlatform.position.x <= 150) { 
     movingPlatform.velocity.x = 1; 
    } else if (movingPlatform.position.x >= 260) { 
     movingPlatform.velocity.x = -1; 
    } 

    movingPlatform.position.x += movingPlatform.velocity.x; 
} 
+0

胡感谢的人,这工作就像一个魅力。仍然让我感受到颈部特性。 – Robster 2013-03-26 23:26:47

1

一般:

运动机构都应该只与速度移动,如果你改变自己的立场直接那么他们是不是真的因为他们是“瞬移”,并尽可能的物理学而言它们的速度仍然是恰好为0所以像碰撞和摩擦将无法正常工作,你可能期望移动之多。

如果你想仍然立场,而不是速度工作,那么就在这是专为运动美体类中的方法setVelocityFromTarget:

body.setVelocityFromTarget(targetPosition, targetRotation, deltaTime); 

这里的DeltaTime是时间步骤中,您即将使用在以下调用space.step();

这一切都是真的做基于当前位置/旋转,目标位置/旋转的时间应该到那里量设定适当的速度和angularVel。