按箭头键会在SpriteKit中产生增量跳跃
我在macOS(Sequoia)上的SpriteKit游戏遇到了一个问题:第一次按下箭头键时,帧时间增量会突然变大,形成一个尖刺。我用一个小程序测试过,代码如下:
//
// GameScene.swift
import SpriteKit
import GameplayKit
class GameScene: SKScene {
var lastTime: TimeInterval = 0
override func keyDown(with event: NSEvent) {
print("---------------> delta keyDown: \(event.characters!) keyCode: \(event.keyCode)")
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
print("update begins")
let dt: CGFloat
if lastTime > 0 {
dt = (CGFloat(currentTime - lastTime))
} else {
dt = 1.0 / 60.0
}
if dt > (1/30) {
print("************************************ delta spike ", dt)
}
lastTime = currentTime
print("dt: ", dt)
print("update ends")
}
}
示例输出:
update begins
************************************ delta spike 0.03381687504588626
dt: 0.03381687504588626
update ends
update begins
dt: 0.016670208307914436
update ends
正如你所见,在这种情况下按下左箭头键时,会出现一个明显的时间增量尖刺。继续按箭头键时则不会再有尖刺。
其他键,例如游戏中常用的W A S D键,不会引起这个时间增量尖刺。
解决方案
问题已解决。在ViewController.swif的 viewDidLoad中添加了以下内容:
NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
self.skView.scene?.keyDown(with: event)
return nil }
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。