使用两个定时器,一个用于找对象,另一个使对象做下落动画。一般尽量少使用定时器,因为容易造成线程卡死。耗内存。
//回收
//创建子弹
//1.创建存储子弹的数组(初始化数组要写在for循环外面)
// 100未使用状态。101使用
myBulletArray = [[NSMutableArray alloc] initWithCapacity:0];
for(inti = 0; i < 20; i ++) {
UIImageView*_myBullet = [[UIImageView alloc] initWithFrame:CGRectMake(_MyPlane1.frame.origin.x+25,-10, 5, 10)];
_myBullet.image= [UIImage imageNamed:@"zidan.png"];
_myBullet.tag= 100;
[self.viewa ddSubview:_myBullet];
//放进数组里
[myBulletArray addObject:_myBullet];
}
- (void)startTimerAction {
///find的定时器
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(findTimer) userInfo:nil repeats:YES];
//down的定时器
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(DownTimer) userInfo:nil repeats:YES];
}
#pragma mark ====找的方法
- (void)findTimer {
//遍历子弹数组100未使用状态。101使用
for(UIImageView *_myBullet in myBulletArray) {
//判断未使用状态
if(_myBullet.tag == 100) {
//拉到飞机的顶端
_myBullet.center=CGPointMake(_MyPlane1.center.x,_MyPlane1.center.y-30);
//改变状态(在使用)
_myBullet.tag= 101;
//跳出循环
break;
}
}
}
#pragma mark ==== 移动的方法
- (void)DownTimer {
for(UIImageView *_myBullet in myBulletArray) {
//找到被拉到屏幕上的子弹
if(_myBullet.tag == 101) {
//子弹上升
_myBullet.center=CGPointMake(_myBullet.center.x, _myBullet.center.y-3);
//判断是否出屏幕
if(_myBullet.center.y<= 0) {
//修改为未使用状态
_myBullet.tag= 100;
_myBullet.frame=CGRectMake(0,-40, 5,10);
}
}
}