Project 01 PlantAndZomb

代码分享:http://pan.baidu.com/s/1qWoLMiw

准备:

1 如何实现一张图片上的多个图片连续显示

       A》使用事件计时器

       B》调用

              CGImage RefsubImage =CGImageCreateWithImageInRect(zombImage.CGImage, CGRectMake(self.count++%8*w, 0,w, zombImage.size.height));

  self.image = [UIImage imageWithCGImage:subImage];

   CGImageRelease(subImage);

2计算视图中的子视图的个数

int count= self.view.subviews.count

3 判断点击的位置时候位于某图片上:

CGRectContainsPoint(图片.fram,点击位置)

判断两个矩形是否有交点

CGRectContainsRect(图片.fram,点击位置)

 

 

[植物大战僵尸Day01]

1>创建植物类:

植物类有一个父类:父类中要实现的方法有:在初始化的时候创建事件计时器

                在计时器的方法中实现根据事件不同不断的切换同一张图片的多个图片实现动画效果

               [公开一个属性用于接受图片]

       其他植物类:继承父类:并在出事化的时候传入照片

 

2>僵尸类:

僵尸类有一个父类:父类中要实现的方法:在初始化的时候创建一个事件计时器

        在计时器的方法中实现根据不同的时间切换同一张图片上的多个照片形成动画效果

        并且在该方法中实现僵尸的移动     僵尸移动出屏幕时进行判断移除僵尸防止内存的泄露  (结束计数器   移除僵尸)

 [公开一个用于接受照片的属性  和一个用于改变位置的属性]   

       其他僵尸类:继承父类:并在初始化的方法中传入图片和一个用于改变速度的数;

 

3>编写主函数:

       a.拖拽不同的植物在响应的位置上种植植物:

       调用touch的方法began   move  end    cencell(意外终端的方法)

       touch……began…方法中:

       1.获得touch的位置:

              UITouch*t=[touches anyObject];

              CGPointp=[t locationInView:self.view];

       2.对所有的植物进行遍历  根据点击的点的位置对象植物的位置进行确定生成什么样的植物

       for(int i=0; i<self.plantImageViews.count; i++) {

       UIImageView *plantIV=self.plantImageViews[i];

        if(CGRectContainsPoint(plantIV.frame, p)) {

           switch (i) {

               case 0:

                   self.dragPlant=[[subFlower alloc]initWithFrame:plantIV.frame];

                   break;

               case 1:

                   self.dragPlant=[[pea alloc]initWithFrame:plantIV.frame];

                   

                   break;

               case 2:

                    self.dragPlant=[[icePeaalloc]initWithFrame:plantIV.frame];

                   

                   break;

               case 3:

                   self.dragPlant=[[Nut alloc]initWithFrame:plantIV.frame];

                   

                    break;

                   

               default:

                   break;

            }

           [self.view addSubview:self.dragPlant];

        }

    }

}

  touchMoved..方法中

       获得点击的点把创建的植物的中心点移动倒该触摸的位置

    touchEnd…方法中

       获得触摸到的位置

       判断是否生成了植物

       遍历所有的可以种植植物的位置

              根据遍历出的位置判断该位置是否已经有植物(判断该视图的subview.count=1)手触摸的         位置在该遍历出的位置内

              如果成立则在该视图内添加该植物,并将该植物的中心点移动倒该视图的中心点

       如果该位置不是可以种植植物的位置那么则将植物移除

              if[self.dragPlant.superViewisEqual:self.view]{

              [self.dragPlantremove_FromSuperview];

          }

       并将该植物赋值为空避免种下后还可以移动

  touchCancell方法中

       移除该植物  (正在拖拽过程中如果有电话接入则取消该次拖拽)

                    

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

UITouch*t=[touches anyObject];

CGPointp=[t locationInView:self.view];

for (int i=0; i<self.plantIVs.count; i++) {

self.dragplantIV=self.plantIVs[i];//begien的时候拖住的图片在种子处

if (CGRectContainsPoint(self.dragplantIV.frame,p)) {

switch(i) {

case0:

self.dragplantIV=[[sunfloweralloc]init];

break;

case1:

self.dragplantIV=[[peaalloc]init];

break;

case2:

self.dragplantIV=[[icepeaalloc]init];

break;

default:

self.dragplantIV=[[nutalloc]init];

break;

}

[self.view addSubview:self.dragplantIV];

}

}

}

-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event{

UITouch*t=[touches anyObject];

CGPointp=[t locationInView:self.view];

self.dragplantIV.center=p;//移动的时候拖动的图片的中心随着touch拖动的点移动

}

-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent *)event{

UITouch*t=[touches anyObject];

CGPointp=[t locationInView:self.view];

if (self.dragplantIV){

for(UIView *box inself.boxes){

if(CGRectContainsPoint(box.frame, p)&&box.subviews.count==0) {//p点在box内并且这个box区域内没有放东西,就把这个拖着的图片放在这个box里面

self.dragplantIV.center=CGPointMake(box.frame.size.width/2, box.frame.size.height/2);//box中心点是它本身这个view的中心,而拖住的图片的中心是相对于self.view这个控制器的

[box addSubview:self.dragplantIV];

}

if([self.dragplantIV.superview isEqual:self.view]) {//如果把图片拖到了box之外的区域,则移除

[self.dragplantIV removeFromSuperview];

}

self.dragplantIV=nil;//随着拖动最后的摆放好图片之后,把本次touch拖动的图片需要清空,不在控制

}

}

}

-(void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event{

[self.dragplantIV removeFromSuperview];//程序运行的时候,不小心拖出了通知栏或者来电话等影响程序运行的时候,这种意外中断的情况移除正在拖拽并且没有放到坑内的图片

}

 

Day02

分析:

1、植物类的共性:sunFloewr可以产生阳光、pea可以发射子弹、icePea可以发射子弹,所以可以把它们的共性放在plant的父类方法中,因为pea可以发射子弹,icePea也可以发射子弹,只是子弹的图片不同,因此可以把子弹的图片放在peaicePea继承。

 

2、设置每种植物耗费的金币数,当金币数达不到某种植物要求的值时不能拖拽添加植物。

处理CDtouchend中添加方法,拖拽的植物到坑中之后,应对的某种植物栏添加遮罩实现方法:给这张图片添加一个动画  改变alpha的值

UIImageView*plantIV = self.plantIVs[self.dragPlant.tag];

plantIV.alpha = .3;

[UIViewanimateWithDuration:5animations:^{

plantIV.alpha = .8;

} completion:^(BOOL finished) {

plantIV.alpha = 1;

}];

3、添加僵尸,让僵尸从一定的行数走过来

 

4、设置僵尸的血量检索子弹和僵尸的碰撞,根据僵尸的血量的减少移除僵尸,icepeape发的子弹僵尸速度要减少。

 

5、设置植物的血量,在僵尸类中写一个eat方法用于僵尸吃掉植物,根据植物的血量减少,在控制器中设置检索植物与僵尸的碰撞,当僵尸的中心点含在植物所在的坑内的时候,僵尸停止行走,速度变为0

 

6、添加一个铲子用于铲掉植物,为storyboard中的铲子imageview添加一个UIPanGesturerecognasizer手势,为这个手势连接方法到控制器添加铲子,实现拖住铲子到有植物的box内可以移除植物,松手铲子消失;

利用pan手势的三个状态实现:

-(IBAction)panAction:(UIPanGestureRecognizer *)sender {

CGPoint p = [senderlocationInView:self.view];

switch ((int)sender.state) {

case UIGestureRecognizerStateBegan:

self.shovelIV = [[UIImageViewalloc]initWithFrame:sender.view.frame];

self.shovelIV.image = [UIImageimageNamed:@"shovel.png"];

[self.viewaddSubview:self.shovelIV];

break;

case UIGestureRecognizerStateChanged:

self.shovelIV.center = p;

break;

case UIGestureRecognizerStateEnded:

for (UIView *box in self.boxes) {

if (CGRectContainsPoint(box.frame,p)) {

if(box.subviews.count>0) {

Plant *plant =[box.subviews lastObject];

[plantremoveFromSuperview];

[self.plantsremoveObject:plant];

[plant.animationTimer invalidate];

[plant.fierTimerinvalidate];

}

}

[self.shovelIVremoveFromSuperview];

}

break;

}

}

时间: 2024-10-13 17:35:46

Project 01 PlantAndZomb的相关文章

Gradle Goodness: Rename Ant Task Names When Importing Ant Build File

Migrating from Ant to Gradle is very easy with the importBuild method from AntBuilder. We only have to add this single line and reference our existing Ant build XML file and all Ant tasks can now be executed as Gradle tasks. We can automatically rena

Team Foundation Server 2013 with Update 3 Install LOG

[Info   @10:14:58.155] ====================================================================[Info   @10:14:58.163] Team Foundation Server Administration Log[Info   @10:14:58.175] Version  : 12.0.30723.0[Info   @10:14:58.175] DateTime : 10/03/2014 18:1

我喜欢减肥我们来减肥吧

http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313278016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313282016/2015.01.28.html http://www.ebay.com/cln/honus.jyw4mvptb/cars/158313289016/2015.01.28.html http://www.ebay.com/cln/usli

百度回家看沙发沙发是减肥了卡斯加积分卡拉是减肥

http://www.ebay.com/cln/hpryu-caw8ke/cars/158056866019/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445650015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/158445674015/2015.01.31 http://www.ebay.com/cln/xub.50x2l7cj/cars/1584456790

巢哑偕倥乇椭煞谙暗逞帕俸

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

我国第三代移动通信研究开发进展-尤肖虎200106

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data scientist)明显缺乏清晰的录取标准和工作内容.此次课程以<星际争霸II>回放文件分析为例,集中在IBM Cloud相关数据分析服务的应用.面对星际游戏爱好者希望提升技能的要求,我们使用IBM Data Science Experience中的jJupyter Notebooks来实现数据的可视化以及对数据进行深度分析,并最终存储到IBM Cloudant中.这是个介绍+动手实践的教程,参会者不仅将和讲师一起在线

pl/sql学习1——标量变量psahnh6S

为类型.不能用于表列的数据类型.范围为的子类型.自然数.为的子类型.具有约束为单精度浮点数.为变量赋值时.后面要加为双精度浮点数.为变量赋值时.后面要加.为数字总位数.为小数位数是的子类型.最大精度位是的子类型.最大精度位单精度浮点型是的子类型.最大精度位双精度浮点型定义精度为位的实数..定义为位的整数.变长字符串.最长测试变量数据!.定长字符串.最长测试变长二进制字符串物理存储的为类型...固定长度.个字节使用定义数据类型那个最小值:最大值:最小值:最大值:最小值:最大值:最小值:最大值:最小

【project】品优购——01

需求分析与系统设计 品优购网上商城主要分为网站前台.运营商后台.商家管理后台三个子系统. 简介 网站前台:主要包括网站首页.商家首页.商品详细页..搜索页.会员中心.订单与支付相关页面.秒杀频道等 运营商后台:是运营商的运营人员的管理后台. 主要包括商家审核.品牌管理.规格管理.模板管理.商品分类管理.商品审核.广告类型管理.广告管理.订单查询.商家结算等 商家管理后台:入驻的商家进行管理的后台,主要功能是对商品的管理以及订单查询统计.资金结算等功能 系统架构 该项目采用SOA架构,即面向服务的

【01】Python打包输出为.exe可执行文件

这是我的第01篇博客 Python打包输出为.exe可执行文件 在完成了之前的爬虫以后,为了给电脑上没有Python环境的朋友玩我的爬虫,开始尝试把爬虫的.py文件输出成.exe可执行文件. 首先,Python的教程上提到了py2exe的模块.但是一波搜索以后发现这个玩意只支持到Python3.4,而我用的是Python3.5.2,这让我很尴尬......于是继续一波搜索,发现了一个叫PyInstaller的模块.这个模块可以完美支持Python3.5,于是怒入. 首先是安装.去sourcefo