1、先完成的当然就是青蛙的跳动了,因为我们是以俯视的的角度,所以高低的状态就是尺寸的大小,移动就是y坐标的减。效果1代码及相关注释:/游戏的最大深度,后面会用的,要设一下最大的尝试,因为我们用到一个鼠标拖动。var numMaxDepth:Number = 1000;/跳动的过程# /青蛙mc名称 var mcPlayer:MovieClip;/移动 function playerMove() /这是自定义的一个从初使值到最高值,再以同样的增量回到初值的类,要结合onEnterFrame循环来移动。/new casUpTopDown(10) 移动次数 mcPlayer.objUpTopDown =
2、 new casUpTopDown(10);/速度 mcPlayer.numSD = 10;/什么时候开始 mcPlayer.numStar = 100;/青蛙移动的速度 mcPlayer.numMoveSd=4 /循环来移动 mcPlayer.onEnterFrame = function() if (this.objUpTopDown.run() != 0) this._xscale = this._yscale=(this.numStar+this.objUpTopDown.run()*this.numSD);this._y-=this.numMoveSd else /释放资源 dele
3、te (this.onEnterFrame);delete (this.objUpTopDown);delete (this.numSD);delete (this.numStar);delete (this.numMoveSd); ;/ /鼠标# /mouseStyle, 鼠标样式 _root.attachMovie(mouse, mouseStyle, numMaxDepth);var objMouse:Object = new Object();/ onMouseDown、onMouseMove、onMouseUp 和 onMouseWheel objMouse.onMouseDown
4、= function() /trace(按下);objMouse.onMouseMove = function() 移动_root.mouseStyle._x = _xmouse;_root.mouseStyle._y = _ymouse;objMouse.onMouseUp = function() 松开playerMove();Mouse.hide();Mouse.addListener(objMouse);casUpTopDown.as class casUpTopDown var numV:Number = 0;/最大次数 var numMax:Number;var numFx:Num
5、ber = 1;/是否反方向 var isFx:Boolean = false;function casUpTopDown(numMax:Number) this.numMax=numMax function run() if (numV+1 numV+;文章来自: Flash家园(www.flash-) 详文参考:http:/www.flash-【Flash游戏制作教程:青蛙跳荷叶(3)概要: 这个两个函数: 1) setHeYeMove主要修改的部分就是荷叶移动的状态:目前在于每组荷叶与其它荷叶是交替来回移动。我们在这里定义了一个数组: /随机起始的时间 mcHys.arrMoveStar
6、Time = 0, 48, 60, 20, 48; 配合: /获得不相同的随机数 function getNoSameRandNum(a.】效果3我们主要是修改:移动的荷叶 setHeYeMove(mcHy:MovieClip, numSD:Number, numStarTime:Number, numLeftRight:Number) 和复制一批:function getSomeHy(numCountI:Number, numCountJ:Number, mcHys:MovieClip) 这个两个函数:1) setHeYeMove主要修改的部分就是荷叶移动的状态:/随机起始的时间mcHys.
7、arrMoveStarTime = 0, 48, 60, 20, 48;配合:/获得不相同的随机数function getNoSameRandNum(arrA:Array)来随机改变荷叶的移动的起始时间。来完成作到这一点。2) getSomeHy主要作用就是生成一个几行几列对队列。不知读者有没有发现:如果不按鼠标,青蛙就会随着荷叶来回移动,好像就停在上面。因为我们加了初使化语句:onEnterFrame不停的指定的:青蛙的坐标等于荷叶的坐标。/青蛙附上第一个荷叶 this._x = mcHys.mcHy0_1._x;this._y = mcHys.mcHy0_1._y;四、跳上荷叶效果及源代码
8、下载:效果4要让青蛙跳上荷叶,而且要随着荷叶移动。我们只要作到:青蛙的坐标等于荷叶的坐标;然后我们还要检测青蛙是否跳上荷叶呢?这个检测代码很显然要放在青蛙移动的代码之中: playerMove()。加入:/检测跳上 for (var mcI in _root.mcHys) if(this.hitTest(_root.mcHysmcI) /贴上 this.onEnterFrame=function() this._x=_root.mcHysmcI._x this._y=_root.mcHysmcI._y break;注:这里的检测效率不高,因为我们是检测所有的荷叶是否碰到青蛙,很显然,我们只要检
9、测青蛙上一行的荷叶就可以了,这里的代码没有写出来。有兴趣的读者可以自己修改。五、背景的移动 效果5现在青蛙可以跳上荷叶,可是只能在这小范围运动,我们要让青蛙走的更远。如何移动背景呢?只要把荷叶容器mcHys的Y坐标递增,看上去青蛙就向上移动了。把: playerMove()中的this._y -= this.numMoveSd;修改为:/移动背景_root.mcHys._y += this.numMoveSd;背景移动了:最忘了复制一行新的荷叶getOneHy(3, mcHys);当然也不要忘了删除跳过的荷叶:(后面的版本会加上这个)读者会发现:getSomeHy这个函数不见,而换成了一个:g
10、etOneHy,因为笔者发现在复制一行要比复制几行的功能更适合,这个游戏。六、更像是跳到荷叶效果6我现在的青蛙可以跳上荷叶了,不过问题是好像不太逼真:青蛙总是落在荷叶的正中,而且从就自算青蛙落在荷叶的边上也会变到荷叶的正中,所以我们要修正它:青蛙跳荷叶(4)概要:cHys); /贴上 this.onEnterFrame = function() /移动荷叶中心_x this._x = _root.mcHysmcI._x+numTemPlayHeCha; /end if /移动荷叶中心_y if (this.numOnHysY != _root.mcHysmcI._y) if (this.num
11、OnHysY-this.numToHySd)_root.mcHysmcI._y) _root.mcHy.】我们还是要修改:playerMove()这个函数:if (this.hitTest(_root.mcHysmcI) var numTemPlayHeCha:Number = this._x-_root.mcHysmcI._x;this.onEnterFrame = function() /移动荷叶中心_x this._x = _root.mcHysmcI._x+numTemPlayHeCha;/end if /移动荷叶中心_y if (this.numOnHysY != _root.mcH
12、ysmcI._y) if (this.numOnHysY-this.numToHySd)_root.mcHysmcI._y) _root.mcHys._y += this.numToHySd;mcPlayer.numOnHysY -= this.numToHySd;var temaaa:Number = Math.abs(mcPlayer.numOnHysY-_root.mcHysmcI._y);_root.mcHys._y += temaaa;mcPlayer.numOnHysY -= temaaa;程序思路:分别处理青蛙的x坐标和y坐标:1)青蛙落在荷叶哪一个部位,就在这停在荷叶的哪个部位
13、。2)青蛙y坐标慢慢移动到荷叶的y坐标。为什么一定要移动到荷叶的y坐标,因为青蛙跳的距离是一定的。青蛙跳上荷叶不一定是会是最佳位置,所以要修正,不然后多跳几七、加上开始,结束 1)到目前为止我们的青蛙还可以漂”在水中,即使不跳到荷叶上。2)删除跳过的荷叶(上文提到的) 效果7这个游戏大致最算做完了,只是觉得没有什么游戏性,那我们再加一个元素小虫,随机在荷叶中出现小虫,如果青蛙跳上有小虫的荷叶,就加10分。效果81)要在荷叶上出现小虫最简单的方法就是在mc荷叶符号,里加入一个图层,入一个mc的小虫,并命名一个名字。2)在产生荷叶的代码中加一个随机数。来判断是否显示,如果显示就设置所产生的荷叶中的小虫电影符号的alpha值为100,否则为0。3)在判断青蛙是否跳上荷叶的代码处加入一段代码:来判断当前的荷叶的小虫电影符号的alpha值,如果是100就证明有小虫,分数加1。(分数我们可以一个_root.变量来存储)九、添加平面,效果效果:最终效果