控制 physicsBody 的速度不超过特定值
Controlling physicsBody's velocities from exceeding certain values
我有 3 个 NPC,每个 NPC 都有自己的圆形 physicsBody,旨在模拟零重力下的弹力球 - 更准确地说,弹力球永远不会因为恢复 = 1.0 而停止移动; (弹性 100%)摩擦力 = 0.0; (无摩擦)linearDampening = 0.0; (碰撞不会影响 NPC)。如果这些 NPC 中的任何一个 collide/contact 与另一个 NPC 在一起,那么它们的速度就会增加。它们开始移动得如此之快,以至于它开始迫使水平 boundaries/physicsBodies(据说是非动态的)实际上受到影响 shift/move。下面是我在更新方法中写的 if 语句,以控制这 3 个 NPC 的 physicsBody.velocities。有人可以看看并告诉我是否有更好的方法吗?我基本上想限制所有 3 个 NPC 在任何时候都不能超过的最大 velocities/moving 速度。
-(void)update:(CFTimeInterval)currentTime
{
/* Called before each frame is rendered */
//Track ball velocities.
if (_npcRed.physicsBody.velocity.dx > 1000 || _npcRed.physicsBody.velocity.dy > 1000)
{
NSLog(@"RED's moving too fast; lowering velocity");
_npcRed.physicsBody.velocity = CGVectorMake(500, 500);
}
else
{
NSLog(@"RED's at stable speed");
}
if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000)
{
NSLog(@"BLUE's moving too fast; lowering velocity");
_npcBlue.physicsBody.velocity = CGVectorMake(500, 500);
}
else
{
NSLog(@"BLUE's at stable speed");
}
if (_npcGreen.physicsBody.velocity.dx > 1000 || _npcGreen.physicsBody.velocity.dy > 1000)
{
NSLog(@"GREEN's moving too fast; lowering velocity");
_npcGreen.physicsBody.velocity = CGVectorMake(500, 500);
}
else
{
NSLog(@"GREEN's at stable speed");
}
}
除了两件事,你所做的一切都很好。你的 if 语句
if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000)
_npcBlue.physicsBody.velocity = CGVectorMake(500, 500);
如果 dx 或 dy 速度大于 1000,则设置为开火。如果 npcBlue 的 dx 速度为 100,dy 速度为 1010 会怎么样。npcBlue 的 dx 速度从 100 跳到 500。不太好。
其次,为什么dx和dy节流在1000然后设置为500?那会使运动非常不稳定。为什么不检查 dx 或 dy 是否大于 500,如果是,则设置为 500?
我有 3 个 NPC,每个 NPC 都有自己的圆形 physicsBody,旨在模拟零重力下的弹力球 - 更准确地说,弹力球永远不会因为恢复 = 1.0 而停止移动; (弹性 100%)摩擦力 = 0.0; (无摩擦)linearDampening = 0.0; (碰撞不会影响 NPC)。如果这些 NPC 中的任何一个 collide/contact 与另一个 NPC 在一起,那么它们的速度就会增加。它们开始移动得如此之快,以至于它开始迫使水平 boundaries/physicsBodies(据说是非动态的)实际上受到影响 shift/move。下面是我在更新方法中写的 if 语句,以控制这 3 个 NPC 的 physicsBody.velocities。有人可以看看并告诉我是否有更好的方法吗?我基本上想限制所有 3 个 NPC 在任何时候都不能超过的最大 velocities/moving 速度。
-(void)update:(CFTimeInterval)currentTime
{
/* Called before each frame is rendered */
//Track ball velocities.
if (_npcRed.physicsBody.velocity.dx > 1000 || _npcRed.physicsBody.velocity.dy > 1000)
{
NSLog(@"RED's moving too fast; lowering velocity");
_npcRed.physicsBody.velocity = CGVectorMake(500, 500);
}
else
{
NSLog(@"RED's at stable speed");
}
if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000)
{
NSLog(@"BLUE's moving too fast; lowering velocity");
_npcBlue.physicsBody.velocity = CGVectorMake(500, 500);
}
else
{
NSLog(@"BLUE's at stable speed");
}
if (_npcGreen.physicsBody.velocity.dx > 1000 || _npcGreen.physicsBody.velocity.dy > 1000)
{
NSLog(@"GREEN's moving too fast; lowering velocity");
_npcGreen.physicsBody.velocity = CGVectorMake(500, 500);
}
else
{
NSLog(@"GREEN's at stable speed");
}
}
除了两件事,你所做的一切都很好。你的 if 语句
if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000)
_npcBlue.physicsBody.velocity = CGVectorMake(500, 500);
如果 dx 或 dy 速度大于 1000,则设置为开火。如果 npcBlue 的 dx 速度为 100,dy 速度为 1010 会怎么样。npcBlue 的 dx 速度从 100 跳到 500。不太好。
其次,为什么dx和dy节流在1000然后设置为500?那会使运动非常不稳定。为什么不检查 dx 或 dy 是否大于 500,如果是,则设置为 500?