繁体   English   中英

点击按钮后如何删除SKNode?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM