如何改变现有精灵接触后的物理体和精灵形象



我创建了两个带有物理实体的精灵,并处理了它们的接触。当接触发生时,我如何改变其中一个精灵的物理体和精灵图像?请参阅下面的相关代码:

// circle Sprite
circleSprite.name = circleSpriteCategoryName
circleSprite.position = CGPointMake(2*self.frame.size.width/3, 2*self.frame.size.height/3)
circleSprite.zPosition = 10
self.addChild(circleSprite)
circleSprite.physicsBody = SKPhysicsBody(circleOfRadius:  circleSprite.frame.size.width/2)
circleSprite.physicsBody?.friction = 0
circleSprite.physicsBody?.restitution = 1
circleSprite.physicsBody?.linearDamping = 0
circleSprite.physicsBody?.angularDamping = 0
circleSprite.physicsBody?.allowsRotation = false
circleSprite.physicsBody?.applyImpulse(CGVectorMake(4, -4))
// square sprite
let squareSprite = SKSpriteNode(imageNamed: "square.png")
squareSprite.position = CGPointMake(CGRectGetWidth(frame)*0.4, CGRectGetHeight(frame)*0.8)
squareSprite.physicsBody = SKPhysicsBody(rectangleOfSize: squareSprite.frame.size)
squareSprite.physicsBody?.friction = 0.0
squareSprite.name = squareSpriteCategoryName
squareSprite.physicsBody?.categoryBitMask = squareSpriteCategory
squareSprite.zPosition = 10
addChild(squareSprite)
// contact in didBeginContact
if firstBody.categoryBitMask == circleSpriteCategory && secondBody.categoryBitMask == squareSpriteCategory  {
        println("contact works")
    }

编辑1

我想更改更新circleSprite的物理体和图像,使其具有以下属性:

circleSprite = SKSpriteNode(imageNamed: "recto.png")
circleSprite.physicsBody = SKPhysicsBody(rectangleOfSize: circleSprite.frame.size)
circleSprite.physicsBody?.friction = 0.0
circleSprite.name = newSpriteCategoryName
circleSprite.physicsBody?.categoryBitMask = newSpriteCategory

编辑2

在Max_Power89的帮助下,我设法改变了精灵图像。但图像已经被缩小到物理物体的尺寸。请参阅下面的相关代码:
        if firstBody.categoryBitMask == circleSpriteCategory && secondBody.categoryBitMask == squareSpriteCategory    {
        if let newSprite = firstBody.node    {
            let newImage = SKTexture(imageNamed: "newSprite.png")
            let action = SKAction.setTexture(newImage)
            newSprite.runAction(action)
          }
      }

可以实现SKPhysicsContactDelegate

那么在你的didBeginContact委托中你可以这样做

func didBeginContact(contact: SKPhysicsContact) {
        // Return whatever it's the other body
        let other = contact.bodyA.categoryBitMask == PhisicsCategory.Player ? contact.bodyB : contact.bodyA
        if other.categoryBitMask == PhisicsCategory.Playe1 {
            //Change sprite
            let deadTexture = SKTexture(imageNamed: "Your image name")
            let action = SKAction.setTexture(deadTexture)
            player1.runAction(action)
        }
    }

最新更新