flash 植物大战僵尸制作
植物大战僵给了我们很好的视觉和感觉上的享受。你得保护你的房子以免被吃脑的僵尸入侵,这相当的吸引人。总的来说,杀死僵尸是很有趣的。
在这个,没有美工配合,我们就用圆形来代替植物,用方块来代替僵尸,伟大的圆形将会阻止邪恶的方块进入我们的基地。
游戏区域可以被简化为一个区块游戏。设想一下这种局面:
看图我们所拥有的是一个位于(2,2)的植物,它会尽力阻止走在第二行(从第0行开始,下同)的僵尸,
并且另一个僵尸正在沿着第三行接近我们的基地,还有一个正从第四列落下的阳光。不可能有另外一个植物位于(2,2),
并且不可能出现一个僵尸走在第二行与第三行之间。
创建游戏区域
正如你在上图看到的那样,这个游戏的区域是一个5行9列的矩阵。
setupField(); 建立游戏信息
drawField(); 绘制游戏地图
//------ 设定游戏主界面 5*9 二维数组 小方格 --------- private function setupField():void { //数组 gameField=new Array(); for (var i:uint=0; i<5; i++) { gameField[i]=new Array(); for (var j:uint=0; j<9; j++) { gameField[i][j]=0; } } } //---- 绘制游戏区域背景方格 -------------- private function drawField():void { //显示地图精灵,内部画绿块 var fieldSprite:Sprite=new Sprite(); //颜色随机值 var randomGreen:Number; addChild(fieldSprite); fieldSprite.graphics.lineStyle(1,0xFFFFFF); for (var i:uint=0; i<5; i++) { for (var j:uint=0; j<9; j++) { //颜色的随机绿色 randomGreen=(125+Math.floor(Math.random()*50))*256; //填充画矩形框并填充绿色 5行9列 fieldSprite.graphics.beginFill(randomGreen); fieldSprite.graphics.drawRect(25+65*j,80+75*i,65,75); // x,y 65*75大小, (25,80)为初始地址 j 是列,i 是行 画矩形 } } } }
这样就可以创建一个游戏背景图了。
2:创建阳光,收集阳光 fallingSuns()
阳光是植物大战僵尸里的货币。它们从天上掉下来,落到某一区块上。捡起这些阳光,你才能购买植物。
我们用到了timer计时器事件使得每五秒落下一个阳光,随机出现并缓慢滑落到某一个自定义消失位置。点击
它就可以收集。
private function fallingSuns():void { addChild(sunContainer); flowersTimer.start(); flowersTimer.addEventListener(TimerEvent.TIMER, newSun); }
private function newSun(e:TimerEvent):void { var sunRow:uint=Math.floor(Math.random()*5); var sunCol:uint=Math.floor(Math.random()*9); sun = new sunMc(); sun.buttonMode=true; sunContainer.addChild(sun); sun.x=52+sunCol*65; sun.destinationY=130+sunRow*75; sun.y=-20; sun.addEventListener(MouseEvent.CLICK,sunClicked); }
private function sunClicked(e:MouseEvent):void { e.currentTarget.removeEventListener(MouseEvent.CLICK,sunClicked); money+=5; updateMoney(); var sunToRemove:sunMc=e.currentTarget as sunMc; sunContainer.removeChild(sunToRemove); }
private function onEnterFrm(e:Event):void {// 循环移动所有的太阳 for (i=0; i<sunContainer.numChildren; i++) { var fallingSun:sunMc=sunContainer.getChildAt(i) as sunMc; if (fallingSun.y<fallingSun.destinationY) { fallingSun.y++; } else { fallingSun.alpha-=0.01; if (fallingSun.alpha<0) { fallingSun.removeEventListener(MouseEvent.CLICK,sunClicked); sunContainer.removeChild(fallingSun); } } } }