В настоящее время я работаю над каким-то топ-гонщиком, если хотите. Идея состоит в том, чтобы иметь две кнопки, каждая для поворота автомобиля влево или вправо. Все это работает, но работает только одним прикосновением. Я хотел бы, чтобы игрок повернул машину, просто нажав кнопку. У меня теперь естьSpritekit вращает узел при касании
-(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);
}
Скорость автомобиля игроков обновляется в функции обновления. И в прикосновениях Затронутое касание установлено на НЕТ. Проблема в том, что этот цикл while застревает (и мой телефон больше не обрабатывает никаких касаний), но я не знаю другого способа продолжать вращать автомобиль, пока нажата кнопка. Код работает, если я удаляю цикл while. Любая помощь приветствуется!
Спасибо, что работает действительно приятно! Для других людей, имеющих ту же проблему, я наткнулся на другой способ непрерывного вращения узла. Я создал «SKAction * rotation = [SKAction rotateByAngle: playerAngle duration: 0.2];', который вращает узел, и повторил это действие навсегда в касаниях, а затем удалил ActionForKey в touchesEnded. Это также дает возможность сделать его более гладким с продолжительностью. Я не знаю, будет ли это позже создавать ошибки, но на данный момент его работы! – Jeroen