我有一个带有大栅格地图的游戏

现在我们正在使用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,乔治

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top