我如何 运行 精灵节点上的两个 SKTexture 动作作为一个组动作
How can I run two SKTexture Actions on a sprite node as a group action
我需要在一个 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 上淡出。我怎样才能让两个图像都出现?
更新
根据KnightOfDragon 的推荐,我创建了一个单独的精灵。因此我有两个精灵(相同尺寸),一个使用物理体的圆形精灵和一个没有物理体的方形精灵。我使用下面的代码在更新方法中更新了精灵的位置。
mainSprite!.squareSprite.position = mainSprite!.circleSprite.position
尽管精灵具有相同的位置(我在几个地方记录了它们的位置以确保这一点),但当与另一个物理物体发生碰撞时,精灵似乎会在某个随机方向上偏移。当我显着降低 mainSprite
的速度(这不是我打算做的)时,偏移停止或减少。我相信这是与导致偏移的另一个物理体碰撞的影响速度。我该如何解决这个问题?
像这样构造你的精灵:
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
}
我需要在一个 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 上淡出。我怎样才能让两个图像都出现?
更新
根据KnightOfDragon 的推荐,我创建了一个单独的精灵。因此我有两个精灵(相同尺寸),一个使用物理体的圆形精灵和一个没有物理体的方形精灵。我使用下面的代码在更新方法中更新了精灵的位置。
mainSprite!.squareSprite.position = mainSprite!.circleSprite.position
尽管精灵具有相同的位置(我在几个地方记录了它们的位置以确保这一点),但当与另一个物理物体发生碰撞时,精灵似乎会在某个随机方向上偏移。当我显着降低 mainSprite
的速度(这不是我打算做的)时,偏移停止或减少。我相信这是与导致偏移的另一个物理体碰撞的影响速度。我该如何解决这个问题?
像这样构造你的精灵:
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
}