用户名: 密码: 验证码: QQ--程序群:31736530 动画群:38836599
闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash as3.0教程>列表

as3游戏开发之打气球系列(二)

[来源:uyang.cn | 作者:uyang | 时间:2008-05-07 | 点击:  | 收藏本文  【 】]
HI,经过了昨天疯狂的理论轰炸,脑袋还清新不?其实昨天的内容很重要,只要昨天那两点理解透了,以后再制作游戏就是一些算法问题,其实做游戏不难.最难的是想法而已.今天继续,依旧是老提纲:
     1,瞄准镜的产生   (类似attachMovie在AS3中该如何表现?)
     2,飞翔的气球    (怎么飞?随机飞,随机速度又怎么表现?该如何记时?)
     3,打气球   (怎么算打中?打中后,气球爆炸怎么表现?声音呢?)
     4,给我个计数器  (计算打中的,飞走的,甚至击中概率)
     5,成与败   (怎么算胜利?怎么算失败?如何表现)
     6,完善     (结尾)

3,打气球   (怎么算打中?打中后,气球爆炸怎么表现?声音呢?)
     瞄准镜能动了,气球能飞了,速度也各具特色.那么下一步就该是打气球了,哈哈.打中不难,难的是打中后的特效表现,让我在编写的时候卡了一下.不过好消息是我会告诉你,所以你就不用卡了.继续昨天的代码
   我把鼠标点击到气球算打中目标,那么我们只需要监听气球是否被鼠标点击到就OK了.打中后,首先考虑的是,需要在舞台上移除掉当前被点击的气球,然后就是移除监听事件,所以代码为:

function shoot(e:MouseEvent):void{
 var tempBall:MovieClip = e.currentTarget as MovieClip;  
 tempBall.removeEventListener(Event.ENTER_FRAME,ballFly);
 tempBall.removeEventListener(MouseEvent.CLICK,shoot);
 tempBall.parent.removeChild(tempBall);
}

    不过我们需要等等,加这代码,因为我需要丰富的被打中的形态,还要出声音.声音先不管,我们先在做一个气球被打的样子.如图:
    点击在新窗口中浏览此图片
    我这里设置的是到第8贞Alpha为零,两头的actionscript都是stop();第2贞标签是:plays.
    所以接刚才的代码里,重新修改为:

function shoot(e:MouseEvent):void {
 var tempBall:MovieClip = e.currentTarget as MovieClip;
 tempBall.gotoAndPlay("plays");
 tempBall.addEventListener(Event.ENTER_FRAME,dieEnter);
 tempBall.removeEventListener(Event.ENTER_FRAME,ballFly);
 tempBall.removeEventListener(MouseEvent.CLICK,shoot);
}
function dieEnter(e:Event):void {
 var tempBall:MovieClip = e.currentTarget as MovieClip;
 var gravity:int = 20;
 var ymov:int = tempBall.y + gravity;
 tempBall.y = ymov;
 if (tempBall.y > stage.stageHeight) {
   tempBall.parent.removeChild(bb);
   tempBall.removeEventListener(Event.ENTER_FRAME, dieEnter);
 }
}


   可以注意到,在监听打中后,又加了个Event.ENTER_FRAME,这主要是为了丰富打中效果而做的,也就是打中后,气球一边往下掉,一边变透明.好了,加上音乐,感觉更好,随便导入一段声效.再加入以下的代码:

   var popSound:pop = new pop();
    popSound.play();
 
     pop就是在库里声音样本的Linkage名字.这样到第三步,基本就已经完成一个打气球游戏了.
源代码:



4,给我个计数器  (计算打中的,飞走的,甚至击中概率)
     从这一步开始,就需要对以前的代码进行反工修改.所谓记数器,就是知道自己打中了几个,飞走了几个。对于赢或者输会在下一步说.这里,我们需要在舞台放放置两个动态文本,大小为12,黑色字体.分别命名为:fireIn(打中),fireOut(飞走)
     每打中一个,就为fireIn加一个,飞走一个,fireOut也是.那么好,需要在程序里加以下代码
var fireInNumber:int=0;
var fireOutNumber:int=0;
//以下的加到lose function
fireOutNumber ++;
fireOut.text = fireOutNumber.toString();
//以下的加到shoot function
fireInNumber ++;
 fireIn.text = fireInNumber.toString();

    击中概率那个简单,就是相除就可以,就不说了.
源文件:



 5,成与败   (怎么算胜利?怎么算失败?如何表现)
    如何算成功?如何算失败?我们要先说说怎么算失败.我这里打算放一个血条,3格血,飞走一个,就掉一格,全部掉完,算输.当然直接算飞走3个也可以,不过丰富一点好,以后就知道怎么做了.接着说成功,那方法就多了,比如10个里,打中了一个算赢.哈哈,这样好象过于无耻了点。不过目前都是讲概念,怎么实行还是看你自己怎么编写。
   先在舞台上搞一个血条.像这样的点击在新窗口中浏览此图片
    然后在lose Function里加代码:

//我是根据飞走数量来决定血条,注意此代码需要加在fireOutNumber ++的后面.
if (fireOutNumber >= 3) {
   t.stop();
   blood.gotoAndStop((fireOutNumber+1));
   trace("YOU DIE!");
    balls.removeEventListener(Event.ENTER_FRAME,ballFly);
    balls.removeEventListener(MouseEvent.CLICK,shoot);
    removeChild(content_mc);
 } else {
   blood.gotoAndStop((fireOutNumber+1));
 }

     加上此代码后,你可以测试一下,飞走3个气球就会TARCE出YOU DIE.也表示这一步的失败做法我们算是完成了。下面说成功,我把气球的总数改为20个,只要打中5个就算赢,所以修改代码,接着根据fireInNumber的数量来决定是否成功.那么就在shoot  function里加入代码:
if(fireInNumber>=5){
   trace("YOU WIN!");
   t.stop();
 }

     这段比较简单,这样这成与败算是完成了.源代码下载:



6,完善     (结尾)
     完善,说起来简单,但是其实非常麻烦.我在制作一个项目的时候,最后阶段的调试是非常麻烦的.你可以回头看看以上的几个源代码都是有非常大的问题,封装性不够强.因为我是边写文章,边写代码.而且写起来太烦琐.但是,我觉得只要你懂的大意,就可以了.概念性大于实际操作.关于其他的打飞机,打潜水艇游戏等等,基本上都差不多,唯一的不同就是算法不同.怪物出现的方式不同.
      你知道一个程序的完善靠的是什么?是经验,有很多人老说优化问题,我个人认为,这也是一个个人经验问题,习惯问题,有良好的编程习惯,对一些数据知道什么时候监听,什么时候移除监听.因为,你要知道,有的监听不用移除也是没问题的,只不过会多占用CPU资源,这一切的解决都需要你自己的对代码研究和制作的经验.
以下是修复后完整的源代码:



ps:以后会介绍更多的游戏制作方法,不过先在这里没有把游戏完整的介绍完说声抱歉,因为还有数据显示啊,重新玩一次等等.不过别急,这个只打个底,以后讲游戏,就不再那么详细了,只会把大概意思说一下,然后直接上代码.饭总要一口一口的吃.
文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:as3.0游戏开发之打气球系列(一)
下一篇:AS3.0 下载队列类 帮助完成Flash队列下载
Tags:    
>>> 最新评论:(共有 0 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  相关文章
·ActionScript 3.0垃圾回收
·Flash上传客户端
·AS3编码转换函数
·flash as3的binding-ObjectProxy
·as3的ComboBox组件应用小问题
·小球的弹性碰撞
·小球的弹性碰撞
·小球的弹性碰撞
·ActionScript 3设计模式类图(二)
·ActionScript 3设计模式类图(一)
  热门文章
·Flash进度条的制作详细讲解(组图)
·flash幻灯片网页效果
·Flash打造简单的飘雪动画视觉特效
·Flash旋转拖尾文字效果的制作教程
·flash水影效果字
·全Flash动画网站实现的基础教学
·超酷flash光晕移动效果
·flash春雷闪电效果
·Flex 3 AdvancedDataGrid的使用(第二
·Flash制作大雪纷飞效果动画
·即拷即用的loading代码
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号