Вопрос 1: Почему мое весло не движется плавно?
Почему вы выполняете движение SKAction с продолжительностью 0?
Это то же самое, что и изменение позиции y
Вы можете увеличить длительность, например, 0,1
. Если вы хотите это сделать, вы должны удалять SKAction p1 каждый раз, когда нажимаете клавишу W. Почему? Вы не хотите, чтобы он запускал 2 SKActions одновременно. (Я предполагаю, что pR - ваше весло 1-го игрока. Полагаю, это означает Paddle Right.)
pR.removeAllActions()
pR.run(SKAction.move(by: CGVector(dx: 0, dy: 15), duration: 0.1))
Или, если вы хотите, чтобы это было немедленно, вы можете сделать это вместо этого
(Хотя ваш весло будет двигаться довольно быстро в зависимости от частоты кадров)
pR.position.y += 15
Я рекомендую первый вариант.
Или, если вам нравится второй вариант, потому что он чище, вы заменяете 15 на 10 или 5.
Вопрос 2: Невозможно сделать два входа одновременно
• 1: Невозможно нажать 2 кнопки на «точно» время.
• 2: Что это значит?
• 3: Swift запускает keyDown с первой нажатой клавишей.
• 4: Swift затем запускает keyDown с второй нажатой клавишей.
(Даже если вы думаете, что вы нажали две клавиши одновременно, вы этого не сделали. Одна из них, вероятно, была нажата за микросекунду до второй. Все дело в синхронизации. Это то же самое, что SpriteKit на iOS, Вы не можете иметь два входа «touchesBegan» одновременно. uite редко.)
Как это исправить:
Вы должны быть в состоянии добавить второй оператор 'if' для другого ключа для игрока 2.
Пример кода (за исключением того, что я использовал переключатель для сохранения пробел)
override func keyDown(with event: NSEvent) {
switch Int(event.keyCode) {
// W Key
case 13: // (Player 1 moves up)
// S Key
case 1: // (Player 1 moves down)
// I Key
case 34: // (Player 2 moves up)
// K Key
case 40: // (Player 2 moves down)
// Someone clicked the wrong key
default: return
}
}
Угадай что! Этот код ^^^ почти работает. Я не ответил на ваш третий вопрос.
Вопрос 3: Весло перемещается один раз, останавливается, затем начинает непрерывно двигаться
Так работает функция keyDown. Вот что я рекомендую:
• Отслеживать в переменной, какие клавиши были нажаты
• Использовать функцию keyUp для удаления этих сохраненных значений.
Как это работает?
var keysPressed: Set<Int> = []
override func keyDown(with event: NSEvent) {
keysPressed.insert(event.keyCode)
}
override func keyUp(with event: NSEvent) {
keysPressed.remove(event.keyCode)
}
override func update(_ currentTime: TimeInterval) {
for i in keysPressed {
// Put my Movement Switch Statement In Here
}
}
Надеюсь, это поможет! Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь отвечать.
Snap, я только что понял, что на этот вопрос был дан ответ в крошечном разделе комментариев выше. Ну хорошо.