iphone开发:碰撞检测不适用于动画

时间:2012-08-27 13:08:33

标签: iphone ios animation imageview collision-detection

下面的代码只是从屏幕顶部创建小方块并移动到底部。我还有一个UIImageView(播放器),它由x轴上的加速度计控制。目的不是触及动画对象。就像一场简单的比赛。虽然我没有错误但我无法检测到碰撞。我在代码中找不到错误。可能是什么问题?

-(void)printOut:(NSTimer*)timer1;
{


    for (int i = 0; i < 100; i++) {

        p = arc4random_uniform(320)%4+1;

        CGRect startFrame = CGRectMake(p*50, -50, 50, 50);
        CGRect endFrame   = CGRectMake(p*50, CGRectGetHeight(self.view.bounds) + 50,
                                       50,
                                       50);

        animatedView = [[UIView alloc] initWithFrame:startFrame];
        animatedView.backgroundColor = [UIColor redColor];

        [self.view addSubview:animatedView];

        [UIView animateWithDuration:2.f
                              delay:i * 0.5f
                            options:UIViewAnimationCurveLinear
                         animations:^{animatedView.frame = endFrame;}
                         completion:^(BOOL finished) {[animatedView removeFromSuperview];}];


        CGRect movingFrame = [[animatedView.layer presentationLayer] frame];

        if(CGRectIntersectsRect(player.frame, movingFrame)){
            [timer invalidate];
            NSLog(@"asdad");

            UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"You Lost" message:[NSString stringWithFormat:@"You were hit!"] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
            [alert show];
        }

    }

    [timer1 invalidate];

}

1 个答案:

答案 0 :(得分:1)

您无法检测到碰撞,因为系统始终知道动画的唯一帧值是起始帧和结束帧。因此,除非您尝试检测碰撞的对象与第一个对象的开始或结束帧碰撞,否则您需要找到一种不同的方法来检测它。 UIView动画是为美学而非游戏逻辑而设计的。