代码之家  ›  专栏  ›  技术社区  ›  Raptor

在UIView中显示UIImageView的边界框

  •  1
  • Raptor  · 技术社区  · 15 年前

    我编写了一个扩展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;
    }
    
    }
    

    但是碰撞检测的效果并不理想。 边界框似乎比我的图像低一点。

    1 回复  |  直到 15 年前
        1
  •  2
  •   zoul    15 年前

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

    至于 支票 方法,则应将其重命名为 checkAndSetHit ,或(更好)不要设置 dead 在那里悬挂旗帜:

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

    如果将代码重命名为 hitsFrame intersectsFrame ,但那是吹毛求疵。

    推荐文章