【问题标题】:SKTextureAtlas gets overridden by declaration of second SKTextureAtlasSKTextureAtlas 被第二个 SKTextureAtlas 的声明覆盖
【发布时间】:2018-06-26 06:45:50
【问题描述】:

每当我创建并定义两个变量为 SKTextureAtlas 类型时,它们就会相互重写。这是我最初创建的两个 SKTextureAtlas

class GameScene: SKScene {

    var idle = true

    var TextureAtlas = SKTextureAtlas()
    var TextureAtlasIdle = SKTextureAtlas()

稍后在我的代码中,我为每个图集分配了一个图像文件夹。如果我注释掉第二个图集,我的动画就可以工作,但是当我如下所示定义这两个图集时,我的动画会重叠并播放来自 cat_walk 的帧,即使它被告知只播放 cat_idle

    TextureAtlasIdle = SKTextureAtlas(named: "cat_idle")

    for i in 1...TextureAtlasIdle.textureNames.count{

        let Name = "\(i).png"
        TextureArrayIdle.append(SKTexture (imageNamed: Name))
    }

   TextureAtlas = SKTextureAtlas(named: "cat_walk")

这就是我开始 cat_idle 动画的方式。我没有启动 cat_walk 动画

aN.run(SKAction.repeatForever(SKAction.animate(with:self.TextureArrayIdle, timePerFrame: 0.1)))

我试图找出为什么这行代码会导致我的两个不同动画重叠。

TextureAtlas = SKTextureAtlas(named: "cat_walk")

【问题讨论】:

  • 您的代码运行良好。您可能对 Texture Atlas 文件夹及其内容做错了。你能提供你的地图集文件夹和内容的截图吗?
  • 我认为您已将两个 atlas 文件夹的内容命名为 1.png, 2.png ... 等等。尝试将 cat_idle.atlas 文件夹内容更改为 idle1.png、idle2.png.. 等等。并确保重命名 cat_walk.atlas 文件夹的图像,如 walk1.png
  • 这看起来完全是浪费资源,你为什么不通过 XCAssets 构建你的图集
  • 谢谢大家,我只需要清楚地重命名所有图像。

标签: swift xcode sprite-kit


【解决方案1】:

Texture Atlas 是您游戏的一种精灵表。您的方法不适合访问游戏的地图集图像。修改您的 for 循环,如下所示:

  for i in 0..< 8 {
        let texture:SKTexture = TextureAtlasIdle.textureNamed(String(format: "%i", i+1))
        TextureArrayIdle.insert(texture, at:i)
    }

每次访问您的 atlas 文件夹时,请使用此 for 循环过程。我在 for 循环中使用了静态 8 数字,这将是您的精灵计数。 github上有一个简单的游戏叫Desert Run。请查看此内容以获得更多说明。

注意:猫的图片命名必须以 1.png 开头 如果你想运行 for 循环

【讨论】:

  • 这是 Swift,你可以这样做 TextureAtlasIdle.textureNamed("\(i+1)"))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
相关资源
最近更新 更多