简体   繁体   English

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

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

I have a game (like Doodle Jump) where my player hits objects and bounces off of them to advance and gain points. 我有一个游戏(例如Doodle Jump),我的玩家击中了物体并从物体上反弹来前进并获得积分。 As the player hits said objects, they should just disappear (.removeFromParent()) as it is called in a function in GameScene and in its own separate class. 当玩家击中这些对象时,它们应该消失(.removeFromParent()),因为它们在GameScene中的函数中以及在其自己的单独类中被调用。 Can anyone tell me what Im doing wrong? 谁能告诉我我做错了什么?

Here is my code for 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()
        }

        }

And here is my code for the separate class: 这是我为单独的类编写的代码:

  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)


     }

    }

Define the physics body before you start settings its properties, also don't add the node until the physics body is defined, so: 在开始设置其物理属性之前,先定义该物理体,也不要在定义该物理体之前添加节点,因此:

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