




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
D5POWER 个人网站 官方网站 前篇勘误:在Monster.as中,第44行对计算频率进行控制时,if (date.time-_lastAction.time _fps/1000)应为if (date.time-_lastAction.time 1000/_fps)。感谢各位兄弟的提示!第六篇 设置地图在上一篇教程中。我们对游戏进行了美化,同时加入了简单的碰撞检测。在本篇中,我们将设置地图,先来看一下我们预期的效果:像上图这样,如果像我们原来那样通过for循环去生成地图,那基本上写if和else就可以把我们累死了。我们需要寻找规律,来达到批量处理的目的。从上图我们可以看出,所有的游戏对象都是比较整齐的摆放的。摆放的间距也基本上与游戏对象的宽度成比例。如果我们把可以通过的位置以0来表示,不能通过的位置以1来表示,那么,可以得到下图:这让你想到了什么吗?是的,是数组,我们可以用数组来标识地图:1. private var mapconfig:Array = 2. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,3. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,4. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,5. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,6. 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,7. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,8. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,9. 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,10. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 12. ;在上面这个数组中,mapconfigline记录了第line行的全部地图元素,例如,当line为0的时候,也就是mapconfig0的元素“0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0”,可以看出,在这一行中,全部都是空位置。而当line为1的时候,mapconfig1的元素“0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0”告诉我们,中间有6个元素的位置是障碍物,无法通过。同样的,我们可以用2来表示敌人出现的位置,用3来表示自己的坦克出现的位置,于是,上面的数组就变成了现在这样 1. private var mapconfig:Array = 2. 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,3. 0, 2, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,4. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,5. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,6. 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,7. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,8. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,9. 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,10. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11. 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0 12. ;可以看出,在第一行的倒数第三个位置,出现了一个敌人,在第二行的第二个位置,出现了一个敌人,而自己则出现在最后一行的第五个元素。如果你喜欢用y来表示行,用x来表示列的话,那么第y行第x列的地图元素数据应该为mapconfigyx。好了,下面让我们来用程序实现对这个地图数据的解析。我们新建一个类,继承自gameScene,暂时定义为D5Scene吧,当然,如果你喜欢其他的名字,可以自己定义:)在这个类里,我们声明一个用来保存地图数据的变量 1. /*2. * 地图数据3. */4. protected var _mapData:Array;还有一个解析方法,我们需要对_mapData进行循环解析,把其中的数字转换成可以通过的位置,或者障碍物,或者敌人,或者我们自己的角色。 1. /*2. * 配置地图3. * 4. * param arr 地图数据5. */6. public function setup(arr:Array):void7. 8. _mapData = arr;9. if (arr0 = null | arr00=null) return;10. 11. var y:uint = 0;12. var x:uint;13. 14. for each(var line:Array in arr)15. 16. x = 0;17. for each(var data:uint in line)18. 19. if (data != 0)20. 21. 22. 23. x+;24. 25. y+;26. 27. 我们需要为setup传递入一个参数arr,即地图的配置文件,而接下来,arr应该是一个2维数组,也就是必须有arryx这样的结构。因此arr0和arr00都不应该为空,否则就是不符合格式要求的数据,程序将不予以解析。所以,我们在这里做了一个格式判断:if (arr0 = null | arr00=null) return;。而接下来,则对数组中的全部数据进行了循环解析。如果发现data不为0,也就是不可通过的位置,则进行相关的处理。到这里,我们已经可以分析到数组中的全部元素数据了,但是,我们现在得到的是0,1,2,3这样的数字,而不是最终的游戏对象。所以,我们需要有一个函数对这些数字来进行翻译: 1. /*2. * 通过数字ID获取对应的元素3. * 4. * param id 地图数字5. * return gameObject6. */7. protected function getObjById(id:uint):gameObject8. 9. var result:gameObject;10. switch(id)11. 12. case 1:13. result = new Stone(new stuff();14. result.part = 1;15. break;16. case 2:17. result = new Monster(new MonsterControler(), new Skin2();18. result.part = 2;19. break;20. case 3:21. result = new Player(new KeyController(), new Skin1();22. result.part = 3;23. break;24. 25. return result;26. 代码都是我们熟悉的,只是根据不同的ID进行了区分而已,不再过多的描述。这样,我们可以在刚才的setup函数中,if (data != 0)后面做文章了,来看一下完整的setup代码: 1. /*2. * 配置地图3. * 4. * param arr 地图数据5. */6. public function setup(arr:Array):void7. 8. _mapData = arr;9. if (arr0 = null | arr00=null) return;10. 11. var y:uint = 0;12. var x:uint;13. 14. var obj:gameObject;15. for each(var line:Array in arr)16. 17. x = 0;18. for each(var data:uint in line)19. 20. if (data != 0)21. 22. obj = getObjById(data);23. if (obj != null)24. 25. addObject(obj);26. obj.x = obj.width * x;27. obj.y = obj.height * y;28. 29. 30. x+;31. 32. y+;33. 34. 这里,我们认为所有的游戏对象均使用了相同的规格,因此,可以根据他们在地图元素中的下标来计算其在场景中的坐标。最后,对游戏的主入口函数做出修改: 1. private var mapconfig:Array = 2. 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,3. 0, 2, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,4. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,5. 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0,6. 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,7. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,8. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,9. 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,10. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11. 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0 12. ;13. public function Main() 14. 15. var scene:D5Scene = new D5Scene(stage); / 声明游戏舞台16. scene.setup(mapconfig);17. 18. 19. / 生成基地20. var base:Base = new Base(new basicController(),new Skin_base();21. base.x = (stage.stageWidth-base.width)/2;22. base.y = stage.stageHeight-base.height;23. Global.base = base;24. scene.addObject(base);25. 26. 27. / 显示游戏舞台28. addChild(sc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 十七课长城课件
- 轻黏土荷花课件
- 2025版纺织品行业技术交流与合作合同
- 2025版大型水库承包经营权转让合同书
- 二零二五年度城市绿化工程材料供应合同
- 2025版航空航天零部件加工场地租赁及国际市场拓展协议
- 二零二五年度历史文化保护拆迁补偿协议书
- 2025版住宅小区零星维修施工服务协议
- 2025版环保污水处理设备安装施工合同下载
- 2025版教育建筑建筑工程规划设计合同
- 仲裁证人出庭作证申请书
- 《普通高中职业规划教育现状的调研探析报告》7800字(论文)
- 甲状腺基本解剖培训课件
- 光伏区围栏施工方案
- 2025年辽宁沈阳地铁集团有限公司招聘笔试参考题库含答案解析
- GB/T 30843.2-20241 kV以上不超过35 kV的通用变频调速设备第2部分:试验方法
- 《物联网技术与应用》课件
- 自来水厂改建工程施工组织设计方案
- 2025年中国移动辽宁公司招聘笔试参考题库含答案解析
- 2025年夫妻离婚协议书模板
- 网络安全漏洞修复
评论
0/150
提交评论