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