若要判斷兩個 ImageView 物件是否發生碰撞,可使用 SDK 內建的 CGRectIntersectsRect 函式,其程式碼如下。(View-based Template)
//被Timer/計時器所執行的函式,其目的是讓兩個ImageView以相反方向左右來回移動
-(void)objectMoving:(NSTimer *)theTimer {
objectViewA.center = CGPointMake(objectViewA.center.x + objectMovementA.x, objectViewA.center.y + objectMovementA.y);
objectViewB.center = CGPointMake(objectViewB.center.x + objectMovementB.x, objectViewB.center.y + objectMovementB.y);
//呼叫自行定義的檢測碰撞函式
[self intersectDetection];
//設定物件objectViewA移動到達螢幕邊界時,的反彈動作
if (objectViewA.center.x <= 20 || objectViewA.center.x >= 300) {
objectMovementA.x = -objectMovementA.x;
}
if (objectViewB.center.x <= 20 || objectViewB.center.x >= 300) {
objectMovementB.x = -objectMovementB.x;
}
}
以下自行定義的檢測碰撞函式。
-(void) intersectDetection {
//iOS SDK內建的碰撞函式,發生碰撞會回傳YES
if (CGRectIntersectsRect(objectViewA.frame, objectViewB.frame)) {
messageLabel.text = @"發生碰撞";
}
else {
messageLabel.text = @"";
}
}
請問可以提供範例下載嗎?光這樣看不懂=.=因畫面上只有兩個imageView,但程式卻有四個=.=
回覆刪除程式只有2個view唷,objectViewA與objectViewB,它們就是圖上面看到的深淺灰色矩形。
刪除至於 objectMovementA 與 objectMovementB ,非常抱歉程式碼並沒有說的很清楚,這兩個其實只是CGPoint,它們的作用只是「定義」objectViewA和objectViewB的「位移量」。
而本篇的「關鍵」程式碼,用來判斷兩個View是否碰撞,只有 CGRectIntersectsRect(objectViewA.frame, objectViewB.frame)。
造成您的誤會,真的非常抱歉。
就兩個uiview的CGRect矩形區塊重疊啦,還看得懂,感謝了~
回覆刪除不客氣!
刪除