我有3个NPC,每个人都拥有自己的圆形物理身体,意在模仿零重力的弹力球 - 更准确地说,弹性球由于恢复原因而永不停止移动= 1.0; (弹性100%)摩擦力= 0.0; (无摩擦)linearDampening = 0.0; (碰撞不会影响全国人大)。如果这些NPC中的任何一个与另一个NPC碰撞/接触,那么它们的速度会增加。它们开始移动得如此之快以至于它开始迫使水平边界/物理实体(这被认为是非动态的)实际上从影响中移位/移动。下面是我在更新方法中编写的if语句,以保持这3个NPC的physicsBody.velocities受到控制。有人可以看看并告诉我是否有更好的方法吗?我基本上希望所有3个NPC的最大速度/移动速度都有限,但它们不能超过它们。
-(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");
}
}
答案 0 :(得分:1)
除了两件事,你正在做的事情很好。你的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?