以文本方式查看主题 - ╋艺 镇╋ (http://zyzsky.com/bbs/index.asp) -- ┣◇FLASH交流 (http://zyzsky.com/bbs/list.asp?boardid=5) ---- 飞机游戏(彩京类型飞天站记)源码教程 (http://zyzsky.com/bbs/dispbbs.asp?boardid=5&id=1698) |
-- 作者:卡西莫咄 -- 发布时间:2008/6/24 11:51:06 -- 飞机游戏(彩京类型飞天站记)源码教程 这次讨论的是关于飞机游戏(彩京类型)的,结合我做的《飞天战记》来做实例。 我这个游戏也藏考了别人的DD,比如,boss的散弹发射,请看OX的帖子(自己找!)。 建议大家在看源码时,最好要看懂,不要抱着偷别人的过来用这种心态,当然,一些好看的动画可以直接截取,不反对的,呵呵。 有不懂的,就问其他高手把,这只是我个人的思路,很复杂的东西。。。
一.画面 终于讲到精彩部分拉!这可是精华!之所以彩京会那么受欢迎,是它在操作中加入了很多人性化的东西,我们仔细把它挖出来! 二.操作(重点) 1.选人 除了常规的,它还有个选隐藏人物的选择框,我还记得某代的选择方法是“上3下3上
这里要提到几个相关的东西: 1)出现 2) 人物的常规控制 a.移动 b. 子弹攻击(一般攻击) c. 积气 d.放雷 3)死亡 onClipEvent (load) {
xunhuan=0 function cyzd() {//子弹的设置 _root.attachMovie("drzd2", "zd"+_root.zd, _root.zd); _root["zd"+_root.zd].n = _parent.n; _root.zd++; xunhuan ++ } _parent.life1 = 200;//生命 _parent._y = 0; _parent._x = random(300)+70;//y轴随即出现 _parent.speed = 5;//速度 pp = setInterval(cyzd, 1500);//1500毫秒出现循环 } onClipEvent (enterFrame) { if (_parent._y<150) {//飞行路线 _parent._y = _parent._y+_parent.speed; } if (_parent._y>=150) { pp(); } if((_root.ming < 0) || (_root.over == 1)){ //当大眼妖血<0,或者游戏判断出主角全部死亡时,删除大眼妖 clearInterval(pp); _parent.removeMovieClip(); } if (xunhuan > 3) {//放3次子弹,就飞走 _parent._y = _parent._y+_parent.speed; clearInterval(pp); if(_parent._y>600){ _parent.removeMovieClip(); } } if (this.hitTest((_root.rw.boom)||(_root.boom))) {//碰上雷时 _parent.gotoAndPlay(10); clearInterval(pp); } } onClipEvent (enterFrame) { for (bbb=0; bbb<20; bbb++) {//检测子弹 if (this.hitTest("_root.zidan"+(_root.i-bbb))) { removeMovieClip("_root.zidan"+(_root.i-bbb)); _parent.life1 -= _root.weili; if (_parent.life1<=0) {//血<0,就死了 _parent.gotoAndPlay(10); clearInterval(pp); } else { _parent.gotoAndPlay(2); } } } if (this.hitTest(_root.daodan)) {//碰上导弹 _parent.life1 -= _root.weili1; if (_parent.life1<=0) { _parent.gotoAndPlay(10); clearInterval(pp); } else { _parent.gotoAndPlay(2); } } if (this.hitTest(_root.bsj)) {//碰上绝技 _parent.life1 -= _root.weili2; if (_parent.life1<=0) { _parent.gotoAndPlay(10); clearInterval(pp); } else { _parent.gotoAndPlay(2); } } } |
-- 作者:卡西莫咄 -- 发布时间:2008/6/24 11:51:36 -- 源码
游戏中的MC文件都在库里的MC文件夹下,地图是:场景011-场景013;人物控制是:加载×××(角色的名字),敌人是:×××(敌人的名字),角色的子弹、积气、绝技、雷,都对应写好了:××子弹、××积气、××绝技、××雷。
onClipEvent (load) {
_root.bao = 0;//雷的数目 _parent.power = 0;//子弹检测时间 _parent._x = 200; _parent._y = 600; _parent.saoba._alpha = 20;//一出来角色的透明度 _parent.baohu._alpha = 100;//一出来时的无敌光环 _root.lv = 1;//子弹威力等级 speed = 10;//扫把女的移动速度 _root.i = 1001;//在游戏中的深度 function fashe() {//加载子弹 _root.attachMovie(zd, "zidan"+_root.i, _root.i); _root["zidan"+_root.i]._x = _root.rw._x+14; _root["zidan"+_root.i]._y = _root.rw._y-15; _root.i++; if (_root.i>1013) { _root.i = 1001; } } } onClipEvent (enterFrame) {//子弹威力的检测 if (_root.lv == 1) { zd = "zidan21"; } else if (_root.lv == 2) { zd = "zidan22"; } else if (_root.lv == 3) { zd = "zidan23"; } else if (_root.lv>=4) { _root.lv = 4; zd = "zidan24"; } if (_parent.saoba._alpha<70) {//一出来的那段不能控制飞行 _parent.saoba._alpha = _parent.saoba._alpha+5; _parent._y = _parent._y-15; } if (_parent.saoba._alpha>=70) {//常规的移动控制 if (Key.isDown(65) && (_parent._x>-5)) { _parent._x -= speed; _parent.saoba.gotoAndStop(2); } else if (Key.isDown(68) && (_parent._x<415)) { _parent._x += speed; _parent.saoba.gotoAndStop(3); } if (Key.isDown(87) && (_parent._y>30)) { _parent._y -= speed; } else if (Key.isDown(83) && (_parent._y<520)) { _parent._y += speed; } if (Key.isDown(74)) {//开枪(一般攻击) _parent.power++; if (_parent.power<6) { fashe(); } if (_parent.power<10) {//积气 _parent.attachMovie("yunqi", "yunqi", 2); _root.rw.yunqi._x = 20; _root.rw.yunqi._y = 33; } else if (_parent.power == 90) {//释放绝招 _parent.attachMovie("yunqi02", "yunqi02", 3); _parent.yunqi.removeMovieClip(); } } } if (_root.bao == 0) {//放雷时,角色处于无敌 _parent.baohu._alpha--; } if (_parent.baohu._alpha<=0) { _parent.saoba._alpha = 100; if (Key.isDown(75)) { if (_root.baoxian>0) { _root.bao = 1; _parent.baohu._alpha = 100; _parent.boom.gotoAndPlay(2); } } } } onClipEvent (keyUp) {//释放按键 if (Key.getCode() == 74) {//检测是否积气完成 if (_parent.power>=90) { _root.attachMovie("bsj02", "bsj", 1021); _root.bsj._x = _root.rw._x+6; _root.bsj._y = _root.rw._y; _parent.power = 0; } _parent.yunqi.removeMovieClip(); _parent.yunqi02.removeMovieClip(); _parent.power = 0; } if (Key.getCode() == 65) {//角色在左右飞行时的倾侧 _parent.saoba.gotoAndStop(1); } if (Key.getCode() == 68) { _parent.saoba.gotoAndStop(1); } } 很乱的东西。。。。重复了,自己优 化
有了主角没反派可不行,敌人也分很多种,傻瓜型、肉血型等等。这里就说2种: a. 傻瓜型 就是刚出来的小兵,只发一个子弹,就走人的。 例子:《飞天站记》中用的大眼妖
onClipEvent (load) {
_parent._y = 0; _parent._x = random(350)+50;//y轴上随即出现 _parent.speed = 6;//速度 _root.attachMovie("drzd1", "zd"+_root.zd, _root.zd);//发射子弹 _root["zd"+_root.zd].n = _parent.n; _root.zd++; } onClipEvent (enterFrame) { _parent._y = _parent._y+_parent.speed; if (_parent._y>600) { _parent.removeMovieClip(); } if ((_root.ming < 0) || (_root.over == 1)) {//当大眼妖血<0,或者游戏判断出主角全部死亡时,删除大眼妖 _root["zd"+_root.zd].removeMovieClip(); _parent.removeMovieClip(); } } b. 例子:苍蝇怪(打了会出子弹威力) |
-- 作者:mazecity -- 发布时间:2008/6/24 15:41:26 -- 要是有图就好了 |