目前我的应用程序做了什么:当球移动时,你点击球改变方向并以相反的方向前进。 (上下)(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];
}
答案 0 :(得分:1)
您可以使用定义的速度 而不是加倍, 然后在你向物理机构施加新的冲动之前 你可以通过“重置”它的速度来“停止”
physicsBody.velocity=CGVectorMake(0,0);
你已经知道了方向 所以你可以设置一个方法来设置身体在重置身体速度后转向方向