我一直在使用BitmapData.copyPixels()
在画布上绘制图形(Bitmap
)。
我需要在不使用draw()
的情况下旋转生成的图形,因为它的速度要慢得多。
如何旋转目标图形?我假设可能有一个我可以使用的公式或库,它将首先重新组织构成基于原点(点)和弧度的图形的像素。
我很确定我无法创建这样的逻辑,所以如果有任何已知的库可以做到这一点,那就太棒了。
我希望实现类似于XNA的SpriteBatch.Draw()
方法,它接受rotation
作为第5个参数。
答案 0 :(得分:4)
copyPixels
基本上只是将内存块从一个BitmapData
对象复制到另一个BitmapData
对象。转换像素(例如,缩放,旋转,剪切等)方式更加CPU密集。事情就是这样,并没有什么神奇的方法可以改变这一点。即使您会找到另外一个执行这些操作的库,我怀疑它会比原始实现更快,因为它必须在纯ActionScript中实现,并且无法像本机命令那样进行优化。
如果您正在对场景进行blitting(例如,将精灵复制到更大的BitmapData
画布)并且您必须使用大量精灵执行大量旋转,那么最好的方法是渲染离散量的渲染步骤到copyPixels
,然后使用draw
复制最接近所需旋转的旋转。这样,您只需在初始化时使用慢copyPixels
一次,然后从那里使用快速draw
。
另一种绘制旋转位图的方法是,通过使用新的3D API,您可以简单地渲染纹理四边形,您可以旋转,缩放和移动到任何程度而不会降低性能。这将是最接近XNA Bitmap
实现的,但它需要您完全转储blitting(绘制到BitmapData.draw
)。
总的来说,我会采用最简单的方式,只使用{{1}}。创建一个测试用例,用于绘制估计的最大并发精灵数,并对其进行分析,以查看性能影响是否过大,以至于值得实施上述任何变通方法。
答案 1 :(得分:2)
我会使用矩阵。网上有很多例子,我喜欢这个,它很简短。 http://www.psyked.co.uk/actionscript/rotating-bitmapdata.htm
答案 2 :(得分:0)
一些想法,但速度尚未经过测试:
copyPixels()
。