我编写了一个扩展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; } }
但是碰撞检测的效果并不理想。 边界框似乎比我的图像低一点。
您可以设置背景色,以确保问题不是由图像引起的。但是如果图像是简单的不透明矩形,它应该是好的。Id在中设置断点 checkHit 方法,看什么 self.frame 给予和思考一段时间,这不会太难。
checkHit
self.frame
至于 支票 方法,则应将其重命名为 checkAndSetHit ,或(更好)不要设置 dead 在那里悬挂旗帜:
支票
checkAndSetHit
dead
- (BOOL) checkHit: (CGRect) frame { return CGRectIntersectsRect(self.frame, frame); }
如果将代码重命名为 hitsFrame intersectsFrame ,但那是吹毛求疵。
hitsFrame
intersectsFrame