#在蓝懿学习iOS的日子#Day6
今天上午讲了多态,多态主要讲了一个性质:父类生成的对象可以用子类来初始化,而子类声明的对象不能用父类来初始化,举个例子:person为父类,man 和woman为person的两个子类,woman可以来初始化person声名的对象,而person却不能初始化woman声明的对象,这是由于woman具有父类person具有的一切属性和方法,而person却不一定具有woman的特性与方法,所以不能初始化子类woman声明的对象;
self.d =self.bulletCountLabel.text.intValue;
//当子弹小于0,程序不再运行
if ( self.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,程序不再运行
if ( self.d >0) {
}