Sprite-kit physicsBody applyImpulse

时间:2015-04-21 01:40:21

标签: ios objective-c sprite-kit

目前我的应用程序做了什么:当球移动时,你点击球改变方向并以相反的方向前进。 (上下)(NO从左到右)(0 = UP,1 = DOWN,2 = NOT MOVING)基本上只是想让球在每次点击时切换方向。

问题是:我使用 [ball.physicsBody applyImpulse:CGVectorMake(0,100)]; 这会调用一些问题,因为要切换它必须对抗另一种力量。

我已经知道,对抗其他力量的力量加倍。但是我可以说我设置了一个变量" ballSpeed"(还不存在)ballSpeed * 2(对于反力)这会起作用但不会虽然比赛越来越远,但是数字会变得很高? (可能最大值为 2,147,483,647 的整数)

-(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 个答案:

答案 0 :(得分:1)

您可以使用定义的速度 而不是加倍, 然后在你向物理机构施加新的冲动之前 你可以通过“重置”它的速度来“停止”

physicsBody.velocity=CGVectorMake(0,0);

你已经知道了方向 所以你可以设置一个方法来设置身体在重置身体速度后转向方向