我需要在一个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
的速度(这不是我打算做的)时,偏移停止或减少。我相信它与另一个造成偏移的物理体撞击的速度很快。我怎么解决这个问题?
答案 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
}