首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 2,SpriteKit,我在从父节点中删除节点时遇到问题

Swift 2,SpriteKit,我在从父节点中删除节点时遇到问题
EN

Stack Overflow用户
提问于 2016-01-24 07:08:13
回答 2查看 174关注 0票数 0

我是Swift的新手,所以如果这让我感到困惑,请原谅。

我正在尝试让我的一个节点“芭乐”消失时,“忍者”与它相撞。

目前,我在createScene()函数中设置的代码如下:

代码语言:javascript
复制
        func spawnGuava(){

        //The way the Guava spawn and move

        let guavaNode = SKNode()

        let guava = SKSpriteNode(texture: guavaNodeTexture)

        guava.setScale(0.75)
        guava.position = CGPointMake (self.size.width + 160, self.size.height * 0.05)
        guava.physicsBody = SKPhysicsBody(rectangleOfSize: guava.size)
        guava.physicsBody?.affectedByGravity = false
        guava.physicsBody?.dynamic = true
        guava.alpha = 0.75
        guava.physicsBody?.categoryBitMask = PhysicsCatagory.Guava
        guava.physicsBody?.collisionBitMask = PhysicsCatagory.None
        guava.physicsBody?.contactTestBitMask = PhysicsCatagory.Ninja

        guava.zPosition = 0

        guavaNode.addChild(guava)


        guava.runAction(GuavaMoveAndRemove)

        self.addChild(guavaNode)

        func ninjaAteGuava(ninja: SKSpriteNode, guava: SKSpriteNode){

            guavaNode.removeFromParent()

        }

        func didCollideWithGuava(contact: SKPhysicsContact){
            var firstBody: SKPhysicsBody
            var secondBody: SKPhysicsBody

            if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
                firstBody = contact.bodyA
                secondBody = contact.bodyB
            }
            else{
                firstBody = contact.bodyB
                secondBody = contact.bodyA
            }

            if ((firstBody.categoryBitMask & PhysicsCatagory.Guava != 0) && (secondBody.categoryBitMask & PhysicsCatagory.Ninja != 0)) {
                ninjaAteGuava(firstBody.node as! SKSpriteNode, guava: secondBody.node as! SKSpriteNode)

            }
        }

这里有一些关于忍者的信息

代码语言:javascript
复制
  let ninjaTexture = SKTexture(imageNamed:"ninja")
    ninjaTexture.filteringMode = SKTextureFilteringMode.Nearest

    ninja = SKSpriteNode(texture: NinjaTexture)
    ninja.setScale(0.5)
    ninja.position = CGPoint(x: self.frame.size.width * 0.50, y: self.frame.size.height * 0.6)

    ninja.physicsBody = SKPhysicsBody(circleOfRadius: ninja.size.height / 2)
    ninja.physicsBody?.categoryBitMask = PhysicsCatagory.Ninja
    ninja.physicsBody?.collisionBitMask = PhysicsCatagory.Ground |  PhysicsCatagory.Wall | 
    ninja.physicsBody?.contactTestBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall | PhysicsCatagory.Guava
    ninja.physicsBody!.dynamic = true
    ninja.physicsBody!.allowsRotation = false

    self.addChild(ninja)

额外信息:

代码语言:javascript
复制
struct PhysicsCatagory {

static let None : UInt32 = 0
static let Boognish : UInt32 = 0x1 << 1
static let Ground : UInt32 = 0x1 << 2
static let Wall : UInt32 = 0x1 << 3
static let Guava : UInt32 = 0x1 << 4
static let Pepper: UInt32 = 0x1 << 5

}

EN

回答 2

Stack Overflow用户

发布于 2016-01-24 07:29:40

ninjaAteGuava function中,guavaNode应为guava

代码语言:javascript
复制
func ninjaAteGuava(ninja: SKSpriteNode, guava: SKSpriteNode){

        guavaNode.removeFromParent()

}

应该是:

代码语言:javascript
复制
func ninjaAteGuava(ninja: SKSpriteNode, guava: SKSpriteNode){

        guava.removeFromParent()

}

这是因为函数中的参数是芭乐,而不是guavaNode。我不知道为什么Xcode没有给您一个错误,但这应该可以工作。希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-01-24 07:48:52

是否已将guavaNode添加到场景或guava中?因为您正在从场景中删除guavaNode,但我怀疑您可能已将guava添加到guava.runAction(GuavaMoveAndRemove)内的场景中

或者可能在该操作中有其他东西可能会触发您的bug?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34970058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档