ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:64.91KB ,
资源ID:6507754      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6507754.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(D5PowerAS入门教程随机移动的敌人.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

D5PowerAS入门教程随机移动的敌人.docx

1、D5PowerAS入门教程随机移动的敌人D5POWER 个人网站 官方网站 第二篇 随机移动的敌人在上一篇教程中,我们搭建了一个简单的程序结构,并编写了程序,通过键盘的控制,让游戏场景中的一个方块根据我们的要求移动。对于一个游戏来讲,只有主角是不够的,我们需要敌人。敌人和主角拥有相同的属性:他们都有长相(外表,虽然现在只是一个方块。),有控制器进行控制。所以,我们可以从ActionObject来进行扩展,产生两个不同的分支来实现他们。我们先来构建整个程序的结构:可以看出,ActionObject是不具备“长相”这个特征的,而不管是主角或敌人,都有自己不同的样式。在上一篇的教程中,我们把黑色的方

2、框直接指定为了ActionObject类,这样扩展性显然不好。因此,我们单独建立一个具备长相特征的类,继承自ActionObject。具体的操作方法可以参考上一篇教程。注意,因为ActionObject的构造函数是有参数的,所以我们勾选匹配基类的构造函数,让FD自动帮我们生成构造函数。1. package D5Power.Objects 2. 3. import flash.display.Sprite;4. import D5Power.Controller.basicController;5. /*6. * 具备外表皮肤的ActionObject7. * author D5Power8.

3、*/9. public class FaceObject extends ActionObject10. 11. protected var _face:Sprite;12. /*13. * 14. * param ctrl 控制器15. * param face 外观16. */17. public function FaceObject(ctrl:basicController,face:Sprite) 18. 19. super(ctrl);20. _face = face;21. addChild(_face);22. 23. 24. 25. 26. FaceObject在Action

4、Object的基础上,增加了_face属性,并在构造函数中,通过addChild把_face显示了出来,这样,我们就可以给他赋予不同的外观了。接下来来实现主角类和敌人类。继承自我们刚刚写好的FaceObject类。暂时直接继承就可以了,不用写其他的代码。1. package D5Power.Objects 2. 3. import flash.display.Sprite;4. import D5Power.Controller.basicController;5. /*6. * 主角类7. * author D5Power8. */9. public class Player extends

5、 FaceObject10. 11. 12. public function Player(ctrl:basicController, face:Sprite) 13. 14. super(ctrl, face);15. 16. 17. 18. 19. 20. /-1. package D5Power.Objects 2. 3. import flash.display.Sprite;4. import D5Power.Controller.basicController;5. /*6. * 敌人类7. * author D5Power8. */9. public class Monster

6、extends FaceObject10. 11. 12. public function Monster(ctrl:basicController, face:Sprite) 13. 14. super(ctrl, face);15. 16. 17. 18. 19. 20. 既然结构改变了,那我们在上一篇教程中使用的黑色方块就没必要再定义为ActionObject了,我们现在只把它作为皮肤使用,在库中右键选择,在弹出菜单中选择属性,把类名改为Skin1。由于我们并没有编写Skin1,FLASH会帮我们自动生成一个Skin1类,以后就可以通过new Skin1()来进行声明了。用同样的办法,我

7、们再重新绘制一个红色的方块,作为敌人的皮肤。定义类名为Skin2而主场景中,我们原来的代码就需要做一下修改了:1. .2. var obj:Player = new Player(ctrl,new Skin1();3. .当然,也可以试一下用敌人的皮肤: 1. .2. var obj:Player = new Player(ctrl,new Skin2();3. .这样,大体的结构就已经建好了。接下来。我们来针对问题进行不同的处理。首先,既然敌人和主角都可以移动。那么,我们就有必要增加限制。因为它们势必只能在允许的范围内移动。就我们目前的需求来看,他们只能在屏幕的区域范围内移动(因为我们暂时没

8、有任何障碍物)。因此,在移动前,我们要检查它的下一个目标点是否可以移动。很显然,这个检查是同时针对敌人和主角的,因此,我们在ActionObject上进行扩展,修改ActionObject的代码,增加nextCanMove方法:1. /*2. * 下一目标点是否可以移动3. */4. public function get nextCanMove():Boolean5. 6. / 下一X位置7. var nx:uint = 0;8. / 下一Y位置9. var ny:uint = 0;10. / 根据移动方向进行处理,计算出下一目标点位置11. switch(walkDirection)12.

9、 13. case UP:14. ny = y-speed;15. break;16. case DOWN:17. ny = y+speed;18. break;19. case LEFT:20. nx = x-speed;21. break;22. case RIGHT:23. nx = x+speed;24. break;25. default:break;26. 27. 28. / 如果下一目标点超出屏幕范围,则不能移动29. if (nx Global.stage.stageWidth - width | nx Global.stage.stageHeight - height | n

10、y 1000/_fps)32. 33. _lastAction = date;34. controller.AutoRun();35. super.Do();36. 37. 38. 39. 40. 41. 我们新增加了两个属性:_fps和_lastAction。_fps是运行的频率,也就是每秒内,所运行的次数,而_lastAction则是最后一次运行的日期对象。来看一下实现按频率运行的方法。每次Do函数运行的时候,会取一个新的Date对象,我们可以通过它的.time属性,来获取本次运行的毫秒时间(一个时间戳),把这个毫秒时间和上一次运行的毫秒时间做对比,如果超出了_fps所规定的运行时间,则运

11、行程序,并把当前日期设置为最后一次运行的日期。在这里,我们调用可控制器的AutoRun方法。这样,所有的前期准备都准备完了,我们回到主场景Main来实现实际的功能。我们生成一个敌人,并把他放入列表:1. var ctrl2:MonsterControler = new MonsterControler();2. var monster:Monster = new Monster(ctrl2, new Skin2();3. scene.addObject(monster);这时,运行程序,我们可以看到场景里有了一红一黑两个方块,其中红色的将在场景内的边缘随机游荡。不过,主角和敌人在同一地点出现,

12、这很难看的清楚,所以,我们可以进一步修改代码。把主角放到200,200的位置,而利用for循环,生成3个敌人,并随机放到场景中500*300这个范围内: 1. var scene:gameScene = new gameScene(stage); / 声明游戏舞台2. var ctrl:KeyController = new KeyController(); / 定义控制器3. var obj:Player = new Player(ctrl, new Skin1();4. obj.x = 200;5. obj.y = 200;6. scene.addObject(obj);/ 将对象添加到舞台中7. 8. for (var i:uint = 0; i 3; i+)9. 10. var ctrl2:MonsterControler = new MonsterControler();11. var monster:Monster = new Monster(ctrl2, new Skin2();12. monster.x = int(Math.random() * 500);13. monster.y = int(Math.random() * 300);14. scene.addObject(monster);15.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1