You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

watchOS SpriteKit中如何在SKScene里检测触摸输入?

在watchOS SwiftUI中为SKScene实现触摸检测

因为watchOS不支持UIKit的touchesBegan等触摸事件方法,你需要通过WKTapGestureRecognizer来实现触摸检测,下面提供两种可行方案:

方案一:SwiftUI层面直接添加手势

这种方式最简单,适合只需要全局响应点击的场景:

var body: some View {
    GeometryReader { reader in
        SpriteView(scene: GameScene(size: reader.size))
            .focusable()
            .onTapGesture {
                // 处理点击逻辑
                print("SpriteView 被点击")
            }
    }
}

方案二:在SKScene内部添加WKTapGestureRecognizer

如果需要获取场景内的精确点击坐标,或者和SKNode交互,推荐这种方式:

首先修改你的GameScene类:

import SpriteKit
import WatchKit

class GameScene: SKScene {
    override func didMove(to view: SKView) {
        super.didMove(to: view)
        
        // 创建点击手势识别器
        let tapGesture = WKTapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        tapGesture.numberOfTapsRequired = 1 // 设置需要点击的次数
        view.addGestureRecognizer(tapGesture)
    }
    
    @objc private func handleTap(_ gesture: WKTapGestureRecognizer) {
        // 将手势坐标转换为SKScene内的坐标
        let sceneLocation = gesture.location(in: self)
        print("点击位置:\(sceneLocation)")
        
        // 示例:检测点击的节点
        let tappedNode = atPoint(sceneLocation)
        if tappedNode.name == "targetNode" {
            print("点击了目标节点")
        }
    }
}

注意:watchOS环境下,touchesBegan、touchesMoved等UIKit触摸方法不会被触发,建议直接移除这些无效代码。

内容的提问来源于stack exchange,提问作者Ajul Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:02:39