-1

基本的なCGRectIntersectsRectを使用して、次のようにスプライト間の衝突を検出しています。

if (CGRectIntersectsRect(staff.frame, imgView.frame)) {
    [self playSound];
}

ただし、staff.frameはのフレーム上を一貫して移動しているためimgView.frame、メソッドplaySoundは複数回起動されます(スプライトが相互にオーバーライドするのに必要な回数だけ)、playSoundメソッドからの不要で極端な量の再生が発生します。

そうは言ってもCGRectIntersectsRect、検出を解除する前に1回の衝突のみを許可するようにメソッドを制限することは可能ですか?

4

1 に答える 1

0

できることは、BOOLインスタンス変数を宣言し、それを使用して衝突ごとに 1 回だけサウンドを再生することです。コードは次のようになります。

if (CGRectIntersectsRect(staff.frame, imgView.frame)) {
    if (!soundPlayed) {
        soundPlayed = YES;
        [self playSound];
    }
}
else {
    soundPlayed = NO;
}

これがうまくいくかどうか教えてください。

于 2012-07-18T12:04:25.063 に答える