ios - 使用存储在应用程序包中的数据的纹理图集时,SpriteKit 绘制调用未批处理
问题描述
似乎 SpriteKit 不会批量处理同一纹理图集中的纹理的绘制调用。根据SKTextureAtlas
初始化的方式,有两种不同的行为:
SKTextureAtlas(named:)
当使用(从存储在应用程序包中的数据加载纹理图集)初始化纹理图集时,不会对绘制调用进行批处理。但是当使用动态创建纹理图集时,绘图调用似乎是批处理的
SKTextureAtlas(dictionary:)
。
下图显示了资产目录中的两种不同行为和 SpriteAtlas。
1. 未批量绘制调用:
2. 批量绘制调用:
精灵图集:
我创建了一个示例 Xcode 13 项目来显示不同的行为:https ://github.com/clns/spritekit-atlas-batching 。
我已经在 macOS Big Sur 11.6.1 上的 iOS 15 模拟器上尝试过这个。
重现的代码非常简单:
import SpriteKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
let atlas = SKTextureAtlas(named: "Sprites")
// let atlas = SKTextureAtlas(dictionary: ["costume": UIImage(named: "costume")!, "tank": UIImage(named: "tank")!])
let costume = SKSpriteNode(texture: atlas.textureNamed("costume"))
costume.setScale(0.3)
costume.position = CGPoint(x: 200, y: 650)
let tank = SKSpriteNode(texture: atlas.textureNamed("tank"))
tank.setScale(0.3)
tank.position = CGPoint(x: 500, y: 650)
addChild(costume)
addChild(tank)
}
}
解决方案
推荐阅读
- android - lsetfilecon 失败:传输端点不支持操作
- javascript - antd PageHeader 样式未加载到我的 React 组件中
- python - conda 4.8.3 无法安装包、创建新环境或更新
- java - 在码头启用 GZIP(使用 maven-jetty-plugin)
- javascript - rejects.toThrow in Jest
- python - 过滤很多词
- pandas - seaborn中的列式热图
- tcl - 在格式命令中添加百分号
- r-exams - R/examsexams2moodle() 中选项错误的惩罚
- django - 自动停止任务(Viewflow,Django)