#在蓝懿学习iOS的日子#Day6

#在蓝懿学习iOS的日子#Day6

 今天上午讲了多态,多态主要讲了一个性质:父类生成的对象可以用子类来初始化,而子类声明的对象不能用父类来初始化,举个例子:person为父类,man 和woman为person的两个子类,woman可以来初始化person声名的对象,而person却不能初始化woman声明的对象,这是由于woman具有父类person具有的一切属性和方法,而person却不一定具有woman的特性与方法,所以不能初始化子类woman声明的对象;

 self.d =self.bulletCountLabel.text.intValue;

    //当子弹小于0,程序不再运行

    ifself.d >0) {

for(inti = 0;i<<span style="font-variant-ligatures: no-common-ligatures;color: #272ad8">3; i++) {

      NSString* c = bs;

      NSLog(@"%@",c);

   }

   //遍历数组第二种方法

   for(NSString*d inbs) {

      NSLog(@"%@",d);

   }

作业步骤:

1.创建一个父类僵尸Zomb 在父类僵尸中写换图片和移动僵尸的代码 把多种僵尸间不同的图片用一个变量来表示  把速度也用一个变量speed表示

- (instancetype)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

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

    }

    return self;

}

-(void)addZomb{

    UIImage *zombImage = [UIImage imageNamed:self.name];

    float w = zombImage.size.width/8;

    //截取

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

    self.image = [UIImage imageWithCGImage:subImage];

    

    CGImageRelease(subImage);

    

    //移动僵尸

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

 

}

2.创建子类僵尸ZombA-D  继承Zomb 在子类僵尸中给图片变量赋值 给speed赋值

 

{

    self = [super initWithFrame:frame];

    if (self) {

        self.name = @"zomb_0.png";

        self.speed = 1;

       

    }

    return self;

}

3.界面中添加一个发射按钮  

4.点击按钮的时候创建一个子弹ImageView 添加到界面中并且添加到一个属性数组中

 UIImageView *bulletIV = [[UIImageView alloc]initWithFrame:CGRectMake(160, 537, 20, 20)];

        bulletIV.image = [UIImage imageNamed:@"bullet_0.png"];

        [self.view addSubview:bulletIV];

 

5.在ViewDidLoad里面开启一个Timer 每隔一段时间去调用一个moveAction方法

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

6.在moveAction方法中遍历每一个子弹 并移动子弹

 //

    for (UIImageView *b in self.bullets) {

        //移动子弹

        b.center = CGPointMake(b.center.x, b.center.y-10);

    }

7.在ViewDidload方法中 开启一个添加僵尸的Timer 每隔1秒钟随机添加一个僵尸,并且把添加到界面的僵尸添加到一个属性数组中

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

8.在moveAction中 每移动完子弹  遍历数组中每一个僵尸和子弹数组中每一个子弹判断是否碰撞,如果碰撞 删除子弹和僵尸 并且从数组中删除 删除之后切记 return

 

for (UIImageView *b in self.bullets) {

    for (Zomb *z in self.zombs) {

 //子弹和僵尸不在屏幕中显示

                [b removeFromSuperview];

                [z removeFromSuperview];

                

                //从数组中删除

                [self.bullets removeObject:b];

                [self.zombs removeObject:z];

 

                //  因为forin循环中如果修改了数组继续遍历的话会导致系统崩掉  所以修改了的话就不能再继续遍历下去了

                return;//结束方法

            }

}

9.碰撞到僵尸的时候根据不同的僵尸类型统计得分 用一个label展示出来

 

int score  =self.scoreLabel.text.intValue;

 if (CGRectIntersectsRect(b.frame, z.frame)) {

                //NO.1

                switch (z.tag) {

                    case 0:

                        self.scoreLabel.text = @(score+1).stringValue;

                        break;

                    case 1:

                        self.scoreLabel.text = @(score+2).stringValue;

                        break;

                    case 2:

                        self.scoreLabel.text = @(score+3).stringValue;

                        break;

                    case 3:

                        self.scoreLabel.text = @(score+4).stringValue;

                        break;

                        

                }

10.发射一发子弹 让记录子弹数量的label -1   如果打到僵尸 再让label+1

 //子弹发射后数量-1

        

        self.bulletCountLabel.text = @(self.d -1).stringValue;

 //判断子弹和僵尸是否有交叉

self.bulletCountLabel.text = @(self.d++).stringValue;

 

11.每次发射子弹要判断 子弹数量是否大于0 大于0才允许发射

 self.d =self.bulletCountLabel.text.intValue;

    //当子弹小于0,程序不再运行

    ifself.d >0) {

}

原文地址:https://www.cnblogs.com/odileye/p/4918725.html