我试图让'luke'跳过一个对象,以确保游戏不会结束,但他确实这样做,但是即使他避开了该对象,游戏仍会结束,就像luke在动画过程中没有离开他的原始位置一样。

我在-(void)touchesBegin中使用了UIView animateWithDuration来尝试实现这一目标。

[UIView animateWithDuration:3
                 animations:^
 {
     luke.center = CGPointMake(luke.center.x +0, luke.center.y -60);
 }
                 completion:^(BOOL completed)
 {
     if (completed)
     {
         [UIView animateWithDuration:3
                     animations:^
          {
              luke.center = CGPointMake(luke.center.x +0, luke.center.y +60);
          }];
     }

我还使用CGRectIntersectsRect告诉我两个对象何时碰撞
-(void)collision {

if (CGRectIntersectsRect(luke.frame, smallboulder.frame)) {
    [self endgame];
}

if (CGRectIntersectsRect(luke.frame, largeboulder.frame)) {
    [self endgame];

}

if (CGRectIntersectsRect(luke.frame, cactus.frame)) {
    [self endgame];
}

最终,我能否使用设置为NSArray的动画来显示跳跃时的运动。

非常感谢

J.P

最佳答案

当使用UIView动画方法制作各种属性的动画时,实际上是在称为表示层的东西上执行动画。但是,当您使用视图的frame访问器时,它会访问模型层(而不是表示层),该模型层保存最新的值(因此在动画后保存指定的帧)。

您应该使用luke.layer.presentationLayer.frame检查“luke”的位置。

关于ios - 碰撞检测和AnimateWithDuration,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22122160/

10-12 04:55