- 浏览: 1580958 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (673)
- Linux (3)
- android (302)
- php (12)
- struts2 (1)
- Flex积累 (88)
- Hibernate (8)
- MyEclipse (18)
- android备忘录 (209)
- Java备忘录 (53)
- spring (0)
- Flex备忘录 (30)
- JavaScript (10)
- Tomcat (11)
- Flex FrameWork (0)
- 设计模式学习 (4)
- 休闲娱乐 (4)
- Flex skin (1)
- Flex 组件 (2)
- 持久化相关 (2)
- DotNet相关 (5)
- Flex Style (1)
- Windows (11)
- Flex AIR (9)
- MySQL (1)
- mac OSX (29)
- eclipse (26)
- database (5)
- ARM (1)
- English (1)
- WebService (8)
- javabase64 (2)
- ruby (1)
- sqlite (5)
- ios (7)
- 无线应用 (1)
- Java (3)
- goagent (1)
- oc (1)
最新评论
-
Z_ying:
谢谢分享,上次也遇到过的,解决了,过了一段时间又忘记,幸亏看到 ...
FastJson 示例 及问题 -
wto8559:
这是什么错啊,我也遇到了.问下写一个servlet能解决什么问 ...
Exception in thread "HouseKeeper" java.lang.NullPointerException -
zxjlwt:
如何用php怎么弄了。http://surenpi.com
\U672a\U77e5\U9519\U8bef 字符还原 -
windseamless:
那怎么样才能屏蔽呢
java.lang.IllegalArgumentException: Window type can not be changed after the -
macleo:
Trinea 写道还是利用Fiddler抓包更方便,(1)无需 ...
android网络抓包相关
http://www.9ria.com/news/2011/0505/13143.html
下载:http://www.emanueleferonato.com/wp-content/uploads/2011/01/pvz4.zip
欢迎来到第四步。在这个步骤里,我们会使得植物能够开火,并且最终杀死僵尸。让我们先来明确一下什么时候植能开火:*当至少有一个僵尸与植物处于同一行*植物一次只能射出一颗子弹*距离上一次射击必须过去一定的时间现在让我们来定义一下子弹的活动:*子弹从左往右飞*当子弹击中一个僵尸时被移除*当子弹飞到舞台之外时被移除这6个概念给我们的脚本带来了一些大的改动。意识到把所有的代码写到一个类里使得脚本变得很混乱,我尽力以最清晰的方式来组织它。我尽我最大所能来使得它保持可读性。我创建了一个叫做bulletMc的对象,它代表了子弹。准备好去看一个接近300行的代码吗?
[code="flex"]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 plantsArray:Array;// 种植在游戏区域里的植物
private var zombiesArray: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();// 所有植物的容器
public var bulletContainer:Sprite=new Sprite();// 所有子弹的容器
private var zombieContainer:Sprite=new Sprite();// 所有僵尸的容器
private var overlayContainer:Sprite=new Sprite();// 所有翻盖物的容器
//
// 我们的演员
//
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();// 初始化下落的阳光
addPlants();// 初始化植物
addZombies();// 初始化僵尸
addEventListener(Event.ENTER_FRAME,onEnterFrm);
}
//
// 游戏区域设置,创建用来存储植物和僵尸信息的数组
//
private function setupField():void {
plantsArray=new Array();
for (var i:uint=0; i=10&&! playerMoving) {
money-=10;// 付款
updateMoney();// 更新动态文本
selector=new selectorMc();// 创建一个新的选择器
selector.visible=false;// 使选择器不可见
overlayContainer.addChild(selector);// 把选择器加入到显示列表
movingPlant=new plantMc();// 构建一个新的供玩家拖动的植物
movingPlant.addEventListener(MouseEvent.CLICK,placePlant);// 给该植物注册一个鼠标点击事件
overlayContainer.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&&plantRow0&&currentPlant.recharge==currentPlant.fireRate&&! currentPlant.isFiring) {
var bullet:bulletMc=new bulletMc();// 构造一颗新的子弹
bulletContainer.addChild(bullet);// 把子弹加入到显示列表
bullet.x=currentPlant.x;
bullet.y=currentPlant.y;
bullet.sonOf=currentPlant;// 存储该子弹是由哪一株植物射出的
currentPlant.recharge=0;// 重新准备开火
currentPlant.isFiring=true;// 植物正在开火
}
if (currentPlant.recharge650) {
firingPlant.isFiring=false;// 植物不再处于正在开火的状态
bulletContainer.removeChild(movingBullet);// 移除子弹
} else {
for (j=0; j=0&&plantCol>=0&&plantRow
如果你一路跟随着我之前的几个教程做了下来的说话,你就会注意到我改变了很多的代码,但是原来的概念保持不变。我会把注意力放到新的东西上。首先,创建了一个新的数组,名为zombiesArray(第18行),它会存储每一行上的僵尸。这是非常有用的当我们想要知道一株植物是否能开火时。此刻,只要有一个僵尸与植物处于同一行时植物就能射击,我并不关心僵尸是在植物的左边还是右边,但是这个地方我将会再下一个步骤来改变它,使得只有僵尸在植物的右边时,植物才能开火,因为我可不想把植物放在僵尸的右边,然后看着它往右没有目标地开火。当一个新的僵尸被加到舞台,看一下newZombie函数的这两行:zombie.zombieRow=Math.floor(Math.random()*5);zombiesArray[zombie.zombieRow]++;给僵尸声明一个zombieRow属性,然后增加zombiesArray的第zombieRow个元素的值。多亏了这个数组,使得我总是可以轻易地知道有每一行分别有多少僵尸。再看下placePlant函数(第170行),这个函数我用来放置一株植物,我将给植物增加一些属性:placedPlant.fireRate=75;placedPlant.recharge=0;placedPlant.isFiring=false;placedPlant.plantRow=plantRow;我定义了植物开发的速率,单位是帧。它意味着植物至少要每隔fireRate帧开火一次。我选择用帧而不是用毫秒来作为植物开火的速率是因为如果有太多的对象在舞台上,游戏循环速率就会变慢,而不是保持不变。recharge属性每秒都帧都会增加,当它等于fireRate时,植物就准备好射击了。isFiring属性告诉我们植物是否正在射击。plantRow属性存储自己所在的行数。当检查有多少僵尸处于这一行时这个属性是很有用的。来看一下是否一株植物可以开火,我们用这个语句来描述:if (zombiesArray[currentPlant.plantRow]>0&&currentPlant.recharge==currentPlant.fireRate&&! currentPlant.isFiring) { var bullet:bulletMc=new bulletMc(); bulletContainer.addChild(bullet); bullet.x=currentPlant.x; bullet.y=currentPlant.y; bullet.sonOf=currentPlant; currentPlant.recharge=0; currentPlant.isFiring=true;} 这个if语句检查与植物是否至少有一个僵尸与植物同一行,并且植物是否正在开火,是否准备好开火了。如果满足这些条件了,一个新的子弹就被创造出来了,并且植物的一些状态就被改变了,来告诉脚本植物正在开火,并且需要重新准备。但是所有上面的这些功能的实现,我们需要给子弹一个sonOf属性来存储它是哪一株植物射出来的。这是非常有用的一旦子弹要被移出舞台,我们就要更新射出该子弹的植物的isFiring状态。最后看一下杀死僵尸部分的核心代码,它是一个for循环:for (j=0; j var movingZombie:zombieMc=zombieContainer.getChildAt(j) as zombieMc; if (movingZombie.hitTestPoint(movingBullet.x,movingBullet.y,true)) { movingZombie.alpha-=0.3; firingPlant.isFiring=false; bulletContainer.removeChild(movingBullet); if (movingZombie.alpha zombiesArray[movingZombie.zombieRow]--; zombieContainer.removeChild(movingZombie); } break; }} 我遍历所有的僵尸,进行碰撞检测。如果一个僵尸被子弹击中,我们移除子弹,并设置射出该子弹的植物的isFiring为false,并且减少僵尸的能量。此刻通过降低僵尸的透明度。如果透明度降至0,我们移除该僵尸,并且减少zombiesArray相应位置元素的值来更新在该行上僵尸的数量。现在你可以测试一下游戏了:[flash]http://www.emanueleferonato.com/wp-content/uploads/2011/01/pvz4.swf[/flash]收集硬币,购买植物然后杀死僵尸吧。下载源代码。下一次,我们将会使得僵尸也能攻击。
发表评论
-
Flex与Struts2整合相关
2011-08-12 00:14 12661.http://jusesgod.iteye.com/blo ... -
郁闷的查询
2011-08-03 10:19 893浪费了4个小时,只是少了一个“0” -
flex 中错误收集
2011-07-06 06:19 1101A pseudo attribute name is expe ... -
The current workspace was created by a previous version of flash builder 解决
2011-07-06 04:46 1280升级了sdk到4.5.1,每次打开总是 其实不理它,至少目前 ... -
在用Flex做项目的时候,一些小经验
2011-06-23 04:09 1332http://hi.baidu.com/interces ... -
Flex 资源收集
2011-06-23 02:20 1182http://www.adobe.com/cfusion/ex ... -
Flex printjob 相关资料收集
2011-06-18 21:36 11651.http://fengxiangpiao.iteye.co ... -
ActionScript 3 Reference 总是 retrieve data from...解决
2011-06-18 21:26 966actionscript api reference 总是 r ... -
Flex module 学习总结
2011-06-08 22:55 1253Adobe 写道 To see an example of ... -
Flex4中自定义组件的元标签
2011-06-03 23:09 3137Adobe 写道 Metadata tags in c ... -
关于flex添加音频的方法
2011-05-26 21:14 2023参考: http://bbs.airia.cn/th ... -
ActionScript组件开发
2011-05-26 10:33 1341http://sunshineyao.iteye.com/bl ... -
Flash Builder 4.5 and Flex sdk 4.5 (hero) release...
2011-05-25 11:33 1135Flex 4.5 介绍.... http://www.ado ... -
Flex ActionScript 建模工具和代码生成工具一览
2011-05-25 09:40 1795http://seantheflexguy.com/blog/ ... -
Flex数据交互方法 :httpservice, webservice, RemoteObject, socket
2011-05-24 22:12 1545http://hi.baidu.com/zhao_gw/blo ... -
终于在Google App Engine/Java(GAE/J)上成功部署运行Flex+BlazeDS
2011-05-24 15:58 2677http://www.iteye.com/topic/4283 ... -
Flex 4通过重写DataGridColumn和CheckBox类给DataGrid添加选择列-CheckBoxColumn(全)
2011-05-24 15:53 2325http://blog.yotuo.net/post/2009 ... -
Flex 之 郁闷 swc生成
2011-05-22 20:51 3755找了个组件....想方便日后使用...搞成swc..以后只要c ... -
Flex Time 组件相关
2011-05-21 23:28 594DateField 只能选日期,居然没有时间...日了... ... -
Cannot create class of type 'XXX'. Type 'XXX' not found.
2011-05-21 09:18 2681http://blog.csdn.net/ozzy_003/a ...
相关推荐
内容概要:本文详细介绍了LabVIEW控件的设计与实现,尤其是一些由经验丰富的老工程师精心打造的控件。LabVIEW是一款图形化编程语言,广泛应用于数据采集、仪器控制和工业自动化领域。文中通过具体实例展示了如何利用LabVIEW创建美观且功能强大的控件,如滑动条、波形图、金属质感旋钮、动态波形图表以及智能选项卡等。作者强调了LabVIEW控件在灵活性和美观度方面的优势,并分享了许多实用的技术细节和优化方法。 适合人群:具有一定编程基础并希望深入了解LabVIEW控件设计的开发者和技术爱好者。 使用场景及目标:适用于需要进行高效的数据展示和交互设计的应用场景,如工业控制系统、实验室设备操作界面等。目标是帮助用户掌握LabVIEW控件的高级特性,提高开发效率和用户体验。 其他说明:文章不仅提供了具体的代码示例,还探讨了控件美学背后的设计理念和技术实现,鼓励读者探索更多可能性。
Delphi 12.3控件之unidac_10.4.0_d27pro.exe
11.盛趣自闭面(还是自己太菜).txt
58面经面试过程和题目.txt
电大操作系统课后习题解答
人工智能技术与应用演讲【61页PPT】
chromedriver-mac-arm64-135.0.7049.41.zip
内容概要:本文详细介绍了QPSK(四相移键控)调制方法及其在瑞利信道和高斯白噪声信道下的误码率(BER)性能分析。首先展示了QPSK星座图的绘制方法,接着构建了一个简化的QPSK发射机模型,用于将二进制比特流映射到相应的星座点。随后,分别实现了两种信道模型:高斯白噪声信道(AWGN)和瑞利信道,并解释了它们的工作原理以及如何向传输信号添加噪声。文中还提供了详细的误码率测试脚本,通过大量随机比特进行仿真,最终得到了不同信噪比条件下的误码率曲线。此外,作者还讨论了QPSK与其他调制方式如BPSK、16QAM之间的性能差异,强调了频谱效率与抗噪能力之间的权衡关系。 适合人群:对无线通信系统感兴趣的科研人员、研究生以及从事通信工程领域的工程师。 使用场景及目标:①帮助读者理解QPSK的基本原理及其在不同信道环境中的行为特性;②提供实用的Python代码片段,便于快速搭建仿真环境并验证理论结果;③探讨各种调制方式的选择依据,指导实际应用中的优化决策。 其他说明:文中多次提到‘骚操作’,意指一些巧妙但非传统的编程技巧,有助于提高代码执行效率或简化复杂度。同时提醒读者注意仿真过程中可能出现的问题,如
新建 Microsoft Word 文档 (9).docx
计算机科学与技术- 软件开发工具 培训资料
bitcount统计每个元素中设置的位数 B = bitcount(A) Counts the number '1' bits in each element B = bitcount(A, bitValue) "bitValue" = 1 = default = counts the occurance of '1' if bitValue = 0; counts the number '0' The total bits to verify is [8,16,32,or 64] based on the maximal value of A B = bitcount(A, bitValue, maxBits) the total # of bits to examine
MOM生产运营管理平台解决方案【35页PPT】
deli-数码录音电话机-HCD6238(28)P-TSD-使用说明书
Java项目基于ssm框架的课程设计,包含LW+ppt
Delphi 12.3控件之Tsilang 7.5.0.0 D12.7z
ios+UIButton分类+UIButton+UIButton图片文字位置
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载
Java项目基于ssm框架的课程设计,包含LW+ppt
Delphi 12.3控件之TextEditorPro64.7z
尝试给OpenHarmony4.0增加可以在动态库中使用的日志模块 文章使用的资源,防止gitee资源丢失