码迷,mamicode.com
首页 > 移动开发 > 详细

2015 IOS  植物大战僵尸初版——在蓝懿教育 学习笔记

时间:2015-09-27 09:57:05      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:

 

 

创建僵尸类zomb,继承UIIV

 

 

把VC的即使时间timer放到僵尸类的初始化方法中

- (instancetype)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

         [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(changeImage) userInfo:nil repeats:YES];

    }

    return self;

}

 

 

此时换图片的代码也搬到僵尸类中

 

-(void)changeImage{

    

 

    //    截取图片

    //

UIImage *zombImage = [UIImage imageNamed:@"zomb_2"];

 

 

    float w = self.zombImage.size.width/8;

    

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

    

    

    

    self.image = [UIImage imageWithCGImage:subImage];

    

    

    

    self.center = CGPointMake(self.center.x-self.speed, self.center.y);

 

}

 

但此时爆红,原因是没有吧zombIV去掉,以上是去掉zombIV的效果,因为这是他自身所以就不用署名,并且添加self。

 

 

此时还需要属性count。所以在。h中声明属性

 

@property (nonatomic)int count;

 

 

回到VC中可以删除创建僵尸的代码

 

并且import zomb。

在vc中写入

 

 

————————————

要创建多重僵尸的话,要继承与僵尸zomb

 

创建zombA。 并且在父类zomb初始化中删除创建的僵尸图片

 

UIImage *zombImage = [UIImage imageNamed:@"zomb_2"];————————删除!!!!!!!

 

 

(因为父类的作用是仅仅吧相同的东西提取出来)

 

——进入zomb。h中创建@property (n,,strong)UIIMage *zombImage;

 

 

——进入zombA。m中初始化给图片属性赋值

 

Self*zombImage = [UIImage imageNamed:@"zomb_0”];

 

 

 

——此时,只有给子类赋值才有有值,所以在VC中import ZombA 。h

 

在VDL中  

 

 

 

此时可以创建B、C僵尸————————————————依然继承Zomb

 

唯一是图片不同,所以在初始化中更改图片

 

并且在VC中声明B和C类  并在VDL中复制两个Z2和Z3

 

此时可以设置ZombA *。。。中把A删掉,都改成Zomb *。。。

继承父类

 

 

此时僵尸要有速度,所以要在父类zomb中changeImage中的移动速度中的内容变成属性,变量,所以

 

 self.center = CGPointMake(self.center.x-self.speed, self.center.y);

 

所以要在。h中声明@property (nonatomic)float speed;

 

此时要在不同子类初始化中赋值speed 分别的速度 self。speed = 。。。

 

————————————此时僵尸如何添加就搞定——————————————

 

 

在VDL中设置添加僵尸事件timer

 

[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(addZomb) userInfo:nil repeats:YES];

 

此时要让界面随机添加随机僵尸

 

 

首先先把屏幕横过来,(吧sb横过来,添加背景图片)

 

 

所以在方法中

 

-(void)addZomb{

    

    

    int random = arc4random()%4; ————僵尸数量

    

    Zomb *z = nil;

 

 

    

    int line = arc4random()%5  + 1;

    switch (random) {

        case 0:

            z = [[ZombA alloc]initWithFrame:CGRectMake(self.view.bounds.size.width或者320, line*50(一行的高度), 30, 50)];

            break;

        case 1:

            z = [[ZombB alloc]initWithFrame:CGRectMake(self.view.bounds.size.width,line*50, 30, 50)];

            break;

        case 2:

            z = [[ZombC alloc]initWithFrame:CGRectMake(self.view.bounds.size.width, line*50, 30, 50)];

            break;

        case 3:

            z = [[ZombD alloc]initWithFrame:CGRectMake(self.view.bounds.size.width, line*50, 30, 50)];

            break;

 

    }

    

    [self.view addSubview:z];

}

 

 

 

但此时界面中会卡死

 

所以要在zomb.m中添加

 

CGImageRelease(subImage);

 

 

————————————————此时添加僵尸成功——————————————

此时可以在界面sb中拖入上方的工具选择栏

 

以及Label计数

 

 

 

并添加UIIV

 

创建好UIIV关联:关联时关联其中一个 选择并且关联剩余三个成为数组

 

 

此时关联图片,但是素材图片是一条所有图,所以要裁减,并且取消100元的射手(因为素材有误)

 

 

 

 

———在VDL中初始化界面:建立方法initUI{},在里面截取图片,

 

首先取出图片,并且遍历(因为用到位置所以不能用forin)

 

 

-(void)initUI{

    UIImage *plantsImage= [UIImage imageNamed:@"seedpackets"];

    float w = plantsImage.size.width/18;

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

        UIImageView *plantIV = self.plantIVs[i];

        

        float x = 0;

        switch (i) {

//            case 0:

//                x = 0;

//                break;

                

            case 1:

                x = 2*w;

            break;

            case 2:

                x = 3*w;  N*W是取决于图片的位置

            break;

            case 3:

                x = 5*w;

            break;

        }

        

        CGImageRef(截取命令) subImage = CGImageCreateWithImageInRect(plantsImage.CGImage, CGRectMake(x, 0, w, plantsImage.size.height));

        plantIV.image = [UIImage imageWithCGImage:subImage];

        

        

    }

    

    

 

}

 

 

 

——————————————————此时可以创建植物类——————————

 

建立继承与UIIV的父类, plant

 

此时复制僵尸父类中的内容 改下名称 并且把speed删除

在。h中

@property (nonatomic, strong)UIImage *plantImage;

 

@property (nonatomic)int count;

并且改下。m中的名字plantimage

 

 

——————————然后创建向日葵,————————

创建向日葵类继承于plant的SunFlower

 

首先在初始化方法中更改图片内容

 

 

在VC中添加拖拽方法

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

 

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

   

}

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

 

    

 

——————————————————————————————————

 

其中在

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

    UITouch *t = [touches anyObject];

         ————判断点击的位置是否点击到相应图片

    CGPoint p = [t locationInView:self.view];

      ——用户点击的位置 = 图片的位置

    for (UIImageView *plantIV in self.plantIVs) {

        

        if (CGRectContainsPoint(plantIV.frame, p)) {—————— 判断点击的点有没有在植物当中

            

 

    ((( 此时给在sb中添加的四个IV添加标识 并添加tag 

 

因为向日葵要拖拽移动而且不仅是向日葵需要拖动 所以就要导入植物父类并设置成属性:

 

 

@property (nonatomic, strong)Plant *dragPlant;)))

 

 

 

——————然后回到判断中

 

import sunFlower

 

 

 

 

            switch (plantIV.tag) {

                case 0:——向日葵

                    self.dragPlant = [[SunFlower alloc]initWithFrame:plantIV.frame];——设置大小与植物一样

                    break;

                    

                case 1:

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

                    break;

                case 2:

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

                    break;

                case 3:

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

                    break;

                    

            }

            

            [self.view addSubview:self.dragPlant];

            

        }

        

    }

 

}

 

————————————————————这只是向日葵的东西,——————————

 

但基本都一样生育三个

 

 

——————————————

此时要点击移动 所以进入

 

 

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

    UITouch *t = [touches anyObject];

    self.dragPlant.center = [t locationInView:self.view];

 

}

 

 

 

 

 

 

 

2015 IOS  植物大战僵尸初版——在蓝懿教育 学习笔记

标签:

原文地址:http://www.cnblogs.com/lovemyios/p/4841854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!