CGArt-中国CGer中的绿色家园
首页 信息动态 原创排行 互动教程 资源千寻 CG人才 CGArt杂志 艺术设计 CG画廊 CG论坛 酷站欣赏 CG搜索 会员中心
Flash制作青蛙跳荷叶游戏动画
来源:闪吧 作者:smallerbird 编辑:浪漫的季节 发布时间:2007年12月07日 10:53:56

[ 1 ]  [ 2 ]  

我们主要是修改:移动的荷叶 setHeYeMove(mcHy:MovieClip, numSD:Number, numStarTime:Number, numLeftRight:Number) 和复制一批:function getSomeHy(numCountI:Number, numCountJ:Number, mcHys:MovieClip) 这个两个函数:

1) setHeYeMove主要修改的部分就是荷叶移动的状态:目前在于每组荷叶与其它荷叶是交替来回移动。我们在这里定义了一个数组:
  //随机起始的时间
  mcHys.arrMoveStarTime = [0, 48, 60, 20, 48];
  配合:
  //获得不相同的随机数
  function getNoSameRandNum(arrA:Array)
  来随机改变荷叶的移动的起始时间。来完成作到这一点。

 

2) getSomeHy主要作用就是生成一个几行几列对队列。不知读者有没有发现:如果不按鼠标,青蛙就会随着荷叶来回移动,好像就停在上面。因为我们加了初使化语句:

onEnterFrame不停的指定的:青蛙的坐标等于荷叶的坐标。


  //青蛙附上第一个荷叶
  mcPlayer.onEnterFrame = function() {
  this._x = mcHys.mcHy0_1._x;
  this._y = mcHys.mcHy0_1._y;
  };
 

四、跳上荷叶

效果及源代码下载:


效果4

要让青蛙跳上荷叶,而且要随着荷叶移动。我们只要作到:青蛙的坐标等于荷叶的坐标;然后我们还要检测青蛙是否跳上荷叶呢?这个检测代码很显然要放在青蛙移动的代码之中: playerMove()。加入:


  //检测跳上
  //
  for (var mcI in _root.mcHys) {
  if(this.hitTest(_root.mcHys[mcI])){
  //贴上
  this.onEnterFrame=function(){
  this._x=_root.mcHys[mcI]._x
  this._y=_root.mcHys[mcI]._y
  }
  break;
  }
  }


注:这里的检测效率不高,因为我们是检测所有的荷叶是否碰到青蛙,很显然,我们只要检测青蛙上一行的荷叶就可以了,这里的代码没有写出来。有兴趣的读者可以自己修改。

五、背景的移动

效果及源代码下载:

效果5

现在青蛙可以跳上荷叶,可是只能在这小范围运动,我们要让青蛙走的更远。如何移动背景呢?只要把荷叶容器mcHys的Y坐标递增,看上去青蛙就向上移动了。把: playerMove()中的this._y -= this.numMoveSd;
  修改为:
  //移动背景
  _root.mcHys._y += this.numMoveSd;

  背景移动了:
  最忘了复制一行新的荷叶
  getOneHy(3, mcHys);
  当然也不要忘了删除跳过的荷叶:(后面的版本会加上这个)

注:读者会发现:getSomeHy这个函数不见,而换成了一个:getOneHy,因为笔者发现在复制一行要比复制几行的功能更适合,这个游戏。

六、更像是跳到荷叶

效果及源代码下载:

效果6

我现在的青蛙可以跳上荷叶了,不过问题是好像不太逼真:青蛙总是落在荷叶的正中,而且从就自算青蛙落在荷叶的边上也会变到荷叶的正中,所以我们要修正它:

我们还是要修改:playerMove()这个函数:

  //检测跳上
  //
  for (var mcI in _root.mcHys) {
  if (this.hitTest(_root.mcHys[mcI])) {
  //
  var numTemPlayHeCha:Number = this._x-_root.mcHys[mcI]._x;
  //
  getOneHy(3, mcHys);
  //贴上
  this.onEnterFrame = function() {
  //移动荷叶中心_x      
  this._x = _root.mcHys[mcI]._x+numTemPlayHeCha;
  //end if  
  //移动荷叶中心_y 
  if (this.numOnHysY != _root.mcHys[mcI]._y) {
  if ((this.numOnHysY-this.numToHySd)>_root.mcHys[mcI]._y) {
  _root.mcHys._y += this.numToHySd;
  mcPlayer.numOnHysY -= this.numToHySd;
  } else {
  var temaaa:Number = Math.abs(mcPlayer.numOnHysY-_root.mcHys[mcI]._y);
  _root.mcHys._y += temaaa;
  mcPlayer.numOnHysY -= temaaa;
  }
  //end if
  }
  //end if     
  };
  break;
  }
  }

程序思路:分别处理青蛙的x坐标和y坐标:

1)青蛙落在荷叶哪一个部位,就在这停在荷叶的哪个部位。
this._x = _root.mcHys[mcI]._x+numTemPlayHeCha;
2)青蛙y坐标慢慢移动到荷叶的y坐标。为什么一定要移动到荷叶的y坐标,因为青蛙跳的距离是一定的。青蛙跳上荷叶不一定是会是最佳位置,所以要修正,不然后多跳几次,发现青蛙根本跳不到下个荷叶,不信的读者可以试一下。

七、加上开始,结束

1)到目前为止我们的青蛙还可以"漂”在水中,即使不跳到荷叶上。
2)删除跳过的荷叶(上文提到的)

效果及源代码下载:

效果7

八、增加游戏的可玩性(吃小虫)。

这个游戏大致最算做完了,只是觉得没有什么游戏性,那我们再加一个元素小虫,随机在荷叶中出现小虫,如果青蛙跳上有小虫的荷叶,就加10分。效果及源代码下载:

效果8

程序思路:

1)要在荷叶上出现小虫最简单的方法就是在mc荷叶符号,里加入一个图层,入一个mc的小虫,并命名一个名字。
2)在产生荷叶的代码中加一个随机数。来判断是否显示,如果显示就设置所产生的荷叶中的"小虫"电影符号的alpha值为100,否则为0。
3)在判断青蛙是否跳上荷叶的代码处加入一段代码:来判断当前的荷叶的小虫"电影符号的alpha值,如果是100就证明有小虫,分数加1。(分数我们可以一个_root.变量来存储)

九、添加平面,效果

效果:

最终效果

[ 1 ]  [ 2 ]  
共有评论0条
更多评论..
作者信息 详细信息
评论人:
验证码:
内容:
 
about us advertisement publish conformity service cooperate associate link site map contact us help jump to the top of page