如何在精灵节点上作为组操作

时间:2017-01-02 17:55:05

标签: sprite-kit swift3 skaction sktexture

我需要在一个sprite节点上运行两个SKTexture操作。我做了以下事情:

    func subSprite (_ newSprite:SKNode) {

    let firstImage = SKTexture(imageNamed: "firstImage")
    let secondImage = SKTexture(imageNamed: "secondImage")

    (newSprite as? SKSpriteNode)?.size = firstImage.size()

    mainSprite?.sprite.physicsBody = SKPhysicsBody(texture: firstImage, size: firstImage.size())
    mainSprite?.sprite.physicsBody!.categoryBitMask = mainSpriteCategory
    mainSprite?.sprite.physicsBody?.allowsRotation = false


    mainSprite!.sprite.physicsBody?.contactTestBitMask = enemyOneCategory | enemyTwoCategory | enemyThreeCategory

    mainSprite!.sprite.physicsBody?.collisionBitMask =  enemyOneCategory | enemyTwoCategory | enemyThreeCategory

    let firstImageAction = SKAction.setTexture(firstImage)
    let secondImageAction = SKAction.setTexture(secondImage)
    let textureGroupAction = SKAction.group([firstImageAction, secondImageAction ])

    newSprite.run(textureGroupAction)

}

仅显示secondImage。第一个没有。我这样做的主要原因是我需要运行一些其他操作,比如在secondImage上淡出。如何才能显示两个图像?

更新

根据KnightOfDragon的推荐,我创建了一个单独的精灵。因此,我有两个精灵(相同的尺寸),一个使用物理体的圆形精灵和一个没有物理体的正方形精灵。我使用下面的代码在update方法中更新了sprite的位置。

mainSprite!.squareSprite.position = mainSprite!.circleSprite.position

当与另一个物理体发生碰撞时,精灵似乎在某个随机方向上偏移,尽管精灵具有相同的位置(我在几个位置记录了它们的位置以确保这一点)。当我显着降低mainSprite的速度(这不是我打算做的)时,偏移停止或减少。我相信它与另一个造成偏移的物理体撞击的速度很快。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

像这样构建你的精灵:

var mainSprite : SKNode!
var subSprite1 = SKSpriteNode(texture:SKTexture(imageNamed: "firstImage"))
var subSprite2 = SKSpriteNode(texture:SKTexture(imageNamed: "secondImage"))

mainSprite.addChild(subSprite1)
mainSprite.addChild(subSprite2)

然后像这样做你的代码:

func initSprite (_ newSprite:SKNode) {


    (newSprite as? SKSpriteNode)?.size = firstImage.size()

    mainSprite!.physicsBody = SKPhysicsBody(texture: firstImage, size: firstImage.size())
    mainSprite!.physicsBody!.categoryBitMask = mainSpriteCategory
    mainSprite!.physicsBody!.allowsRotation = false


    mainSprite!.physicsBody!.contactTestBitMask = enemyOneCategory | enemyTwoCategory | enemyThreeCategory

    mainSprite!.physicsBody!.collisionBitMask =  enemyOneCategory | enemyTwoCategory | enemyThreeCategory



}