2009-10-14 4 views
1

Я написал класс, расширяющий UIImageView, чтобы позволить мне динамически генерировать кирпичи на экране. Кирпич - 20x10 PNG.Показать ограничительную рамку UIImageView в UIView

Вот мои коды:

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

код будет читать даже крошечные немного лучше, если вам переименовали его в hitsFrame или intersectsFrame, но это ничто.

+0

Согласен с этим. Если вы действительно хотите также нарисовать рамку своего вида, просто переопределите drawRect: в своем классе и сделайте это там. (Не забудьте позвонить супер!) –

+0

Спасибо за комментарии от вас, ребята. Я переместил коды isDead обратно в мои основные коды классов игры. (p.s. Я только что начал программировать iPhone 2 дня назад, действительно новичок) – Raptor

Смежные вопросы