碰撞检测& animateWithDuration

时间:2014-03-02 00:08:34

标签: ios ios4

我试图让'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来显示跳跃时的动作。

非常感谢

JP

1 个答案:

答案 0 :(得分:1)

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

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