プレーヤーの画像がある単純なサンプルプロジェクトを開発したかったのですが、単純なUIViewAnimationによってこのプレーヤーをジャンプするためのロジックがあります。このプレーヤーオブジェクトを実行またはウォークさせたいのですが、通常のUIViewAnimationの種類でこれを実現するにはどうすればよいですか。 cocos2DまたはOpenGLを使用せずにものの。どんな助けでも事前に感謝されます。
3 に答える
こんにちはここにも1つのサンプルプロジェクトがありますこれがあなたが理解するのに役立つことを願っています...
サンプルコードはこちら
を使用してこれを実行する場合は、実行中の各画像または歩行中の画像を表示する必要がある、 imageviewアニメーションUIViewAnimation
と呼ばれる多数の画像を作成する必要があります。これにより、画像が歩いている、または走っているような印象を与えることができます。そうすれば、openGLやcocos2dは必要ありません。
ところで、あなたは達成したいですか?
2Dゲームでこれを行う古典的な方法は、プレイヤーキャラクターの実行アニメーションのフレームを使用してスプライトシートを作成することです。スプライトシートは、サブ画像のグリッドで構成されるビットマップ画像です。各サブ画像は、実行アニメーションの1つのフレームを保持します。実行アニメーションを前方に再生するには、フレーム番号ごとに表示するサブイメージのリストを作成する必要があります。実行アニメーションはフレーム0から始まり、指定されたフレームレートで再生されます。各フレームの終わりに定期的に起動するタイマーを作成できます。タイマーが作動したら、フレーム番号を増やします。次に、フレーム番号を使用してサブ画像のリストにインデックスを付け、現在のアニメーションフレームに表示する正しいサブ画像を選択します。プレーヤー画像を含むビューを無効にし、システムがプレーヤービューの再描画を要求したときに、現在のアニメーションフレームのサブ画像を描画します。実行アニメーションは、プレーヤーが実行されている限り、ループで繰り返されます。アニメーションをループするには、タイマーが起動したときにフレームカウンターがインクリメントされた後、その値を確認する必要があります。フレームカウンターの値が実行アニメーションのアニメーションフレームの数と等しい場合は、フレームカウンターをゼロにリセットします。次に、フレームカウンターを使用して、アニメーションの順序付けられたサブ画像のリストにインデックスを付けます。プレーヤービューは、アニメーションタイマーが起動するたびにプレーヤーが実行する方向にも移動する必要があります。アニメーションフレーム間の時間をプレーヤーの速度で乗算することにより、プレーヤービューを移動する距離を計算します。フレームカウンターの値が実行アニメーションのアニメーションフレームの数と等しい場合は、フレームカウンターをゼロにリセットします。次に、フレームカウンターを使用して、アニメーションの順序付けられたサブ画像のリストにインデックスを付けます。プレーヤービューは、アニメーションタイマーが起動するたびにプレーヤーが実行する方向にも移動する必要があります。アニメーションフレーム間の時間をプレーヤーの速度で乗算することにより、プレーヤービューを移動する距離を計算します。フレームカウンターの値が実行アニメーションのアニメーションフレームの数と等しい場合は、フレームカウンターをゼロにリセットします。次に、フレームカウンターを使用して、アニメーションの順序付けられたサブ画像のリストにインデックスを付けます。プレーヤービューは、アニメーションタイマーが起動するたびにプレーヤーが実行する方向にも移動する必要があります。アニメーションフレーム間の時間をプレーヤーの速度で乗算することにより、プレーヤービューを移動する距離を計算します。
現在のアニメーションフレームを効率的に描画するには、サブ画像をCGRectを含むNSValueオブジェクトとしてNSArrayに保存します。各CGRectは、スプライトシートにアニメーションフレームを含むサブ長方形です。サブ長方形を使用して、スプライトシートからアニメーションフレームをクリップし、スプライトシートがプレーヤービューに描画されるときに1つのアニメーションフレームのみが描画されるようにすることができます。スプライトシートは、アニメーションフレームの左上がプレーヤービューの左上と一致するように、サブ長方形の原点からオフセットして描画する必要があります。フレームカウンターは、配列から現在のアニメーションフレームを検索するためのインデックスとして使用されます。