繁体   English   中英

Swift SpriteKit:应该将节点从父节点移除时

[英]Swift SpriteKit: Node is not removing from parent when it should be

我有一个游戏(例如Doodle Jump),我的玩家击中了物体并从物体上反弹来前进并获得积分。 当玩家击中这些对象时,它们应该消失(.removeFromParent()),因为它们在GameScene中的函数中以及在其自己的单独类中被调用。 谁能告诉我我做错了什么?

这是我的GameScene代码:

 func createSnowAtPosition(position: CGPoint) -> SKNode {
  var sprite: SKSpriteNode!
   sprite = SKSpriteNode(imageNamed: "icons_winter_09")


    let node = Snowflake()
    let position = CGPoint(x: position.x, y: position.y)
    node.position = position
    node.name = "SNOW"

    node.addChild(sprite)
    sprite.physicsBody?.affectedByGravity = false
    sprite.physicsBody?.categoryBitMask = snowCategory
    sprite.physicsBody?.collisionBitMask = playerCategory
    sprite.physicsBody = SKPhysicsBody(circleOfRadius: snow.size.width / 7)
    sprite.physicsBody?.dynamic = false
    return node



}
  func didBeginContact(contact: SKPhysicsContact) {


    if player.physicsBody?.velocity.dy < 0 {
        // 2
        player.physicsBody?.velocity = CGVector(dx: player.physicsBody!.velocity.dx, dy: 250.0)
        // Play sound
        runAction(starSound) {
         snow.removeFromParent()
        }
        if snow.position.y < player.position.y {
            let pointsLabel = childNodeWithName("scoreLabel") as! Points
            pointsLabel.increment()
        }

        }

这是我为单独的类编写的代码:

  import Foundation
   import SpriteKit
 let snow = SKSpriteNode(imageNamed: "icons_winter_09")
    class Snowflake: SKSpriteNode {

init() {
    let size = CGSizeMake(40, 50)
  super.init(texture: nil, color: UIColor.clearColor(), size: size)




   }

  required init?(coder aDecoder: NSCoder) {
     fatalError("init(coder:) has not been implemented")
  }

   func loadBodyWithSize(size: CGSize) {

    snow.physicsBody?.affectedByGravity = false
    snow.physicsBody?.categoryBitMask = snowCategory
    snow.physicsBody?.collisionBitMask = playerCategory
     snow.physicsBody = SKPhysicsBody(circleOfRadius: snow.size.width / 3)

   }

   func createSnowsAtPosition() {
   snow.name = "snow"
    snow.position =  CGPointMake(50, 200)

    snow.physicsBody?.dynamic = false
    snow.physicsBody?.usesPreciseCollisionDetection = true
    addChild(snow)


     }

    }

在开始设置其物理属性之前,先定义该物理体,也不要在定义该物理体之前添加节点,因此:

let node = Snowflake()
let position = CGPoint(x: position.x, y: position.y)
node.position = position
node.name = "SNOW"l
sprite.physicsBody?.affectedByGravity = false
sprite.physicsBody?.categoryBitMask = snowCategory
sprite.physicsBody?.collisionBitMask = playerCategory
sprite.physicsBody = SKPhysicsBody(circleOfRadius: snow.size.width / 7)
sprite.physicsBody?.dynamic = false
addNode(node)
return node

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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