背景:我使用的是 XCode 3.1.4,请记住这一点。但是,请不要对此发表评论。
我必须按下按钮,开火并开始。当按下 fire 时,会使用 IBAction 函数创建一个名为 one 的 UIImageView。按下 start 时,会创建一个名为 2 的 UIImageview。然后,当在 IBACtion 函数中创建 *one 时,我使用将 *one 作为 userinfo 参数传递的 NSTimer 调用另一个函数。然后我有一个移动函数,它沿 y 轴将 *1 移动 20 个像素。这非常有效,我可以创建数百个同时移动的 UIImageView。我对 start 做同样的事情,但使用不同的 UIImage 和 *two 作为 userinfo 参数。这也很有效。但是,我想为通过单击这些按钮创建的 UIImageViews 创建一个碰撞检测器。由于分配给这些按钮的指针不是全局的,我不知道该怎么做。我在下面发布我的代码:
-(IBAction)startWaves:(id)sender {
start.hidden=YES;
fire.hidden=NO;
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(createMeteors) userInfo:nil repeats:YES];
}
-(void)createMeteors{
UIImageView *one = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Meteor.png"]];
CGRect rectOne = CGRectMake(arc4random() % (310), arc4random() % (1), 35, 35);
[one setFrame:rectOne];
[self.view addSubview:one];
[NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(moveMeteorOne:) userInfo:one repeats:YES];
}
- (void)moveMeteorOne:(NSTimer *)timerOne {
UIImageView *one = timerOne.userInfo;
one.center=CGPointMake(one.center.x, one.center.y + 15);
if (CGRectIntersectsRect(one.frame, image.frame)) {
background.image = [UIImage imageNamed:@"gameOver.png"];
fire.hidden = YES;
image.hidden=YES;
}
}
-(void)createBullets{
UIImageView *two = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"lazerBeam.png"]];
CGRect rectTwo = CGRectMake((image.center.x), (image.center.y - 45), 7, 20);
[two setFrame:rectTwo];
[self.view addSubview:two];
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(moveBulletOne:) userInfo:two repeats:YES];
}
-(void)moveBulletOne:(NSTimer *)timerTwo {
UIImageView *two = timerTwo.userInfo;
two.center=CGPointMake(two.center.x, two.center.y - 15);
}
-(IBAction)fireBullets:(id)sender {
[self createBullets];
}