Actionscript 3 如何将Flash游戏转换为使用BitmapData?
目前我有一款Flash AS3游戏,它不使用任何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
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
来显示角色。