[英]How to remove a SKNode after a button is tapped?
我有UIButton
,当点击一次时应该添加一个SKShapeNode
,再次点击时应该删除相同的节点。 我使用了一个计数器来跟踪点击按钮的次数。 我使用spriteScene.addChild(mySKShapeNode)
和mySKShapeNode.removeFromParent()
添加和删除节点。 这是我的代码:
class myView: UIViewController{
var spriteScene = SKScene(size: CGSize(width: 500, height: 500))
var tapCounter: Int = 0
override func viewDidLoad(){
super.viewDidLoad()
.
.
.
let xPostion:CGFloat = 40
let yPostion:CGFloat = 108
let buttonWidth:CGFloat = 100
let buttonHeight:CGFloat = 45
button.frame = CGRect(x:xPostion, y:yPostion, width:buttonWidth, height:buttonHeight)
button.backgroundColor = UIColor.white
button.setTitle("Tap me!", for: UIControl.State.normal)
button.tintColor = UIColor.black
button.addTarget(self, action: #selector(myView.buttonAction(_:)), for: .touchUpInside)
self.view.addSubview(button)
.
.
.
}
@objc func buttonAction(_ sender:UIButton!){
let mySKShapeNode = SKShapeNode(rectOf: CGSize(width: 270, height: 15), cornerRadius: CGFloat(5))
mySKShapeNode.fillColor = UIColor.white
mySKShapeNode.position = CGPoint(x: 240, y: 100)
self.tapCounter += 1
var alternate = tapCounter / 2
if alternate == 0{
spriteScene.addChild(mySKShapeNode)
} else {
mySKShapeNode.removeFromParent()
}
}
}
通过使用此代码,节点被添加,但当我再次点击按钮时它不会被删除。
您需要在函数之外创建 skshapenode。 这是代码。
class myView: UIViewController{
var spriteScene = SKScene(size: CGSize(width: 500, height: 500))
var tapCounter: Int = 0
var mySKShapeNode = SKShapeNode(rectOf: CGSize(width: 270, height: 15), cornerRadius: CGFloat(5))
override func viewDidLoad(){
super.viewDidLoad()
.
.
.
let xPostion:CGFloat = 40
let yPostion:CGFloat = 108
let buttonWidth:CGFloat = 100
let buttonHeight:CGFloat = 45
button.frame = CGRect(x:xPostion, y:yPostion, width:buttonWidth, height:buttonHeight)
button.backgroundColor = UIColor.white
button.setTitle("Tap me!", for: UIControl.State.normal)
button.tintColor = UIColor.black
button.addTarget(self, action: #selector(myView.buttonAction(_:)), for: .touchUpInside)
self.view.addSubview(button)
.
.
.
}
@objc func buttonAction(_ sender:UIButton!){
mySKShapeNode.fillColor = UIColor.white
mySKShapeNode.position = CGPoint(x: 240, y: 100)
self.tapCounter += 1
var alternate = tapCounter / 2
if alternate == 0{
spriteScene.addChild(mySKShapeNode)
} else {
mySKShapeNode.removeFromParent()
}
}
}
错误在于您的 IBAction 方法
每次你这样做
let mySKShapeNode = SKShapeNode(rectOf: CGSize(width: 270, height: 15), cornerRadius: CGFloat(5))
您创建了一个新的 'mySKShapeNode' 实例。
如果要删除节点,则需要在添加时在同一引用上进行。
为此,您需要将 'mySKShapeNode' 设为全局 var 。
如果你不希望它作为全局变量,那么你可以通过访问现有的子节点来获取节点,并根据它的道具找到节点或者给形状节点一个名字,你以后可以通过调用来获取它
childNode(withName:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.