1

我编写了一个扩展 UIImageView 的类,以便让我在屏幕上动态生成砖块。砖是 20x10 PNG。

这是我的代码:

- (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;
}

}

但是碰撞检测没有很好地执行。边界框似乎比我的图像低一点。如何显示边界框以便我检查碰撞?

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

4

1 回答 1

2

您可以设置背景颜色以确保问题不是由图像引起的。但如果图像是简单的不透明矩形,应该没问题。我会在checkHit方法中设置一个断点,看看self.frame给出了什么并思考了一段时间,这不会太难。

至于checkHit方法,您应该将其重命名为checkAndSetHit,或者(更好)不要在dead那里设置标志:

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

hitsFrame如果将代码重命名为or ,该代码的阅读效果会更好一些intersectsFrame,但这是吹毛求疵。

于 2009-10-14T05:07:06.130 回答