【问题标题】:How can I run two SKTexture Actions on a sprite node as a group action如何在精灵节点上运行两个 SKTexture 动作作为组动作
【发布时间】:2017-01-02 17:55:05
【问题描述】:

我需要在一个精灵节点上运行两个 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 的速度(这不是我打算做的)时,偏移量停止或减少。我相信这是与另一个物理物体碰撞的撞击速度导致了偏移。我该如何解决这个问题?

【问题讨论】:

  • 您希望两个纹理同时显示还是从第一个纹理过渡到第二个?
  • @nathan 我希望同时显示两个纹理
  • 你可以有一个纹理(图像)是两个图像的组合,或者有两个单独的SKSpriteNode's,每个图像一个。
  • @nathan 我这样做的主要原因是希望让其中一个精灵淡出。另外,我对一个角色使用两个 SKSpriteNode 不太满意。我不能同时运行两个 SKTexture 吗?像孩子一样运行动作或类似的东西。
  • SKActionanimate(with:timePerFrame:) 操作会起作用吗?这应该在给定时间段内的多个纹理之间进行动画处理。

标签: sprite-kit swift3 skaction sktexture


【解决方案1】:

像这样构造你的精灵:

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



}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多