背景:私は XCode 3.1.4 を使用しています。これを覚えておいてください。ただし、それについてコメントしないでください。
ボタンを押して、発射して、開始する必要があります。火が押されると、IBAction 関数を使用して one という名前の UIImageView が作成されます。start を押すと、two という名前の UIImageview が作成されます。次に、IBACtion 関数で *one が作成されたら、*one を userinfo パラメーターとして渡す NSTimer を使用して別の関数を呼び出します。次に、y 軸に沿って 20 ピクセルずつ *1 ずつ移動する移動関数があります。これは完全に機能し、同時に移動する何百もの 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];
}