制作flash青蛙跳荷叶游戏
现在我们来做游戏中另一个主要的元素:移动的荷叶,我们先让它来回移动起来。我们在"青蛙跳动起来”的代码上加入:
1.把所有程序生成的荷叶都放在一个容器里:
var mcHys:MovieClip = _root.createEmptyMovieClip("mcHys", 999);
2.这个mc里设置一些公有属性:
//行距
mcHys.numHJ = 80;
//尺寸
mcHys.numWH = 58;
//下移速度
mcHys.numDownSd = 4;
//随机起始的时间
mcHys.arrMoveStarTime = [0, 48, 60, 20, 48];
其中:mcHys.swapDepths(mcPlayer);
目的是把荷叶容器mcHys的与mcPlayer的深度交换。因为青蛙要在荷叶的上面。
3.写入荷叶
用了两个函数:
复制一批荷叶:getSomeHy(numCount:Number, mcHys:MovieClip)
设置每个荷叶的行为:setHeYeMove(mcHy:MovieClip, numSD:Number, numStarTime:Number)
//初使化荷叶
getSomeHy(4, mcHys);
注:这些方法在后来都会修改,我们现在的目的只是把要完成的目标完成了,修改是后面的事。
//移动的荷叶############################
function setHeYeMove(mcHy:MovieClip, numSD:Number, numStarTime:Number) {
mcHy.objUpTopDown = new casUpTopDown(480);
mcHy.numSD = numSD;
mcHy.numStar = mcHy._x;
//什么时候开始
mcHy.numStarTime = numStarTime;
mcHy.onEnterFrame = function() {
if (this.numStarTime--<0) {
if (this.objUpTopDown.run() == 0) {
this.objUpTopDown.isFx = false;
}
this._x = (this.numStar+this.objUpTopDown.run()*this.numSD);
}
};
}
//荷叶容器
var mcHys:MovieClip = _root.createEmptyMovieClip("mcHys", 999);
mcHys.swapDepths(mcPlayer);
//行距
mcHys.numHJ = 80;
//尺寸
mcHys.numWH = 58;
//下移速度
mcHys.numDownSd = 4;
//随机起始的时间
mcHys.arrMoveStarTime = [0, 48, 60, 20, 48];
//复制一批
function getSomeHy(numCount:Number, mcHys:MovieClip) {
for (var numI:Number = 0; numI var mcTem:MovieClip = mcHys.attachMovie("hy", "mcHy"+numI, numI);
mcTem._y = (Stage.height-mcHys.numWH)-numI*(mcHys.numHJ+mcHys.numWH);
mcTem._width = mcTem._height=mcHys.numWH;
setHeYeMove(mcTem, 1, getNoSameRandNum(mcHys.arrMoveStarTime));
}
//end for
}
//初使化荷叶
getSomeHy(4, mcHys);
//
三、修改"来回移动的荷叶”
我们发现我们写出来的荷叶,并不是我们想要的,如里每一行只有一个荷叶的话,青蛙的选择就很少了。所以我们应该在每一行放置若干个荷叶。效果及源代码下载:
我们主要是修改:移动的荷叶 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;
};
四、跳上荷叶!
效果及源代码下载:
要让青蛙跳上荷叶,而且要随着荷叶移动。我们只要作到:青蛙的坐标等于荷叶的坐标;然后我们还要检测青蛙是否跳上荷叶呢?这个检测代码很显然要放在青蛙移动的代码之中: 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;
}
}
注:这里的检测效率不高,因为我们是检测所有的荷叶是否碰到青蛙,很显然,我们只要检测青蛙上一行的荷叶就可以了,这里的代码没有写出来。有兴趣的读者可以自己修改。
五、背景的移动
效果及源代码下载:
现在青蛙可以跳上荷叶,可是只能在这小范围运动,我们要让青蛙走的更远。如何移动背景呢?只要把荷叶容器mcHys的Y坐标递增,看上去青蛙就向上移动了。把: playerMove()中的this._y -= this.numMoveSd;
修改为:
//移动背景
_root.mcHys._y += this.numMoveSd;
背景移动了:
最忘了复制一行新的荷叶
getOneHy(3, mcHys);
当然也不要忘了删除跳过的荷叶:(后面的版本会加上这个)
注:读者会发现:getSomeHy这个函数不见,而换成了一个:getOneHy,因为笔者发现在复制一行要比复制几行的功能更适合,这个游戏。
六、更像是跳到荷叶
效果及源代码下载:
文章评论
共有 0位网翼网友发表了评论 查看完整内容