actionscript-3 - 在 AS3 中嵌入资源、位图缓存和位图转换

标签 actionscript-3 mobile

我确信这些话题已经被打败了,但我有一个非常具体的问题,我一直无法找到答案。

我在程序中所做的就是嵌入一些艺术资源以供使用,扩展它们以支持多个移动平台,然后继续我的方式。

我了解到位图缓存是提高移动应用程序性能的好方法。对于嵌入式 Assets ,这是否只是制作嵌入式 Assets 的单个实例并多次使用它的行为?例如:

[Embed(source = "png.png")] private static var img:Class;
private static var data:BitmapData = new img().bitmapData;<p></p>

<p>private var bmp1:Bitmap = new Bitmap(data);
private var bmp2:Bitmap = new Bitmap(data);</p>
我假设在这种情况下,使用“new”关键字创建的所有资源都将引用存储在内存中的图像的单个实例,并在内存中的其他位置创建它们自己的唯一副本?

接下来,关于 Bitmap 类中的 cacheAsBitmapcacheAsBitmapMatrix 参数,在使用嵌入资源时设置这些属性会产生什么作用吗?

最后,在 AS3 中缩放位图时,使用 Bitmap 类的 scaleXscaleY 属性是否更有效,或者是最好使用比例矩阵重绘BitmapData

预先感谢您的帮助!

最佳答案

是的,您从嵌入文件中提取的 BitmapData 只会有一个实例。这可以节省内存,但确实意味着更改 BitmapData 将影响引用它的所有位图 - 但如果您不想编辑 BitmapData 本身,或者您希望它更新所有位图(如果您这样做),这不是问题。

使用 new 关键字创建的每个位图都将是内存中的唯一对象,但它们都将为其内容引用相同的 BitmapData (data) - 想想 BitmapData作为像素数据的核心描述,位图作为包装器,允许在舞台上绘制数据。您在代码中创建的每个位图都引用相同的位图数据,如果您想为位图提供唯一的数据副本,请实例化它:

var uniqueBitmap:Bitmap = new Bitmap(data.clone());

...如果您想稍后访问它,可以通过 Bitmap 实例来完成:

uniqueBitmap.bitmapData;

但是,这会在内存中创建另一个 BitmapData 对象,因此仅当您确实需要单独操作它时才执行此操作。

至于第二部分,如果缩放是为了纯粹的视觉效果(例如在游戏中)并且足够频繁,我个人会使用包装器位图的scaleX和scaleY - 使用矩阵不会调整您的BitmapData的大小,它将创建它的缩放副本,因此使用此方法进行常见转换可能并不理想,因为您每次都创建一个新的 BitmapData 实例,特别是如果您面向移动设备。这实际上取决于您的目的 - 我可以问您想做什么吗?

关于actionscript-3 - 在 AS3 中嵌入资源、位图缓存和位图转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13021360/

相关文章:

javascript - 如何处理手机 Angular 长按事件?

css - 影响我的 JQuery Mobile header 的 <h1> 的外部 CSS

android - 弹性 4.6 : Get the current location (fast as possible)

apache-flex - Bitmapdata 大量使用 - 内存灾难 (spark/FB4)

c - 我是否正确地将 C 代码翻译为 AS3?

flash - 从自定义 Web 服务器提供多个 flv 文件,同时保持套接字打开在第 6 个连接后停止

flash - Flash Lite有什么用,这个和Flash Action Script一样吗

android - 到目前为止,React Native 与 WPA 应用程序的体验

ios - ReasonML 可以用来制作原生 iOS 应用程序吗?

jQuery Mobile - 页面在转换之前跳转到顶部