首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个SpriteNodes之间的联系问题

两个SpriteNodes之间的联系问题
EN

Stack Overflow用户
提问于 2015-10-30 02:45:55
回答 1查看 43关注 0票数 0

我的func联系人有一个问题,因为第二个联系人不工作(与Bonus和Vaisseau的联系人),但其他两个联系人不工作。

所以这是我的代码:

函数:

代码语言:javascript
运行
复制
func didBeginContact(contact: SKPhysicsContact) {

        let PremierBody : SKPhysicsBody = contact.bodyA
        let SecondBody : SKPhysicsBody = contact.bodyB

        if ((PremierBody.categoryBitMask == PhysicsCategories.Meteorites) && (SecondBody.categoryBitMask == PhysicsCategories.Meteorites)) {
            contactEntreMeteorites(PremierBody.node as! SKSpriteNode, Meteorites2: SecondBody.node as! SKSpriteNode)
        }
        else if ((PremierBody.categoryBitMask == PhysicsCategories.Bonus) && (SecondBody.categoryBitMask == PhysicsCategories.Vaisseau) ||
            (PremierBody.categoryBitMask == PhysicsCategories.Vaisseau) && (SecondBody.categoryBitMask == PhysicsCategories.Bonus)){
                gameOver(PremierBody.node as! SKSpriteNode, Vaisseau: SecondBody.node as! SKSpriteNode)
                print("CONTACT")
        }
        else if ((PremierBody.categoryBitMask == PhysicsCategories.Meteorites) && (SecondBody.categoryBitMask == PhysicsCategories.Vaisseau) ||
        (PremierBody.categoryBitMask == PhysicsCategories.Vaisseau) && (SecondBody.categoryBitMask == PhysicsCategories.Meteorites)){
        gameOver(PremierBody.node as! SKSpriteNode, Vaisseau: SecondBody.node as! SKSpriteNode)
            print("Couco")
        }
    } 

这是我的物理分类:

代码语言:javascript
运行
复制
struct PhysicsCategories {
    static let Meteorites : UInt32 = 1
    static let Bonus : UInt32 = 2
    static let Vaisseau : UInt32 = 5
}

在我的func DidMoveToView中:

代码语言:javascript
运行
复制
Vaisseau = SKSpriteNode(texture: Vaisseau1)
        Vaisseau.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2)
        Vaisseau.physicsBody = SKPhysicsBody(rectangleOfSize: Vaisseau.size)
        Vaisseau.physicsBody?.affectedByGravity = false
        Vaisseau.physicsBody?.categoryBitMask = PhysicsCategories.Vaisseau
        Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Bonus
        Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Meteorites
        Vaisseau.physicsBody?.dynamic = false
        Vaisseau.setScale(0.08)
        self.addChild(Vaisseau)

我在这个函数中创建了我的SpriteNode奖励:

代码语言:javascript
运行
复制
func ApparitionBonus() {

        let BonusSprite = SKSpriteNode(imageNamed: "Bonus.png")
        var BonusApparitionX = UInt32(self.frame.size.width)
        var BonusApparitionY = UInt32(self.frame.size.height)

        BonusApparitionX = arc4random() % BonusApparitionX
        BonusApparitionY = arc4random() % BonusApparitionY

        BonusSprite.position = CGPointMake(CGFloat(BonusApparitionX),CGFloat(BonusApparitionY))
        BonusSprite.setScale(0.8)
        BonusSprite.physicsBody = SKPhysicsBody(circleOfRadius: 20)
        BonusSprite.physicsBody?.affectedByGravity = false
        BonusSprite.physicsBody?.categoryBitMask = PhysicsCategories.Bonus
        BonusSprite.physicsBody?.contactTestBitMask = PhysicsCategories.Vaisseau
        BonusSprite.physicsBody?.dynamic = false
        self.addChild(BonusSprite)

        let RotationBonus = SKAction.rotateByAngle(CGFloat(M_PI), duration: 3)
        let wait = SKAction.waitForDuration(3)
        let actionFini = SKAction.removeFromParent()
        BonusSprite.runAction(SKAction.sequence([RotationBonus, wait, actionFini]))
        BonusSprite.runAction(SKAction.repeatActionForever(RotationBonus))
    }
EN

回答 1

Stack Overflow用户

发布于 2015-10-30 09:20:38

在您的didMoveToView中,当您调用:

代码语言:javascript
运行
复制
Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Bonus
Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Meteorites

您将contactTestBitMask设置为一个类别,然后再设置另一个类别。您需要按位或将它们放在一起。类似于:

代码语言:javascript
运行
复制
Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Bonus | PhysicsCategories.Meteorites

这将结合两个位掩码,这将允许它同时联系BonusMeteorites

如果不希望精灵发生碰撞,请将collisionBitMask设置为0x0 (或以您希望的方式表示0):

代码语言:javascript
运行
复制
Vaisseau.physicsBody?.collisionBitMask = 0x0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33422280

复制
相关文章

相似问题

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