论坛首页 编程语言技术论坛

地图编辑器几种实现的总结

浏览 3787 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-03-04  

地图编辑器中最重要的性能问题出现在编辑区域显示上。编辑的地图可能超过 AS3 BitmapData 支持的30000X30000,并且需要支持多层、选取、复制、粘贴等功能。所以在显示上肯定需要采取某种手段节约性能。

 

先介绍一下地图的基本信息:地图是由许多个 Tile 组成的,地图编辑器就是将资源的 Tile 粘贴到地图中,并由编辑器将相应资源显示在相应位置。

 

以下是我惨痛的试错经历:

 

  1. 采用最原始的方式,每个单元格一个 Sprite。 Sprite 的数目与map 数目相同。 Sprite 内部分成多层,包括画边框、显示选取区域、显示单元格类型等,使用Shape实现。
    优点:可以超过 BitmapData 的大小限制
    缺点:性能非常差,但层100 X 100 就已经很卡了。随着数目的增大,很可能造成程序崩溃。
  2. 参考之前一个js项目的方式,格子仍然使用 Sprite, 但只生成屏幕能显示的部分。当某个各自移动到屏幕外的时候,则立即移动到屏幕的另一侧,并渲染成新的内容,等待进入屏幕。这种方式我称为 Flow,有点类似传送带的运作方式。
    优点:比上一种方式性能有所提高,就算格子数目很大也不会崩溃。每次只需要渲染一行或者一列单元格的内容,进一步节省资源。
    缺点:虽然不至于崩溃,性能依然很差。
  3. 使用 BitmapData 实现,是目前性能最好的实现方式。在一个比屏幕略大的 BitmapData 上操作像素,当滚动条滚动的时候会自动拷贝新的像素到 BitmapData 并移动这块 BitmapData,使得相对位置适中保持在与屏幕同步。
    优点:性能无与伦比
    缺点:如此一来只能以像素级别操作,而不能使用单元格级别渲染
  4. 目前使用的方式,将第二步的 Sprite 变成非现实对象,将要显示的内容拷贝到整块地 BitmapData之上。以此来提高性能并支持以格为单位的渲染。
    优点:支持格级别渲染,如此渲染的次数实际上比方法3还要少得多
    缺点:不能兼顾方法2的值渲染移行或者一列单元格的方式,需要将显示部分全部重新渲染。

目前就先“错”到这里,经过这个小程序的开发,深刻理解到现实对象实际上是稀缺资源,不可以滥用。

   发表时间:2010-03-08  
如果能给个例子说明一下  那就好了
0 请登录后投票
   发表时间:2010-04-02  
有没有实际的例子?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics