Flutter-在游戏中使用大量图像时,如何使用Spritewidget管理内存?

时间:2019-02-18 18:20:42

标签: flutter

我正在使用SpriteWidget框架(https://github.com/spritewidget/spritewidget)开发游戏,并且需要管理很多资产。由于我使用的图像资产数量略有增加,因此在游戏过程中出现了随机崩溃。 请注意,加载图片资源后,游戏不会崩溃。我可以玩一个关卡,但是当我重新启动另一个关卡时,我遇到了崩溃。 自从我开始开发直到昨天添加新的关卡背景和角色精灵之后,一切都很好。

使用spritewidget框架是否有管理资产图片的好模式? -我尝试在应用程序启动时使用ImageMap类加载所有内容 -我尝试在应用程序启动时使用ImageMap类加载很少的资产,并在每个级别的开始为特定级别的资产创建一个新的ImageMap(并尝试在末尾处置由ImageMap处理的图像)。 但是使用这两种方法,当我玩两个或两个以上的游戏时我会崩溃

在此先感谢您的帮助 最好的问候,

1 个答案:

答案 0 :(得分:0)

  

使用spritewidget管理资产图片是否有很好的模式   框架

获取TexturePacker工具,将所有图像打包为4096x4096张(如果定位到较旧的设备,则为2048x)。结果,您将获得一个包含所有较小图像的图像和一个.json描述符。

将两者都馈送到new SpriteSheet(img,json)。通过工作表的原始名称访问图像。这种方法可以大大减少渲染周期内的纹理切换。如果仍然遇到任何崩溃,请尝试使用较小尺寸的纸张。这是任何游戏引擎的常见做法。

以下是SpriteWidget的文档的引文:

  

最常见的节点类型是Sprite节点。一个精灵只会画一个   图像到屏幕上。可以从Image对象或   SpriteTexture对象。纹理是图像的一部分。用一个   SpriteSheet,您可以在单个包装中包装多个纹理元素   图片。这样可以节省设备的GPU内存中的空间,还可以   绘图速度更快。目前SpriteWidget支持JSON中的Sprite工作表   格式并使用诸如TexturePacker之类的工具制作。很少见   手动编辑Sprite工作表文件。您可以创建一个SpriteSheet   带有json中的定义和图片:

SpriteSheet sprites = new SpriteSheet(myImage, jsonCode);
SpriteTexture texture = sprites['texture.png'];