2015-04-21 2 views
1

Я создаю верхнюю игру «гонщик», если вы будете в Spritekit. Тем не менее, я уже застрял в создании игрового процесса. Вы управляете автомобилем сверху вниз, который всегда ездит с постоянной скоростью. Игрок может нажать две кнопки, чтобы повернуть автомобиль влево или вправо. Скорость должна оставаться постоянной, но zRotation автомобиля должна измениться. Изменение zRotation не проблема, но определение новой скорости автомобиля.Spritekit сверху вниз поворотное движение персонажа

Я сейчас работаю с векторами, так сказать каждый раз, когда игрок нажимает на кнопку «Turnleft» zRotation изменений автомобиля с 45 градусов и с постоянной скоростью 20, новая скорость будет:

player.physicsBody.velocity = CGVectorMake(14.14, 14.14); 

Дано с использованием sin и cos 45 градусов и суммы векторов, дающих постоянную скорость 20 (треугольник с двумя углами 45 градусов и одной стороной 20).

Однако я не знаю, как я должен делать эту переменную каждый раз, когда игрок держит кнопку turnLeft, и если я должен использовать действия или функцию обновления. Игрок должен управлять кругом, если он навсегда удерживает кнопку turnLeft. Любая помощь приветствуется! Благодарю.

ответ

0

Чтобы вычислить компоненты скорости, вам в основном нужно сделать то, что вы указали, за исключением использования zRotation вашего спрайта вместо 45 градусов. Например:

let speed: CGFloat = 20 // The constant speed. 

// Work out the components of velocity: 
let dx = speed * cos(sprite.zRotation) 
let dy = speed * sin(sprite.zRotation) 

sprite.physicsBody!.velocity = CGVector(dx: dx, dy: dy) 

Как улучшение, было бы лучше, чтобы добавить этот код в качестве инициализатора из CGVector, для многократного использования:

extension CGVector { 
    init(length: CGFloat, angle: CGFloat) { 
     self.dx = length * cos(angle) 
     self.dy = length * sin(angle) 
    } 
} 

Вы можете использовать это как так:

sprite.physicsBody!.velocity = CGVector(length: speed, angle: sprite.zRotation) 

Надеюсь, что ответит на ваш вопрос.

+0

Это прекрасно работает! Он по-прежнему работает только нажатием кнопки. Есть ли способ сделать его согласованным до тех пор, пока нажата кнопка? – Jeroen

+0

Используете ли вы 'SKSpriteNode' для каждой кнопки? Или 'UIButton'? – ABakerSmith

Смежные вопросы