首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

塔防使用之ByteArray的使用

2012-08-26 
塔防应用之ByteArray的使用这段时间一直在开发塔防游戏,说的不好听点就是在山寨一款塔防游戏——Kingdom Rus

塔防应用之ByteArray的使用

这段时间一直在开发塔防游戏,说的不好听点就是在山寨一款塔防游戏——Kingdom Rush(皇家守卫军);博主觉得这款游戏的可玩性还是非常高的,画面和关卡的设计都非常的精美和吸引人,希望各位博友有时间可以去试玩和体验。

当然,博主在开发中需要用到塔防的地图编辑器,主要就是写入地图的障碍信息,用于敌人的寻路。
简单的介绍了地编的一些需求和ByteArray的一些简单介绍,希望能给施主带来帮助。
原文链接:http://www.xplabs.me/xp/?p=307?作者:韩 贤明? ?发布:2012-04-07 11:10



正文如下:

这段时间一直在开发塔防游戏,说的不好听点就是在山寨一款塔防游戏——Kingdom Rush(皇家守卫军);博主觉得这款游戏的可玩性还是非常高的,画面和关卡的设计都非常的精美和吸引人,希望各位博友有时间可以去试玩和体验。

当然,博主在开发中需要用到塔防的地图编辑器,主要就是写入地图的障碍信息,用于敌人的寻路。
首先来分析一下地图编辑器的需求把:
? ?? ?? ?1.可以导入地图的背景图片;
? ?? ?? ?2.可以进行障碍点的编辑;
? ?? ?? ?3.可以在地图编辑器中摆放建筑;
? ?? ?? ?5.点击格子自动复制格子的坐标到剪切板中;
? ?? ?? ?4.可以导出编辑后的地图文件;
导出的地图文件包括如下的信息:
? ?? ?? ?1.地图的背景图片资源号;
? ?? ?? ?2.地图的横向格子数和纵向格子数;
? ?? ?? ?3.地图的障碍数据;
? ?? ?? ?4.地图中摆放的建筑信息;

的确,在明确了需求之后,开发地图编辑器就变得简单许多。现在的这个版本的地编还是很简单的,等有新的需求在后在进行新的功能开发。

先来看下地图编辑齐的界面效果把,如下图:

塔防使用之ByteArray的使用
?
上图是地图编辑之后的效果,红色的代表可以通行的区域,其他没有颜色的格子就是障碍不可通行的区域;(ps:不知博友看出来没,图片资源都是从皇家守卫里面抠出来的,仅限个人用途。喃唔哦弥陀佛,施主,贫僧只是借用一二,善哉,善哉!)


YEAH!! so cool!!

编辑之后就是需要导出地图数据了。在这里我用到了ByteArray,所有的地图数据都写入ByteArray,然后保存为.map文件,当然后缀是可以自己随便命名的,随你喜好就行。

  1. /**
  2. * 导出地图文件.map
  3. */
  4. private?function?export():void
  5. {

  6. ? ? //创建ByteArray的实例
  7. ? ? var bytes:ByteArray = new ByteArray();
  8. ? ? //写入地图的资源号
  9. ? ? bytes.writeShort(Globals.mapId);
  10. ? ? //写入横向的格子数和纵向的格子数
  11. ? ? bytes.writeShort(Globals.gridLayer.CW);
  12. ? ? bytes.writeShort(Globals.gridLayer.CH);
  13. ? ? var gridData:Vector.<Point> = Globals.gridLayer.exportData;
  14. ? ? var len:int = gridData.length;
  15. ? ? //写入网格障碍点的个数长度
  16. ? ? bytes.writeShort(len);
  17. ? ? //写入网格障碍数据
  18. ? ? for (var i:int = 0; i < len; i++)
  19. ? ? {
  20. ? ?? ???bytes.writeShort(gridData[i].x);
  21. ? ?? ???bytes.writeShort(gridData[i].y);
  22. ? ? }
  23. ? ? var buildData:Vector.<BuildNode> = Globals.buildLayer.exportData;
  24. ? ? len = buildData.length;
  25. ? ? //写入建筑列表的长度
  26. ? ? bytes.writeShort(len);
  27. ? ? //写入建筑的信息面包括建筑的Id,建筑的格子坐标
  28. ? ? for (i = 0; i < len; i++)
  29. ? ? {
  30. ? ?? ???bytes.writeUTF(buildData[i].id);
  31. ? ?? ???bytes.writeShort(buildData[i].cellX);
  32. ? ?? ???bytes.writeShort(buildData[i].cellY);
  33. ? ? }
  34. ? ? //使用 deflate 压缩算法压缩字节数组。压缩整个字节数组。
  35. ? ? bytes.deflate();
  36. ? ? _importFile.save(bytes, "6001.map");
  37. }
复制代码

经过上述代码之后,会把地图的所有数据写入到ByteArray中,并且进行了压缩,这减少了ByteArray的体积;当然在实际用当中必须要使用解压缩算法才能进行使用ByteArray中的数据,可调用ByteArray中的inflate()。

这里就说说ByteArray写入数据几个常用的方法;


writeBoolean?写入布尔值。根据 value 参数写入单个字节。如果为 true,则写入 1,如果为 false,则写入 0。
如果我们只需要写入布尔值,则可以调用writeBoolean(true);

writeByte?在字节流中写入一个字节。使用参数的低 8 位,忽略高 24 位。其写入的值范围是 -128 和 127 之间的整数。

writeBytes?将指定字节数组 ByteArray(起始偏移量为 offset,从零开始的索引)中包含 length 个字节的字节序列写入字节流。如果你想要写入另外一个ByteArray的实例,则可以调用此方法,将新的ByteArray写入到已有的字节数组中。

writeDouble?在字节流中写入一个 IEEE 754 双精度(64 位)浮点数。
可以写入一个Number类型的数字,IEEE双精度格式具有53位有效数字精度,并总共占用64位。

writeFloat?在字节流中写入一个 IEEE 754 单精度(32 位)浮点数。
可以写入一个Number类型的数字,IEEE单精度格式具有24位有效数字,并总共占用32 位。

writeInt?在字节流中写入一个带符号的 32 位整数。
可写入一个int类型的整数,int 类表示的值的范围是:-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)。

writeShort?在字节流中写入一个 16 位整数。使用参数的低 16 位忽略高 16 位;其写入的值范围是是从 -32768 到 32767。

writeUnsignedInt?在字节流中写入一个无符号的 32 位整数。uint 类表示的值的范围介于 0 到 4,294,967,295 (2^32-1) 之间。

writeUTF?将 UTF-8 字符串写入字节流。先写入以字节表示的 UTF-8 字符串长度(作为 16 位整数),然后写入表示字符串字符的字节。 可以写入一串字符串,在写入时有长度的前缀,其长度范围在0到65535;

writeUTFBytes?将 UTF-8 字符串写入字节流。类似于 writeUTF() 方法,但 writeUTFBytes() 不使用 16 位长度的词为字符串添加前缀。


当然了,有写入的方法指定是有读取的方法,是和写入的方法一一对应的,详情可以查看API。

简单的介绍了ByteArray的一些方法,希望能给各位带来帮助,能够对ByteArray有一个初步的了解。

塔防的地图编辑器已经告一段落,后面当然是把编辑好的地图文件导入到游戏中去了。

热点排行