swift – 如何检测触摸了哪个SKSpriteNode

swift – 如何检测触摸了哪个SKSpriteNode,第1张

概述我找到一个 similar question,但我试图检测并识别用户触摸的哪个Sprite,我不知道该怎么做.这是我的变量: var sprites: [[SKSpriteNode]] = [[SKSpriteNode(imageNamed: "a"), SKSpriteNode(imageNamed: "b")], [SKSpriteNode(imageNamed: "c"),SKSpriteN 我找到一个 similar question,但我试图检测并识别用户触摸的哪个Sprite,我不知道该怎么做.这是我的变量:

var Sprites: [[SKSpriteNode]] = [[SKSpriteNode(imagenamed: "a"),SKSpriteNode(imagenamed: "b")],[SKSpriteNode(imagenamed: "c"),SKSpriteNode(imagenamed: "d")]]

想法是识别spriteNode,然后将其替换为其他精灵或更改颜色,但我不知道如何使用这个spriteNodes矩阵,我想第一步它识别精灵.

解决方法 您尝试做什么(即使我没有看到这个原因)可以使用 delegation模式完成.基本上,您将告诉您的代表(场景或您设置为委托的任何内容)为您做一些事情,您将直接从按钮的touchesBegan方法中执行此 *** 作.此外,您将按钮的名称传递给场景.

要实现这一点,首先必须定义一个名为buttonDelegate的协议.该协议定义了一个要求,该要求声明任何符合要求的类必须实现一个名为printbuttonsname(_ :)的方法:

protocol buttonDelegate:class {   func printbuttonsname(name:String?)}

这是将在您的GameSceneclass中实现的方法,但是从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?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }    overrIDe func touchesBegan(touches: Set<UItouch>,withEvent event: UIEvent?) {        delegate?.printbuttonsname(self.name)    }  }

这里重要的是userInteractionEnabled = true,这意味着该按钮将接受触摸.另一个重要的事情是委托财产.如前所述,按钮将场景设置为其委托.当我们创建一些按钮时,将场景设置为按钮的代表…为了使您更容易,请将代表视为为老板工作的工作人员:)老板(按钮)告诉他的工作人员(一个场景)为他做点什么(打印他的名字).

好的,所以我们确保场景符合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,然后该按钮将告诉其委托使用场景类中定义的方法打印其名称.

总结

以上是内存溢出为你收集整理的swift – 如何检测触摸了哪个SKSpriteNode全部内容,希望文章能够帮你解决swift – 如何检测触摸了哪个SKSpriteNode所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1010448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存