0

2DゲームであるiPhone用のアプリケーションを作っています。私はすべてのスプライトシートを作成しましたが、今度はそれらのいくつかを特にアニメーション化する必要があります。私のゲームは、ヒーローがいくつかの障害物を回避する必要があるゲームです。境界線を動かして、速度を上げることでゲームがより難しいという印象を与える必要があります(したがって、ヒーローはどんどん速く進んでいるように見えます)。境界線の画像はありますが、動的にアニメーション化する方法がわかりません。画像の終わりが来たら、画像の上部をその後ろに配置します。

注:画像をアニメーション化するための翻訳方法は知っていますが、ここでは、アニメーションの速度を動的に変更するために、画像をどんどん速くアニメーション化する必要があります。

ご協力いただきありがとうございます !

コードまたは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];

アニメーションの1つのコード:

- (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"];
}
4

1 に答える 1

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

もう 1 つのアプローチは、自分自身をデリゲートとしてCABasicAnimation設定し、repeatCount を 0 に設定することです。

于 2013-02-20T00:26:49.933 に答える