如何解决SKScene touchesBegan 仅在从 SpriteView 呈现时才注册第一次触摸
我正在使用 SwiftUI 并尝试从 SKScene 对象实现 touchesBegan 方法,以便在 SpriteView 的左半部分上触摸创建一个绿色框,在右半边上触摸创建一个红色框。这在一定程度上有效,但不能处理多个同时触摸。当不在 SwiftUI SpriteView 中运行时(即由 UIViewController 的 SKView 呈现时),它似乎工作正常。 这是我的 GameScene.swift...
import SwiftUI
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
}
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
for touch in touches {
let colour: SKColor
let location = touch.location(in: self)
if location.x > self.frame.midX {
print("right")
colour = .red
}
else {
print("left")
colour = .green
}
let box = SKSpriteNode(color: colour,size: CGSize(width: 50,height: 50))
box.position = location
box.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 50,height: 50))
addChild(box)
}
}
}
...还有我的 ContentView.swift...
import SwiftUI
import SpriteKit
struct ContentView: View {
var scene: SKScene {
let scene = GameScene()
scene.size = CGSize(width: 500,height: 350)
scene.scaleMode = .fill
return scene
}
var body: some View {
SpriteView(scene: scene)
.frame(width: 500,height: 350)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。