如果你愿意的话,我现在正在做某种自上而下的赛车手。这个想法是有两个按钮,每个按钮用于向左或向右转动汽车。这一切都有效,但它只适用于一触即可。我想让玩家只需按住按钮即可转动汽车。我现在有
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
for (UITouch *touch in touches) {
touched = YES;
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
if ([node.name isEqualToString:@"buttonLeft"]) {
while (touched == YES) {
playerRotate = player.zRotation;
playerRotate += playerAngle;
}
}
}
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
player.zRotation = playerRotate;
float dx = playerSpeed * cos(player.zRotation);
float dy = playerSpeed * sin(player.zRotation);
player.physicsBody.velocity = CGVectorMake(dx, dy);
}
在更新功能中更新玩家汽车的速度。而在touchesEnded触摸设置为NO。问题是这个while循环卡住(我的手机不再处理任何触摸),但我知道只要按下按钮就没有其他方法可以继续旋转汽车。如果我删除while循环,代码可以工作。任何帮助表示赞赏!
答案 0 :(得分:0)
你已经有了正确的想法。所有触摸都不是将BOOL设置为通用YES。创建一个touchLeft和touchRight BOOL。
在if([node.name isEqualToString:@"buttonLeft"])
将touchLeft BOOL设置为YES后。创建if([node.name isEqualToString:@"buttonRight"])
并设置touchRight BOOL。
在您的更新方法中,您可以检查BOOL YES值并相应地应用代码。
请记住,您还需要为touchesEnded
创建相同的代码逻辑,以便在触摸不再存在时将两个BOOL设置为NO。