需要帮助。多年来我一直坚持这个问题...... 我正在做一个触杀式鸟类射击游戏。 当这只鸟被触摸时,它就会死去,其中有一系列的图像可以激活它的血液。 这只鸟是静止的,有时候苍蝇...... 我可以使用以下代码轻松完成静态部分:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
if ([touches count]==1)
{
location = [mytouch locationInView:self];
UIView *killView = [self hitTest:location withEvent:nil];
if ([killView isKindOfClass:[UIImageView class]]) {
birdKilled = YES;
[self addSubview:[self bloodSplash:killView]];}}}
-(UIImageView *)bloodSplash:(UIView*)killedView {
UIImageView *blood = [[UIImageView alloc]
initWithFrame:CGRectMake(killedView.center.x-100.0/2.0, killedView.center.y-100.0/2.0, 100, 100)];
[killedView setHidden:YES];
blood.image = [bloodExplodes objectAtIndex:2];
[blood setAnimationImages:bloodExplodes];
[blood setAnimationDuration:0.4];
[blood setAnimationRepeatCount:1];
[blood startAnimating];
[self performSelector:@selector(cleanBlood:) withObject:blood afterDelay:.8];
return [blood autorelease];}
但对于飞行部分,我真的被困住了! 自从我了解到飞翔鸟的动画效果。 我需要在hitTest中检测它的表示层。 我可以通过“UIViewAnimationOptionAllowUserInteraction”成功完成..但问题是我无法弄清楚如何将bloodSplash函数添加到触摸点,因为它将UIImageView返回给CALayer。 这是我的试用......
-(void)touchesBegan:(NSSet *)touches withEvent: (UIEvent *)event{
if ([flyingBird.layer.presentationLayer hitTest:location]) {
CALayer* touchedLayer =
[flyingBird.layer.presentationLayer hitTest:location];
//No Idea what to do next..
}}
因为我真的不太喜欢层......如果有任何建议。
答案 0 :(得分:0)
要将图像视图添加到飞鸟视图,您需要找到正确的视图。 UIView由CALayer支持,该层将UIView作为其委托。 动画时,您需要在表示层上点击测试,然后返回到模型图层,因为那是与您相关的图层。从那里你可以通过查询图层的委托来找到相应的UIView。 所以这看起来像这样:
CALayer *hitLayer = [[flyingBird.layer.presentationLayer hitTest:location] modelLayer];
UIView *hitView = [hitLayer delegate];
这应该是您可以添加动画UIImageView的视图。