zoukankan      html  css  js  c++  java
  • #在蓝懿学习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) {

    }

  • 相关阅读:
    关闭Windows的CTRL+ALT+DEL 和 ALT+TAB组合键的方法
    VC中常用文件操作(一)
    VC 创建NT服务程序
    几个操作文件的API函数
    VC中常用文件操作(二) ——INI文件操作
    初学OpenCV之图像坐标读取函数cvGet2D()
    OpenCV学习之图像读取与显示
    SLT容器之vector简单实现C++运行时多态
    C/C++文件——数据写入、读取
    OpenCV学习之视频读取与帧的提取、显示及保存
  • 原文地址:https://www.cnblogs.com/odileye/p/4918725.html
Copyright © 2011-2022 走看看