ActionScript 3使用Sprite实现图层的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActionScript 3使用Sprite实现图层的问题相关的知识,希望对你有一定的参考价值。

在使用AS3设计一个简单的游戏引擎时遇到这么一个问题:

我想实现多图层的效果。比如,最底层的是地图(层1)。它上面一层是角色(层2)。这两个层分别用Sprite的实体化来实现。其中,当角色没有位置移动的时候,层1不必重复渲染。角色本身是不断变化的,比如拿着武器挥舞,因此层2每帧都会变化。

var Layer1:Sprite = new Sprite(); //层1
var Layer2:Sprite = new Sprite(); //层2

mainSprite.addChild(Layer1); //将层1加入到主Sprite中
mainSprite.addChild(Layer2); //将层2加入到主Sprite中

地图和角色都是像素构建的位图,使用BitmapData来实现。为了平滑过渡,系统使用双缓冲。
层1缓冲var backBuffer1:BitmapData = new BitmapData(800,600);
层2缓冲var backBuffer2:BitmapData = new BitmapData(800,600);

每次都是将变化写到后台缓冲中,然后一次性将图片拷贝到Layer1和Layer2中:

//Layer1拷贝代码
Layer1.graphics.clear();
Layer1.graphics.beginBitmapFill(backBuffer1, null, false, false);
Layer1.graphics.drawRect(0, 0, 800, 600);
Layer1.graphics.endFill();

//Layer2拷贝代码
Layer2.graphics.clear();
Layer2.graphics.beginBitmapFill(backBuffer2, null, false, false);
Layer2.graphics.drawRect(0, 0, 800, 600);
Layer2.graphics.endFill();

于是,问题来了:
Layer2会把Layer1完全遮住,即使Layer2中的图片填充不满,也不能看到Layer1的图片,无法实现角色在地图上的效果。

我认为问题出在beginBitmapFill这个函数不能实现未绘图的部分进行透明处理。有什么解决方法?

参考技术A 这个好像要先用firework先处理图片,所有原来透明的图片到flash内就变为白色背景,但是firework可以让flash读取带有透明的图片。而且你用drawRect好像有点,画一个矩形是不是会出问题 参考技术B public 函数 BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)

后面还有两个参数的 fillColor 设成 0x00000000本回答被提问者采纳

以上是关于ActionScript 3使用Sprite实现图层的问题的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript 3.0 中的 MovieClip 与 Sprite

调整 Sprite Flex/ActionScript 的大小

使用 Flex 附加带有 ActionScript3 的 Sprite

在 flex 中使用 Actionscript (MovieClip) 类

使用Actionscript 3的OnInterframe事件

需要为一个类“扩展”ActionScript 中的各种类