Spritekit在触摸时旋转节点

时间:2015-04-21 14:29:02

标签: objective-c rotation sprite-kit touchesbegan

如果你愿意的话,我现在正在做某种自上而下的赛车手。这个想法是有两个按钮,每个按钮用于向左或向右转动汽车。这一切都有效,但它只适用于一触即可。我想让玩家只需按住按钮即可转动汽车。我现在有

-(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循环,代码可以工作。任何帮助表示赞赏!

1 个答案:

答案 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。