赞
踩
本文参考了课程先辈留下来的报告,在前人的基础上进行了代码框架和逻辑的整合,希望对大家有所帮助!
开始前,先将所需的素材拖入An的库中,并为每个素材创建链接。
这是我们这个demo所需的所有素材,现在来详细讲讲:
这个demo不是很难!大家冲鸭!!
下面将用朴实的语言来描述各个功能以及其代码实现。建议大家在看下面内容之前概览一下
PVZ逻辑示意图
以清晰的知道每一步处于框架中的哪个位置。
首先我们来看看Main函数中包含什么。
不妨先把背景图在An中放入舞台,试一试图片大小,量一下相关尺寸。
var plantsArray = new Array()//种植下的植物数组 var zombiesArray = new Array();//出现的僵尸数组 // //行高和列宽 // var gridHeight = 115; var gridWidth = 95; var borderTop = 110;//bordertop var borderLeft = 320;//borderleft // // 容器 // var sunContainer = new cjs.Container();// 阳光容器 var plantContainer = new cjs.Container();// 植物容器 var bulletContainer = new cjs.Container();// 子弹容器 var zombieContainer = new cjs.Container();// 僵尸容器 var overlayContainer = new cjs.Container();// 覆盖物容器 // // 种植物会用到的 // var movingPlant;// 拖动中的植物 var selector;// 选择器(影子) // // 其他 // var money = 100;// 金钱总量 var moneyText = new cjs.Text("Money:"+money,"50px Times","#000000") ;// 动态文本框,用来显示玩家的金钱 var playerMoving = false;// 标志玩家是否在移动一个植物 var totalZombies = 0;
接下来,我们就要用这些变量做一些事情了!
// // 游戏区域设置,创建用来存储植物和僵尸信息的数组 // function setupField(){ for (var i = 0; i < 5; i++) { plantsArray[i] = new Array(); zombiesArray[i] = new Array(); for (var j=0; j<9; j++) { plantsArray[i][j] = 0; } } } // // 画出游戏区域 // function drawField(){ stage.addChild(sunContainer); stage.addChild(plantContainer); stage.addChild(bulletContainer); stage.addChild(zombieContainer); stage.addChild(overlayContainer); //Container前不能加stage. overlayContainer.addChild(moneyText); updateMoney(); moneyText.textColor = 0x000000; moneyText.height=20; } // // 更新显示阳光值 // 每次变量money发生变化时都要记得更新 // function updateMoney(){ moneyText.text = money.toString(); }
此时,我们就拥有了土地和钱,虽然它们现在看不到摸不着。
创建一个计时器,每隔3000ms会让newZombie()这个函数执行一次。
// // 初始化僵尸 // function addZombies(){ var zombieTimer = setInterval(newZombie, 3000); } // // 增加一个新的僵尸 // function newZombie(TimerEvent){ var zombie = new lib.zombieMc();// 构造僵尸 totalZombies++; zombieContainer.addChild(zombie);// 添加僵尸 zombie.zombieRow=Math.floor(Math.random()*5);// 随机行数 zombie.name="zombie_"+totalZombies;//僵尸取名 zombiesArray[zombie.zombieRow].push(zombie.name);// 增加第row行的僵尸 zombie.x=1000;// 把僵尸放在屏幕的右边 zombie.y=zombie.zombieRow*gridHeight+borderTop;//把僵尸放到对应的行上 }
这样,每隔一会儿我们就会得到一只停在原地的僵尸。
接下来,我们会在每一帧遍历僵尸,让他们走动起来或者吃东西。
// // 初始化太阳 // function fallingSuns(){ var fallingSunsTimer = setInterval(newSun, 3000); } // // 增加一个新的阳光 // function newSun(){ var sunRow=Math.floor(Math.random()*5);// 随机行 var sunCol=Math.floor(Math.random()*9);// 随机列 var sun = new lib.sunMc();// 构造太阳 sun.mouseChildren = false;//让整个太阳影片剪辑成为一个整体 sun.buttonMode = true;// 当鼠标滑过阳光时,改变鼠标的形状 sunContainer.addChild(sun);// 添加 sun.x=borderLeft + sunCol*gridWidth;// 把太阳放在对应的列上 sun.destinationY = borderTop+sunRow*gridHeight;// definines the sun y destination point sun.y=20;// 把阳光放在舞台顶部的上方 sun.addEventListener("click",sunClicked);// 给阳光注册点击事件 }
注意sun.mouseChildren = false这句话,他很重要。
种太阳的逻辑和生成僵尸一样。
不同的是,我们要给太阳添加鼠标点击事件。
//
// 点击阳光
//
function sunClicked(event){
var sunToRemove = event.target;//获得被点击的太阳
sunToRemove.removeEventListener("click",sunClicked);// removes the CLICK listener
money += 50;// makes the player earn money (5)
updateMoney();// updates money text
//console.log("sunClicked! ");
sunContainer.removeChild(sunToRemove);// 移除
}
好的,现在我们每隔一段时间就会有一个不会动的太阳生成。
后面要在每帧中遍历太阳,让他们下落,或者逐渐消失。
种下植物的逻辑有些不一样,我们来捋一下。
首先在舞台上要有一个卡片让我们选择,并且这个卡片具有一个点击侦听。
点击后会执行onPlantClicked()。
//
// 创建一个植物栏,现在只有一种植物
//
function addPlants(){
var card_peaShooter = new lib.peaShooter()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。