2015-03-13 40 views
1

我有3個NPC,每個都有自己的圓形物理體模擬零重力彈跳球 - 更確切地說,彈跳球永不停止移動,因爲恢復原狀= 1.0; (彈性100%)摩擦= 0.0; (無摩擦)linearDampening = 0.0; (碰撞不會影響NPC)。如果這些NPC中的任何一個碰撞/接觸另一個,則它們的速度增加。他們開始移動的速度非常快,開始迫使關卡邊界/物理實體(據說非動態)實際上從衝擊轉向/移動。下面是我在更新方法中寫的if語句,用於保持這3個NPC的physicalBody.volocities在控制之下。有人可以看看並告訴我是否有更好的方法來做到這一點?我基本上希望所有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"); 
    } 
} 

回答

1

你在做什麼工作很好,除了兩件事情。你的if語句

if (_npcBlue.physicsBody.velocity.dx > 1000 || _npcBlue.physicsBody.velocity.dy > 1000) 
    _npcBlue.physicsBody.velocity = CGVectorMake(500, 500); 

是設置火如果任一DX或DY速度大於1000如果npcBlue有100 DX速度和1010 npcBlue的DX速度的DY速度跳躍從100到500 。 不太好。

二,爲什麼油門在1000爲DX和DY,然後設置爲500?這會使運動非常生澀。爲什麼不檢查dx或dy是否大於500,如果是,則設爲500?

+0

的確如此。謝謝。 – Krekin 2015-03-13 15:59:13

+0

@Krekin - 不客氣。 – sangony 2015-03-13 16:01:50