2009-10-14 74 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