Spritekit 在触摸时旋转节点
Spritekit rotate a node while touching
如果您愿意的话,我目前正在开发某种自上而下的赛车手。这个想法是有两个按钮,每个按钮用于向左或向右转动汽车。这一切都有效,但它只适用于一次触摸。我想让玩家通过简单地按住按钮来转动汽车。我现在有
-(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 touched中设置为NO。问题是这个 while 循环卡住了(我的 phone 不再处理任何触摸),但我不知道只要按下按钮就可以继续旋转汽车的其他方法。如果我删除 while 循环,代码就可以工作。感谢您的帮助!
你已经有了正确的想法。而不是将您的 BOOL touched 设置为所有触摸的通用 YES。创建一个 touchLeft 和 touchRight BOOL。
在 if([node.name isEqualToString:@"buttonLeft"])
之后将 touchLeft BOOL 设置为 YES。创建一个 if([node.name isEqualToString:@"buttonRight"])
并设置 touchRight BOOL.
在您的更新方法中,您可以检查 BOOL YES 值并相应地应用代码。
请记住,您还需要为 touchesEnded
创建相同的代码逻辑,以便在触摸不再存在时将两个 BOOL 设置回 NO。
如果您愿意的话,我目前正在开发某种自上而下的赛车手。这个想法是有两个按钮,每个按钮用于向左或向右转动汽车。这一切都有效,但它只适用于一次触摸。我想让玩家通过简单地按住按钮来转动汽车。我现在有
-(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 touched中设置为NO。问题是这个 while 循环卡住了(我的 phone 不再处理任何触摸),但我不知道只要按下按钮就可以继续旋转汽车的其他方法。如果我删除 while 循环,代码就可以工作。感谢您的帮助!
你已经有了正确的想法。而不是将您的 BOOL touched 设置为所有触摸的通用 YES。创建一个 touchLeft 和 touchRight BOOL。
在 if([node.name isEqualToString:@"buttonLeft"])
之后将 touchLeft BOOL 设置为 YES。创建一个 if([node.name isEqualToString:@"buttonRight"])
并设置 touchRight BOOL.
在您的更新方法中,您可以检查 BOOL YES 值并相应地应用代码。
请记住,您还需要为 touchesEnded
创建相同的代码逻辑,以便在触摸不再存在时将两个 BOOL 设置回 NO。