ios - 如何在 SpriteKit 中从 Web API 加载 Sprite 表

标签 ios sprite-kit sprite-sheet texturepacker

我是 SpriteKit 的新手,我的问题是如何从 Web API 加载 Sprite 表。

目前,我有一个 API 返回一个大的 PNG 图像,其中包含所有 Sprite 表,以及一个关于单个帧信息的 json。 (文件和 json 由 TexturePacker 生成)API 如下所示:

enter image description here

格式就像一个 .atlasc 文件夹,其中包含一个大图像和一个 plist (XML) 文件。

我正在考虑下载图像和plist文件并将其保存在磁盘中以便加载。但是,SKTextureAtlas.init(named: String) 只能从应用程序包中加载。

简而言之,我想在运行时从网络加载 Sprite 动画。

我可以控制 API,因此我可以更新 API 来实现我的目标。

最佳答案

我想到的方法是下载image,创建一个sourceTexture,比如:let sourceTexture = SKTexture(image: image)

然后使用 json 中的 frame 信息通过 init(rect rect: CGRect, inTexture texture: SKTexture) 方法创建单独的纹理

示例代码是:

var textures: [SKTexture] = []

let sourceTexture = SKTexture(image: image)
for frame in spriteSheet.frames {
  let rect = CGRect(
    x: frame.frame.origin.x / spriteSheet.size.width,
    y:  1.0 - (frame.frame.size.height / spriteSheet.size.height) - (frame.frame.origin.y / spriteSheet.size.height),
    width: frame.frame.size.width / spriteSheet.size.width,
    height: frame.frame.size.height / spriteSheet.size.height
  )
  let texture = SKTexture(rect: rect, inTexture: sourceTexture)
  textures.append(texture)
}

关于ios - 如何在 SpriteKit 中从 Web API 加载 Sprite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510209/

相关文章:

ios - 对展开转场进行故障排除

iphone - 如何使用 StackMob 作为后端获取 sm_owner 用户对象

swift - 如何使用 SpriteKit 与已创建的 SKSpriteNode 创建碰撞?

ios - SKSpriteNode 不稳定滑动?

ios - Sprite Kit 低性能,一个位置有多个节点

ios - 如何让多个 View 使用同一个 Controller 类?

ios - 在哪里以及如何注册接收通知的对象?

javascript - 在 EaselJS 中缓存 SpriteSheets

android - 逆向工程 : Extract images/sprite sheet from apk

html - 限制显示 Sprite 表作为文本框背景