栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检测已触摸哪个SKSpriteNode

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检测已触摸哪个SKSpriteNode

您正在尝试执行的操作(即使我没有看到这样做的原因)也可以使用委派模式来完成。基本上,您将告诉您的代表(场景或您设置为代表的任何对象)为您做某事,然后您将直接在按钮的

touchesBegan
方法内执行该操作。另外,您还将按钮的名称传递给场景。

为此,首先必须定义一个名为的协议

ButtonDelegate
。该协议定义了一个要求,该要求指出任何符合条件的类都必须实现一种称为的方法
printButtonsName(_:)

protocol ButtonDelegate:class {   func printButtonsName(name:String?)}

这是将在您的

GameScene
类中实现的方法,但是是在button的内部调用的
touchesBegan
。同样,此方法将用于将按钮的名称传递给其委托(场景),因此您将始终知道点击了哪个按钮。

接下来是按钮类本身。

Button
可能看起来像这样:

class Button : SKSpriteNode{    weak var delegate:ButtonDelegate?    init(name:String){        super.init(texture: nil, color: .purpleColor(), size: CGSize(width: 50, height: 50))        self.name = name        self.userInteractionEnabled = true    }    required init?(prer aDeprer: NSCoder) {        fatalError("init(prer:) has not been implemented")    }    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {        delegate?.printButtonsName(self.name)    }  }

重要的是

userInteractionEnabled =true
,这意味着按钮将接受触摸。另一个重要的事情是
delegate
财产。如前所述,按钮将场景设置为其委托。当我们创建一些按钮时,将场景设置为按钮的代表将在稍后完成…为了使您更轻松,请考虑将代表视为为老板工作的工人:)老板(一个按钮)告诉他的工人(一个场景)为他做某事(打印他的名字)。

好的,因此请确保场景符合

ButtonDelegate
协议……为什么这很重要?这很重要,因为工人(场景)必须遵循老板的命令(按钮)。通过遵守此协议,工人正在与老板签定合同,在合同中确认他知道自己的工作方式并将遵守他的命令:)

class GameScene: SKScene, ButtonDelegate {    override func didMoveToView(view: SKView) {        let play = Button(name:"play")        play.delegate = self        let stop = Button(name:"stop")        stop.delegate = self        play.position = CGPoint(x: frame.midX - 50.0, y: frame.midY)        stop.position = CGPoint(x: frame.midX + 50.0, y: frame.midY)        addChild(play)        addChild(stop)    }    func printButtonsName(name: String?) {        if let buttonName = name { print("Pressed button : (buttonName) ")        }        //Use switch here to take appropriate actions based on button's name (if you like)    }}

就是这样。当您点击播放按钮时,

touchesBegan
按钮本身将被调用,然后该按钮将告诉其委托使用场景类内部定义的方法打印其名称。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号