2
NSTimerで毎秒作成される下降/アニメーションUIImageView間の衝突を検出しようとしています。コードは次のとおりです。同じ名前でアニメーション化された複数のUIImageViews間の衝突を検出します。
-(void)newobject{
int randomx = 76+ arc4random() %(290);
int randomDuration = 2+ arc4random() %(6);
int randomImage = 1+ arc4random() %(3) ;
NewObject = [[UIImageView alloc] initWithFrame:CGRectMake(randomx,0,36 ,36)];
UIImage *imag = [UIImage imageNamed:@"ball.png"];
[NewObject setImage:imag];
[self.view addSubview:NewObject];
numberofObjects += 1;
NewObject.tag = numberofObjects;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:randomDuration];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDone:finished:context:)];
NewObject.frame = CGRectMake(randomx, 300,NewObject.frame.size.width,NewObject.frame.size.height);
[UIView commitAnimations];
}
このコードは、名前がNewObjectの新しいUIImageViewを作成し、それを画面の下にアニメーション表示します。衝突を検出するために、私は毎回1.0/60と呼ばれる別のNSTimerを持っています。
-(void)Collison{
for (int i = 1; i < numberofObjects; i++) {
UIImageView *image = NewObject;
[image viewWithTag:i];
CALayer *layer = image.layer.presentationLayer;
CGRect NewObjectFrame = layer.frame;
CALayer *layer2 = Sprint.layer.presentationLayer;
CGRect SprintFrame = layer2.frame;
if (CGRectIntersectsRect(NewObjectFrame, SprintFrame)) {
[self StopTimers];
NSLog(@"hello");
}
}
}
問題は、私は場合は、コンソールは「それは動作します」と言うが、UIImageが衝突していなかったと私は画像と文字を衝突することができますが、コンソールには何も言うと同時に、ということである:ここではコードですそのキャラクターをUIImageViewと衝突させてみてください。私が言うことは信頼できないということです。助けてもらえますか?
update:コードを編集しましたが、最後に追加されたuiimageviewが検出されました。
'NewObject'はインスタンス変数ですか?あなたが作成した各NewObjectを追跡してはいけませんか?それらをNSMutableArrayに格納し、配列全体を反復処理して衝突を検出することによって、 – Ziconic
ええ、私はそれを考えていましたが、問題はどのようにNSMutableArrayにNewObjectを追加して、newObject1、NewObject2 .....などの異なる名前を付けて、衝突したオブジェクトを特定するかということです。あなたの最初の質問に答えるはいそれはインスタンス変数です。 –
UIImageViewとNSStringを含む新しいクラスを作成するのはどうですか?次に、NSStringを使用して、各オブジェクトに固有の識別子を割り当てます。 – Ziconic