我正在尝试检测SKScene
中的摇晃手势。这是我正在使用的代码:
import SpriteKit
import UIKit
import CoreMotion
class Menu: SKScene {
override func didMove(to view: SKView) {
self.becomeFirstResponder()
//Game Code
}
override func becomeFirstResponder() -> Bool {
return true
}
override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
if event?.subtype == UIEventSubtype.motionShake {
//Run Code
}
}
override func willMove(from view: SKView) {
resignFirstResponder()
}
}
但是motionEnded
代码没有运行,就好像它没有检测到摇动手势一样。这是SKScene
所以我不确定代码是否略有不同。
非常感谢任何帮助。
答案 0 :(得分:4)
显然,您无法检测来自var information = {
url: urlRoot,
prepare: function (query, settings) {
settings.type = "POST",
settings.url += '?prefix=' + query;
return settings;
}
};
var names = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('navn'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: information,
});
子类的震动事件,例如SKScene
。但是,您可以从视图控制器中检测它们,例如GameScene
。触发震动事件时,您可以从视图控制器中调用GameViewController
中的摇动处理程序。
在GameScene
中,添加此内容以检测摇晃事件
GameViewController
并将其添加到override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
if motion == .motionShake {
if let skView = view as? SKView, let scene = skView.scene as? GameScene {
scene.shake()
}
}
}
GameScene
修改强>
如果您需要检测来自多个func shake() {
print("Shake")
}
子类的摇动事件,您可以定义以下扩展名:
SKScene
并将以下内容添加到相应的extension SKScene {
func shake() {
}
}
extension SKView {
open override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
if let scene = self.scene {
scene.shake()
}
}
}
子类
SKScene