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

地图编辑器中最重要的性能问题出现在编辑区域显示上。编辑的地图可能超过 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的值渲染移行或者一列单元格的方式,需要将显示部分全部重新渲染。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值