Actionscript 3 如何将Flash游戏转换为使用BitmapData?

Actionscript 3 如何将Flash游戏转换为使用BitmapData?,actionscript-3,flash,bitmap,bitmapdata,blit,Actionscript 3,Flash,Bitmap,Bitmapdata,Blit,目前我有一款Flash AS3游戏,它不使用任何BitmapData技术。但是,由于性能原因,我想实现它 我找不到一个完整的教程来为游戏使用Bitmap和BitmapData类 本质上,我有一个World类,它充当游戏“World”容器,其中包含所有游戏对象(玩家、物品等)。在World中,只有ENTER\u FRAME事件会勾选每个对象: private function frameHandler(e:Event):void { if (!isPaused) { f

目前我有一款Flash AS3游戏,它不使用任何
BitmapData
技术。但是,由于性能原因,我想实现它

我找不到一个完整的教程来为游戏使用
Bitmap
BitmapData

本质上,我有一个
World
类,它充当游戏“World”容器,其中包含所有游戏对象(玩家、物品等)。在
World
中,只有
ENTER\u FRAME
事件会勾选每个对象:

private function frameHandler(e:Event):void {

    if (!isPaused) {

        for (i = 0; i < characters.length; i ++) { 
            characters[i].tick();
        }

        for (i = 0; i < controllers.length; i ++) { 
            controllers[i].tick();
        }

        //Etc...

    }

}
私有函数frameHandler(e:Event):void{
如果(!i暂停){
对于(i=0;i
如何在该系统中实现
BitmapData

编辑


目前,所有我的世界对象都使用非常详细的矢量图形,当舞台上有许多对象时,这些图形会影响性能。这就是我转向位图的原因。

Bitmap
s在显示能力方面与
MovieClip
s没有区别,但是如果角色的基础是
MovieClip
,而不是
Sprite
,则必须使用基于位图的角色模拟MCs的
gotoAndStop()
行为。我无法得出你的目标条件是什么的实际问题。您是否计划在任何地方使用blitting,或者只是将MCs转换为位图,或者您是否希望更改位图,因为您认为它们会更快?如果您从任何类型的矢量图形转向位图,有很多问题需要解决。@Vesper我的世界所有对象都是
MovieClip
s或
Sprite
s。我转而使用位图,因为当有多个字符(矢量图形)时,性能会受到影响。我已经读到,游戏通常使用一个
BitmapData
对象,然后在那里以某种方式绘制游戏场景。这种技术称为“blitting”。这里有一些blitting教程,但为了获得实际性能,您不应该直接将所有内容
draw()
绘制到主位图上,主要的绘制功能应该是
copyPixels()
,这要求bitmapdata在旋转方面与主位图对齐(否则您将绘制一个朝向错误方向的角色),它只接受偶数像素的坐标,你必须自己维护显示列表,而不是让Flash来做。所有这些可能都很难适应现有的图形,比如说,如果一个字符有一个旋转部分,你需要分别blit它的底部和旋转部分,旋转部分应该有一组
BitmapData
s在游戏中将使用的所有旋转位置中包含该旋转部分的图像。如果该旋转是整圈的,则可以使用近似值,方法是构建36个包含图像的图像,这些图像以10度的步长旋转。如果有许多不同的旋转对象,这会很快累积起来,尽管其中一些可以使用sa要绘制的位图集。另一方面,您可以在所有位置将整个角色绘制为位图以供显示,例如,可以逐帧绘制复杂的攻击动画,并在游戏中角色执行攻击时重复使用。这称为精灵动画,您甚至可以在运行时通过在允许用户播放之前的一组
draw
调用(也称为“加载动画”)。这些调用也可以重复使用,并且最好保持静态,以便在绘制角色时,使用现有的
BitmapData
来显示角色。