题
我有一个带有大栅格地图的游戏
现在我们正在使用JPEG(4900x4200)
并且在游戏中我们需要滚动这张地图。
我们使用以下内容:
课程图扩展了mx.containers.canvas
和mx.controls.image
在构造函数中,我们有:
public function Map() {
super();
image.source = ResourceManager.interactiveManager.map;//big image
addChild(image);
......
}
对于滚动,我们正在使用:
if(parentAsCanvas==null){
parentAsCanvas = (parent as Canvas);
}
parentAsCanvas.verticalScrollPosition = newX;
parentAsCanvas.horizontalScrollPosition = newY;
在Windows中,我们的性能非常好。在FlashPlayer中的Linux和Mac中,我们的性能也很好。
但是在浏览器中的性能非常慢!我们该怎么办来解决它?
解决方案 2
我读过以下杂物 http://www.insideria.com/2008/04/flex-ria-performance-considera.html
我和我找到了问题的决心。
如果我在浏览器中打开SWF为“http://host/myswf.swf“我在浏览器中的表现巨大,因为Laoyoutmanager的原因是,该浏览器重新估计了应用程序中所有画布的位置和大小。而且,它的处理能力超过60%的性能能力。(是的(是的,我们的应用程序中有很多帆布)。
当我将应用程序放在HTML页面中的Contant大小的HTML块中时,所有问题都消失了!我的性能增长了80%!
其他提示
这很慢,因为您一直在渲染大图像。
这是我想到的一些事情:
- 尝试使用 卷轴 bimtap对象中的属性持有图像bitmapdata仅显示可见区域,然后使用滚动x和y移动到新区域
- 尝试使用可视区域大小的bitmapdata并使用 copypixels() 要获得正确的区域,请再次使用矩形
- 尝试使用 bitmapdata.scroll()
这里有几个片段:
卷轴:
//assuming map is BitmapData containing your large image
//100x100 is a test scroll area
var scroll:Rectangle = new Rectangle(0,0,100,100);
var bitmap:Bitmap = new Bitmap(map);
bitmap.scrollRect = scroll;
addChild(bitmap);
this.addEventListener(Event.ENTER_FRAME, update);
function update(event:Event):void{
scroll.x = mouseX;
scroll.y = mouseY;
bitmap.scrollRect = scroll;
}
复元:
var scroll:Rectangle = new Rectangle(0,0,100,100);
var scrollPoint:Point = new Point();
var map:BitmapData = new Map(0,0);
var bitmap:Bitmap = new Bitmap(new BitmapData(100,100,false));
bitmap.bitmapData.copyPixels(map,scroll,scrollPoint);
addChild(bitmap);
this.addEventListener(Event.ENTER_FRAME, update);
function update(event:Event):void{
scroll.x = mouseX;
scroll.y = mouseY;
bitmap.bitmapData.fillRect(scroll,0xFFFFFF);
bitmap.bitmapData.copyPixels(map,scroll,scrollPoint);
}
不完美,但应该给你一个主意
Hth,乔治
不隶属于 StackOverflow