2009-10-14 65 views
1

我寫了一個擴展UIImageView的類來允許我在屏幕上動態生成磚。這塊磚是20x10 PNG。在UIView中顯示UIImageView的邊界框

這裏是我的代碼:

- (id) initBrick:(NSInteger *)str x:(float)ptX y:(float)ptY { 
int brickIndex = arc4random() % 10 + 1; 
NSString *filename = [NSString stringWithFormat:@"brick%d.png", brickIndex]; 

UIImage *brickImage = [UIImage imageNamed:filename]; 
CGRect imageRect = CGRectMake(0.0f, 0.0f, 20.0f, 10.0f); 
[self initWithFrame:imageRect]; 
[self setImage:brickImage]; 
self.center = CGPointMake(ptX, ptY); 
self.opaque = YES; 
self.isDead = NO; 
return self; 
} 

然後,我在同一個班一個簡單的碰撞檢測功能:

- (BOOL)checkHit:(CGRect)frame { 
if(CGRectIntersectsRect(self.frame, frame)) { 
    isDead = YES; 
    return YES; 
} else { 
    return NO; 
} 

} 

但不進行碰撞檢測好。 邊界框看起來比我的圖像低一點。 如何顯示邊界框以便讓我檢查碰撞?

如果代碼不清楚,我可以提供更多信息。

回答

2

您可以設置背景顏色以確保問題不是由圖像引起的。但如果圖像是簡單的不透明矩形,那應該沒問題。我會在checkHit方法中設置一個斷點,請參閱self.frame給出並思考一段時間,它不會太難。

而且作爲checkHit方法,您應該重新命名爲checkAndSetHit,或(更好的)不設置dead標誌有:

- (BOOL) checkHit: (CGRect) frame 
{ 
    return CGRectIntersectsRect(self.frame, frame); 
} 

的代碼會讀,甚至一個微小的更好一點,如果你將它重命名爲hitsFrameintersectsFrame,但這是挑剔的。

+0

同意這一點。如果你真的想繪製視圖的框架,只需在你的類中重寫drawRect:並在那裏完成。 (別忘了叫超級!) – 2009-10-14 05:39:09

+0

感謝你們的評論。我已將isDead代碼移回到我的主要遊戲類代碼中。 (p.s.我剛剛開始iPhone編程2天前,一個真正的新手) – Raptor 2009-10-14 06:23:45