2009-10-14 10 views
1

J'ai écrit une classe qui étend UIImageView afin de me permettre de générer dynamiquement des briques à l'écran. La brique est un PNG 20x10.Afficher la boîte de délimitation de UIImageView dans UIView

Voici mes codes:

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

Ensuite, j'ai une simple fonction de détection de collision dans la même classe:

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

} 

Mais la détection de collision est pas bien joué. La zone de délimitation semble un peu plus basse que mon image. Comment montrer le cadre de délimitation afin de me permettre de vérifier la collision?

Si le code n'est pas clair, je peux fournir plus d'informations.

Répondre

2

Vous pouvez définir la couleur d'arrière-plan pour être sûr que le problème n'est pas causé par l'image. Mais si l'image est rectangle opaque simple, ça devrait aller. Je voudrais mettre un point d'arrêt dans la méthode checkHit, voir ce que self.frame donne et penser pendant un moment, il ne peut pas être trop difficile.

Et comme pour la méthode checkHit, vous devez renommer à checkAndSetHit, ou (mieux) ne fixent pas là drapeau dead:

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

Le code lirait même un tout petit peu mieux si vous l'a rebaptisé hitsFrame ou intersectsFrame, mais c'est en train de cogner.

+0

D'accord avec ceci. Si vous voulez vraiment dessiner le cadre de votre vue, remplacez drawRect: dans votre classe, et faites-le là. (Ne pas oublier d'appeler super!) –

+0

Merci pour les commentaires de vous les gars. J'ai replacé les codes isDead dans mes principaux codes de cours. (p.s. Je viens de commencer la programmation iPhone il y a 2 jours, un débutant) – Raptor