2015-04-21 7 views
1

В настоящее время, что делает мое приложение: Когда мяч движется, и u коснитесь шара, измените направление и направьте противоположный путь. (вверх и вниз) (НЕТ слева направо) (0 = ВВЕРХ, 1 = ВНИЗ, 2 = НЕ ПЕРЕДВИЖЕНИЕ) в основном просто хотят, чтобы мяч переключал направление каждый раз, когда вы нажимаете.Sprite-kit физикаBody applyImpulse

Проблема заключается в том: Я использую [ball.physicsBody applyImpulse: CGVectorMake (0, 100)]; это вызывает некоторые проблемы, потому что для переключения направлений он должен противостоять другой силе.

Я узнал, что удвоение силы, которая будет противостоять другой силе, работает. но допустим, что я установил переменную «ballSpeed» (еще не существует) ballSpeed ​​* 2 (для противодействующей силы) это сработало бы, но не увеличилось бы число, если вы получите дальше, чем игра? (Возможно, максить целое число)

-(void)handleDirectionChange{ 

if(((location.y>self.frame.size.height/2)&&(ball.position.y<self.frame.size.height/2))||((location.y<self.frame.size.height/2)&&(ball.position.y>self.frame.size.height/2))){ 

    if(canTap == true){ 
     NSLog(@"TAPPED-TRUE"); 

     if(direction == 0 && canTap == true){ 
      NSLog(@"MOVE-0"); 
      [ball.physicsBody applyImpulse:CGVectorMake(0, 100)];//hereeee 
      canTap = false; 
      NSLog(@"CANT TAP"); 
      direction = 1; 

     } 
     if(direction == 1 && canTap == true){ 
      NSLog(@"MOVE-1"); 
      [ball.physicsBody applyImpulse:CGVectorMake(0, -200)];//hereeeee 
      canTap = false; 
      NSLog(@"CANT TAP"); 
      direction = 0; 
     } 

    } 

} 


} 

Только в случае, если у хочу увидеть другой код

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 


    for (UITouch *touch in touches) { 
     location = [touch locationInNode:self]; 
    } 

    [self handleDirectionChange]; 


} 


-(void)handleDirection{ 

[ballParent enumerateChildNodesWithName:@"ball" usingBlock:^(SKNode *node, BOOL *stop) { 

    if([ball.name isEqualToString:@"ball"] && (ball.position.y > self.frame.size.height/2-2 && ball.position.y < self.frame.size.height/2+2)){//when the ball passes middle 

     if(canTap == false) { 
      canTap = true; 
      NSLog(@"CAN TAP"); 
     } 
    } 
}]; 



} 







-(void)update:(CFTimeInterval)currentTime { 


[self handleDirection]; 

} 

ответ

1

Вы можете использовать определенную скорость и не удвоить его на всех, , а затем перед тем, как вы приступите к новому импульсу физическому телу , вы можете просто сделать его «остановленным» путем «перепродажи» его скорости

physicsBody.velocity=CGVectorMake(0,0);

Вы уже знаете направление так что вы можете сделать метод, чтобы установить тело, чтобы пойти в сторону после того, как вы сбрасываете скорость тела

Смежные вопросы