iOS动画2D游戏

时间:2013-02-19 22:29:03

标签: ios objective-c animation scroll

我正在为iPhone制作应用程序,这是一款2D游戏。 我已经完成了所有的spritesheets,但现在我需要特别为它们中的一些制作动画: 我的游戏是一个游戏,你的英雄应该避免一些障碍。边界应该通过提高速度给人的印象是游戏更加困难(所以英雄看起来越来越快)。我有边框图像,但实际上不知道如何动态制作动画,当图像结束时,将图像顶部放在后面。

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

感谢您的帮助!

代码或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"];
}

1 个答案:

答案 0 :(得分:1)

首先,如果您正在制作游戏,您可能不应该使用UIKit,除非它非常简单。你应该看看像cocos2d

这样的图书馆

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

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

- (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的委托,并使用repeatCount设置为0.然后,每次完成后,您都会以较小的持续时间重新启动它。