2013-02-19 120 views
0

我正在为iPhone制作应用程序,这是一款2D游戏。 我已经完成了所有的spritesheet,但现在我需要动画他们其中的一些: 我的游戏是一个游戏,你的英雄应该避免一些障碍。边界应该移动以给人一种印象,即通过提高速度来增加游戏的难度(所以英雄看起来越来越快)。我有我的边界图像,但真的不知道如何动态地对其进行动画处理,并且当图像的末尾即将到来时,将图像的顶部放在它后面。iOS动画2D游戏

注:我知道如何进行翻译,为图像设置动画,但在这里我需要更快更快地进行动画处理,以便动态更改动画的速度。

感谢您的帮助!

代码或一个UIImageView:

nuages_bas2 = [[UIImageView alloc] initWithFrame:CGRectMake(-100, 0, 160, 1000)]; 
UIImage * ImageNuages = [UIImage imageNamed:@"Menu_nuage.png"]; 
nuages_bas2.image = ImageNuages; 
nuages_bas2.alpha = 0.0f; 
[menu_principale addSubview:nuages_bas2]; 
[nuages_bas2 release]; 

代码的动画之一:第一

- (void)AnimationNuagesBas2 
{ 
nuages_bas2.alpha = 1.0f; 
CABasicAnimation * nuagesbas2 = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; 
nuagesbas2.fromValue = [NSNumber numberWithFloat:480.0f]; 
nuagesbas2.toValue = [NSNumber numberWithFloat:-960.0f]; 
nuagesbas2.duration = 35.0f; 
nuagesbas2.repeatCount = 10; 
[nuages_bas2.layer addAnimation:nuagesbas2 forKey:@"nuagesbas2"]; 
} 
+0

你可以发布一些你使用的代码吗?所以我们知道你用什么课来做动画等...... – entropy 2013-02-19 23:43:50

+0

完成。翻译结束时,我的UIImageView必须重复,并且翻译动画必须具有动态持续时间。 – user2057209 2013-02-19 23:53:49

+0

只是为了澄清,你是否希望它在每次重复之后变得更快(因此它使用当前代码更快更快)。或者你希望它在每次重复时都能逐步加快速度? – entropy 2013-02-19 23:57:33

回答

1

第一件事,如果你正在做一个游戏,你可能不应该使用UIKit的,除非这是非常简单的事情。你应该看看库如cocos2d

至于这个问题,你可能想看看CAKeyframeAnimation。我会尝试勾画出一些代码来做这样的事情,但你可能想修改它(另外,我没有办法测试它)。

请注意,下面的内容是创建一个关键帧动画,其中的对象每次来回更短的持续时间。

- (void)AnimationNuagesBas2 
{ 
    nuages_bas2.alpha = 1.0f; 
    CAKeyframeAnimation * nuagesbas2 = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.y"]; 
    float from = [NSNumber numberWithFloat:480]; 
    float to = [NSNumber numberWithFloat:-960]; 
    int repeatCount = 10; 
    float duration = 6; 
    float durationDecrease = 0.5; 
    float t = 0; 
    NSMutableArray * values = [NSMutableArray array]; 
    NSMutableArray * times = [NSMutableArray array]; 
    [values addObject:from]; 
    [times addObject:[NSNumber numberWithFloat:0]]; 
    for (int i = 0; i < repeatCount; i++){ 
     t += duration/2; 
    [values addObject:to]; 
    [times addObject:[NSNumber numberWithFloat:t]]; 
     t += duration/2; 
    [values addObject:from]; 
    [times addObject:[NSNumber numberWithFloat:t]]; 
    duration -= durationDecrease; 
    } 

    [nuages_bas2.layer addAnimation:nuagesbas2 forKey:@"nuagesbas2"]; 
} 

另一种方法是将自己设置为代表的CABasicAnimation与0的repeatCount设置然后,每次它这样做的时候,你有一个较小的时间重新启动它。

+0

今天下午我会试试你的解决方案。你对使用UIImageView移动背景有什么想法吗?并且该图像重新启动后,fisrt图像结束?所以我可以用一张图片制作一个无限背景 – user2057209 2013-02-20 07:01:45

+0

我不确定你的背景移动是什么意思(是不是有一个简单的UIImageView背后的一切动作?)。至于无限重复,最好的方法似乎有一个非常大的repeatCount – entropy 2013-02-20 11:16:35

+0

是的,只有这一点,我想有一个UIImageView使背景移动!但是我不知道如何只用一个图像来制作这个图像? – user2057209 2013-02-20 19:01:14