Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sprite kit 如何在sprite节点上作为组操作运行两个SKTexture操作_Sprite Kit_Swift3_Skaction_Sktexture - Fatal编程技术网

Sprite kit 如何在sprite节点上作为组操作运行两个SKTexture操作

Sprite kit 如何在sprite节点上作为组操作运行两个SKTexture操作,sprite-kit,swift3,skaction,sktexture,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 = firstImag

我需要在一个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)

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

更新

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

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



}
然后执行如下代码:

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



}

您希望两个纹理同时显示还是从第一个纹理过渡到第二个纹理?@nathan我希望两个纹理同时显示您可以有一个由两个图像组合而成的纹理(图像),或者有两个单独的
SKSpriteNode
,内森我这样做的主要原因是我希望把其中一个精灵淡出。另外,我不太同意用两个SKSpriteNode的一个字符。我不能同时运行这两个纹理吗?作为孩子或类似的东西运行动作。
SKAction
动画(使用:timePerFrame:)
动作是否有效?在给定的时间段内,应该在多个纹理之间设置动画。