我正在为 iPhone 制作一个应用程序,这是一款 2D 游戏。 我已经完成了所有的 Sprite 表,但现在我需要特别制作其中一些动画: 我的游戏是你的英雄应该避开一些障碍的游戏。边界应该移动,通过增加速度给人一种游戏变得更加困难的印象(因此英雄看起来越来越快)。我有边框图像,但真的不知道如何动态地为其设置动画,并且当图像结束时,将图像的顶部放在它后面。
注意:我知道如何进行翻译,为图像设置动画,但在这里我需要越来越快地设置动画,以便动态更改动画的速度。
感谢您的帮助!
代码或 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"];
}
最佳答案
首先,如果您正在制作游戏,您可能不应该使用 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
的委托(delegate),并将其重复计数设置为 0。然后,每次完成时,您都会以较小的持续时间重新启动它。
关于iOS 动画 2D 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968800/