现在我们来到了这个系列教程的第三步。在这部分中,我们我会安置所买的植物,并且让僵尸出场。

增加一个僵尸是相当的容易因为处理僵尸问题跟处理阳光问题一样。就像阳光出现在舞台的顶部之外,然后落下。僵尸出现在舞台右边之外,然后往左移动。然而他们之

间不会相互配合。

至于安置植物,我们必须确保当玩家拖动植物,然后按下鼠标时,植物将要被安置的区块必须没有其它植物并且在游戏区域内。然后,植物就被安置好了,选择器和侦听

器也随之被移除。接着,玩家继续收集阳光并且选择一种植物(现在只有一种)安置到游戏区域里。

我对代码进行了注释来帮助你明白代码都做了些什么。

package {import flash.display.Sprite;import flash.utils.Timer;import flash.events.TimerEvent;import flash.events.MouseEvent;import flash.events.Event;import flash.text.TextField;public class Main extends Sprite {//一个2维数组用来存储游戏区块private var gameField:Array;//计时器,使得阳光落下private var flowersTimer:Timer=new Timer(5000);//计时器,让僵尸出场private var zombieTimer:Timer=new Timer(5000);//所有阳光的容器private var sunContainer:Sprite=new Sprite();//所有植物的容器private var plantContainer:Sprite=new Sprite();//所有僵尸的容器private var zombieContainer:Sprite=new Sprite();//阳光private var sun:sunMc;//植物栏上的植物private var plant:plantMc;//玩家在游戏区域能够拖动的植物private var movingPlant:plantMc;//选择器(一个高亮的区块),告诉玩家他将把植物种在哪个区块private var selector:selectorMc;//玩家所拥有的金钱数量private var money:uint=0;//动态文本框,用来显示玩家的金钱private var moneyText:TextField=new TextField  ;//布尔型变量,标志玩家是否在移动一个植物private var playerMoving:Boolean=false;public function Main():void {//初始化游戏区块setupField();//画出游戏区块drawField();//处理下落的阳光fallingSuns();//添加所有文本(此刻只有金钱的数量)addText();//增加植物的函数addPlants();//增加僵尸的函数addZombies();//注册侦听器,进入游戏循环addEventListener(Event.ENTER_FRAME,onEnterFrm);}private function setupField():void {//创建一个5行9列的矩阵,并将矩阵内的每个值初始化为0gameField=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 addText():void {//增加一个动态文本框addChild(moneyText);updateMoney();moneyText.textColor=0xFFFFFF;moneyText.height=20;}private function updateMoney():void {//把玩家所拥有的金钱数量写到文本框里moneyText.text="Money: "+money.toString();}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;fieldSprite.graphics.beginFill(randomGreen);fieldSprite.graphics.drawRect(25+65*j,80+75*i,65,75);}}}private function addZombies():void {//增加僵尸容器addChild(zombieContainer);//启动计时器,使僵尸出场zombieTimer.start();//注册侦听器zombieTimer.addEventListener(TimerEvent.TIMER,newZombie);}private function newZombie(e:TimerEvent):void {//创建一个僵尸var zombie:zombieMc=new zombieMc();//把僵尸加入到显示列表zombieContainer.addChild(zombie);//生成随机行数,用于放置僵尸var row:uint=Math.floor(Math.random()*5);//把僵尸放在屏幕的右边zombie.x=660;zombie.y=row*75+115;}private function fallingSuns():void {//增加阳光容器addChild(sunContainer);//启动计时器,使得阳光落下flowersTimer.start();//注册Timer事件,触发事件侦听函数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;//定义阳光destinationY属性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);//让玩家赚到5个金币money+=5;//更新动态文本updateMoney();//获得我们必须移除的阳光var sunToRemove:sunMc=e.currentTarget as sunMc;//移除该阳光sunContainer.removeChild(sunToRemove);}private function addPlants():void {//增加植物容器addChild(plantContainer);//创建一个新的植物plant=new plantMc();//把新植物加入到显示列表plantContainer.addChild(plant);//使鼠标改变形状,当它滑过新植物时plant.buttonMode=true;//放置植物plant.x=90;plant.y=40;//给新植物注册鼠标点击事件plant.addEventListener(MouseEvent.CLICK,onPlantClicked);}private function onPlantClicked(e:MouseEvent):void {//检查玩家是否有足够的钱(当前是10)来购买植物,并且是否正在拖动一个植物if (money>=10&&! playerMoving) {//付款money-=10;//更新动态文本updateMoney();//创建一个新的选择器selector=new selectorMc();//使选择器不可见selector.visible=false;//把选择器加入到显示列表plantContainer.addChild(selector);//构建一个新的供玩家拖动的植物movingPlant=new plantMc();//给该植物注册一个鼠标点击事件movingPlant.addEventListener(MouseEvent.CLICK,placePlant);//把该植物加入到显示列表plantContainer.addChild(movingPlant);//告诉脚本正在移动一株植物playerMoving=true;}}private function placePlant(e:MouseEvent):void {//根据鼠标的位置来判断植物将要被种植在哪个区块var plantRow:int=Math.floor((mouseY-80)/75);var plantCol:int=Math.floor((mouseX-25)/65);//检查该区块是否位于游戏区域内,并且该区块没有其它植物存在if (plantRow>=0&&plantCol>=0&&plantRow<5&&plantCol<9&&gameField[plantRow][plantCol]==0) {//构建一株植物,用来种植var placedPlant:plantMc=new plantMc();//把该植物加入到显示列表plantContainer.addChild(placedPlant);//放置该植物placedPlant.x=plantCol*65+57;placedPlant.y=plantRow*75+115;//告诉脚本玩家停止移动植物了playerMoving=false;//移除供玩家拖动的植物的事件侦听movingPlant.removeEventListener(MouseEvent.CLICK,placePlant);//把选择器从显示列表移除plantContainer.removeChild(selector);//把供玩家拖动的植物移出显示列表plantContainer.removeChild(movingPlant);//更新游戏区域信息gameField[plantRow][plantCol]=1;}}private function onEnterFrm(e:Event):void {//循环,遍历所有的僵尸for (var i:uint=0; i<zombieContainer.numChildren; i++) {var movingZombie:zombieMc=zombieContainer.getChildAt(i) as zombieMc;//把所有的僵尸向左移动二分之一个像素movingZombie.x-=0.5;}//循环,遍历所有的阳光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);}}}//如果玩家正在移动一株植物if (playerMoving) {//使植物跟随鼠标movingPlant.x=mouseX;movingPlant.y=mouseY;//判断当前鼠标滑过哪一个区块var plantRow:int=Math.floor((mouseY-80)/75);var plantCol:int=Math.floor((mouseX-25)/65);//如果这个区块在游戏区域内if (plantRow>=0&&plantCol>=0&&plantRow<5&&plantCol<9) {//使选择器可见selector.visible=true;//把选择器放在被选择的区块上selector.x=25+plantCol*65;selector.y=80+plantRow*75;} else {//使选择器不可见selector.visible=false;}}}}
}

下面是结果

http://www.emanueleferonato.com/wp-content/uploads/2011/01/pvz3.swf

收集阳光并且安置植物当僵尸到达时

做一个像植物大战僵尸的Flash游戏3相关推荐

  1. 做一个像植物大战僵尸的Flash游戏1

    http://bbs.9ria.com/thread-80527-1-6.html 这个教程是我翻译的..不是我原创的..原来是发表在新闻资讯版块,后来被移到了游戏编程版块,所以关于原作者的一些信息等 ...

  2. 做一个像植物大战僵尸的Flash游戏2

    第二个教程了,是时候去筹钱买一个植物了. 我们必需修改一个在教程一中的代码,就是让阳光只是简简单单地出现在某一区块中,并且在一段时间内,若没有被捡起,它就消失了.我们得让阳光平滑的落下. 修改newS ...

  3. 做一个像植物大战僵尸的Flash游戏5

    现在,我们来到了这个教程的第5个阶段. 在这个阶段,我们会修改一个漏洞,这个漏洞允许植物开火只要有僵尸与植物处于同一行,不论僵尸是在植物的左边还是右边.同时我们也会增加僵尸攻击植物的功能. 首先,让我 ...

  4. 用cocos2dx做一个简单的单机捕鱼达人游戏(1)

    用cocos2dx做一个简单的单机捕鱼达人游戏(1) 我使用了cocos2dx 3.9版本和vs2017来开发 今天先做游戏开始界面 开始界面很简单,一个背景图,一个logo,3个button(三种登 ...

  5. 可以帮我做一个python的3D飞机小游戏吗

    当然可以!我很乐意帮助你做一个 Python 的 3D 飞机小游戏. 如果你是 Python 初学者,我建议你先了解一些 Python 的基础知识,包括变量.数据类型.流程控制语句.函数等.这些知识都 ...

  6. 用c++做一个简单的打飞机小游戏(详细说明与注释)

    用c++做一个简单的打飞机小游戏(详细说明与注释) 说明: 代码长度5k多,行数200多行. 不仅没有压行,反而为了条理清晰一点所以很多中间加空换行,把很多可以写在一起的分割成了几个函数. 为了不会忘 ...

  7. 推荐一个不错的魔兽的flash游戏

    推荐一个不错的魔兽的flash游戏,看看大家能玩多少分? http://novelconcepts.co.uk/FlashElementTD/ http://www.wowddr.com/

  8. 可与植物大战僵尸媲美的游戏——土豆怪兽-汉化版(含攻略)

    可与植物大战僵尸媲美的游戏--土豆怪兽-汉化版(含攻略) 如果你喜欢植物大战僵尸,相信你也会喜欢Yongd今天要介绍的这个游戏--土豆怪兽,如果你已经玩过或正在玩这个游戏,飘过吧. 土豆怪兽是一款类似 ...

  9. 用文件保存游戏服务器数据恢复,玩植物大战僵尸等单机游戏时,存档丢失了怎么数据恢复?...

    相信很多人在玩例如植物大战僵尸.使命召唤等游戏时,都遇到到因为游戏奔溃,导致之前的存档丢失的情况.那么这种情况下,这些存档能够找回吗?首先我们要知道,存档在电脑上找不到,并不意味着这些存档的数据消失了 ...

最新文章

  1. flex Scroller
  2. 在一个JSP页面中包含另一个JSP页面的三种方式
  3. 【转】推荐两款富文本编辑器:NicEdit和Kindeditor
  4. oracle backup arch,一个数据库备份的例子
  5. 浅谈NLP中的对抗训练方式
  6. 2p刷高恪魔改固件_Newifi3路由器试用高恪固件
  7. 基于OIDC(OpenID Connect)的SSO
  8. 如何在Maven中运行Ant目标?
  9. Effective Java~45. 谨慎使用Stream
  10. MyBB论坛兼容智能手机的解决方案
  11. Chrome无法使用Unity Web Player的解决方案
  12. Linux自学之旅-基础命令(write用户之间发送信息命令)
  13. 自动控制原理--卢京潮 2009(免费)课本完整
  14. 段式液晶结构你了解多少?
  15. Dragonfly软件电脑环境
  16. vipJr联合朵拉举办童模大赛 潮童萌娃自信来袭
  17. 路由器或交换机密码忘了——带你修改路由器+交换机密码
  18. 前端第二章:1.HTML简介、Linux 命令行打开 .html 文件、常用标签(一)
  19. 如何批量将png格式改成jpg?
  20. CentOS7 添加开机启动项

热门文章

  1. JAVA intellij idea社区版安装教程
  2. 设置按钮5秒后可以点击下一步||5秒后自动关闭网页
  3. C语言,1000以内素数排序10个为一行
  4. 蚂蚁分类信息系统5.9SE多城市版去除域名限制
  5. 批量下载豆瓣FM加红星的歌曲
  6. 补一个游记(多图杀猫)
  7. 排查链接是否失效_锅炉主保护系统隐患排查与治理
  8. linux redis退出命令行,linux的redis启动关闭命令
  9. 《互联网创新创业中知识产权素养培养》答案
  10. oracle 遍历输出,oracle 遍历树