目次
忍者
3 層のアート
スプライトシート メーカー
画像形式
スプライトシートの公開
Cocos2d-X でスプライトシートを使用する
結論
ホームページ ウェブフロントエンド htmlチュートリアル アニメーションとスプライトシート_html/css_WEB-ITnose

アニメーションとスプライトシート_html/css_WEB-ITnose

Jun 21, 2016 am 09:08 AM

スプライトは単一のグラフィック画像です。画面上で移動したり、引き伸ばしたり、回転したり、歪めたり、フェードさせたり、色合いを変えたりすることができます。

スプライトシート とは、スプライトを 1 つのテクスチャ ファイルに集めたものです。これにより、指定した期間にわたってスプライトの表示フレームを順番に変更することで、単一のスプライトをアニメーション化することが簡単になります。映画のリールと同じように、スプライトシートは動きの錯覚を作成できます。

スプライトをスプライトシートに詰め込む利点は、ゲームに必要なテクスチャ メモリを実際に最適化できることです。スプライトの周囲の余分なスペースは、テクスチャから自動的にトリミングされ、実際のスプライトにロードされるときに再適用できます。スプライトに回転を適用すると、より多くのスプライトがテクスチャにきちんと収まるようになります。圧縮画像形式を使用すると、ゲームの速度と効率をさらに向上させることができます。これらのスプライトがどれほど密集しているかわかりますか?

この章では、忍者スプライトシートを作成し、それをゲームで使用する方法を学びます。

忍者

スプライトシートは、どのスプライト フレームを含めるかを決定します。プラットフォーマーの場合、必要なのは忍者が右に走ったりジャンプしたりするフレームだけです。 X 平面上で右向きのスプライトを反転して、左向きのスプライトを作成できます。

ランニング フレームには、ninja-running-e0000.png から ninja-running-e0007.png を使用します。ジャンプフレームの場合は、ninja-sidekick-e0000.png から ninja-sidekick-e0012.png までです。いくつかのスタンディング フレームも追加します: ninja-stopped0000.png から ninja-stopped0003.png まで。

3 層のアート

最近では、SD、HD、HDR の 3 層のアート アセットを作成するのに役立ちます。 (HD Retina)。 SD アセットは、画面解像度 480x320 の iPhone 3GS などの古いデバイスに使用されます。 HD アセットは、1024x768 の第 1 世代 iPad など、画面幅が 959 ピクセルを超えるデバイスに使用されます。 HDR アセットは、画面幅 >= 2000 ピクセル程度のデバイス、つまり 2048x1536 の iPad 3 に使用されます。

これほど多くのアート ファイルを作成するにはどうすればよいでしょうか?簡単。最高の解像度 (HDR) でアートを作成し、スプライトシート メーカーにそれを下位層 (SD および HD) 用にスケールダウンさせるだけです。

オリジナルの SD 忍者を HDR 解像度にスケールアップし、少しの解像度を使用することで、メディアンブラーを使用すると、見栄えの良い HDR スプライトを作成できます。

強化したいすべてのスプライトを含むフォルダーを作成し、それらをすべて一度に処理する Photoshop ドロップレットを作成しました。

ドロップレットは、カラー範囲を使用して茶色の背景色を削除し、次に別のカラー範囲を使用して影を削除します。次に、ドロップレットは、Bicubic Smoother 画像リサンプリングを使用して画像のサイズを 400% に設定します。最後に、3 ピクセルのノイズ >中央値が適用され、ファイルが保存されて閉じます。

完成した HDR ninja スプライトの zip ファイルは次のとおりです。

スプライトシート メーカー

スプライトシート メーカーは、スプライトのグループを取得し、それらをまとめてパックします。このチュートリアルでは、Texture Packer を使用します。または、Zwoptex を使用することもできます。

TexturePacker を開き、[フォルダーの追加] ボタンをクリックして、Ninja-HDR フォルダーを選択します。これにより、すべての Ninja スプライトがシートに追加されます。

次に、最適なテクスチャが作成されるようにスプライトシートを設定し、公開します。

スプライトシート設定

スプライトシートは、テクスチャ ファイルとデータファイル。テクスチャ ファイルは画像 (.png など) で、データ ファイルはテクスチャに含まれる各スプライト フレームに関する情報を含むプロパティ リスト (.plist) です。

TexturePacker にテクスチャ ファイルとデータ ファイルをエクスポートする場所を指示しましょう。データファイルの横にあるフォルダー/「...」ボタンをクリックし、保存したいフォルダーを参照するだけです。ゲームのアート アセット層には SD、HD、HDR フォルダーを作成する必要があることに注意してください。したがって、「HDR」という名前のフォルダーを作成し、「Ninja」というファイル名で保存します。

TexturePacker は、拡張子 .plist を自動的に追加して、Ninja.plist を作成し、Ninja.png テクスチャ ファイルも設定します。

ただし、PNG テクスチャ形式は非圧縮です。テクスチャの読み込みを高速化し、メモリ消費量を減らすために、「zlib 圧縮 PVR」(.pvr.ccz) 形式を使用します。 [テクスチャ形式]ドロップダウンから選択します。 TexturePacker の古いバージョンでは、コード内で PVRImagesHavePremultipliedAlpha:YES を設定することについて警告が表示される場合があります。 [無視] をクリックするだけです。

スプライト シートがテクスチャとしてロードされるときに消費するメモリ量を確認してください。この数値は TexturePacker ウィンドウの右下に表示されます。 「サイズ: 1024x1024 RAM: 4096 kB」のようなメッセージが表示されます。テクスチャ メモリの使用量を削減できるかどうか見てみましょう。

画像形式

テクスチャ形式の下に画像形式があることがわかります。デフォルトは RGBA8888 で、チャンネルあたり 8 ビット x 4 チャンネル (赤、緑、青、アルファ) を使用します。

[画像形式] ドロップダウンを開いて、他のオプションをいくつか試してください。各形式がスプライトシートのメモリ使用量にどのような影響を与えるかを観察してください。プレビューが変更され、ゲーム内でおおよそどのように見えるかが表示されます。

画像形式を RGBA8888 から変更すると、画質が少し低下し始める可能性があります。よりメモリ最適化された画像形式を使用しながら、再び正しく表示されるようにするには、いくつかのディザリング オプションを試してください。

画像形式を RGBA4444 に設定し、ディザリングを FloydSteinberg+Alpha に設定します。これらにより、RGBA8888 とほぼ同等の見栄えを保ちながら、半分のメモリを使用するテクスチャが得られます。サイズインジケーターには、「サイズ: 1024x1024 RAM: 2048 kB」のようなものが表示されます。

他の設定はすべてデフォルトで適切なはずです。自由に遊んで、スプライトシートがどのように影響を受けるかを見てください。

スプライトシートの公開

設定が完了したら、[公開] アイコンをクリックします。これにより、HDR/Ninja.pvr.ccz および HDR/Ninja.plist スプライトシート ファイルが保存されます。しかし、SD バージョンと HD バージョンはどうですか?

AutoSD ボタンをクリックして、「cocos2d-X HDR/HD/SD」プリセットを適用します。次に、データファイルとテクスチャファイルの「HDR」を「{v}」に置き換えます。 [パブリッシュ] に移動すると、HD フォルダーに 0.5 スケール シートが自動的に作成され、SD フォルダーに 0.25 スケール シートが作成されます。

これで、適切なサイズの Ninja.pvr.ccz を含む SD、HD、および HDR フォルダーが作成されました。

最終的な TexturePacker ファイルは次のようになります:

Cocos2d-X でスプライトシートを使用する

それでは、Cocos2d-X でスプライトシートを使用するにはどうすればよいでしょうか?最初に行う必要があるのは、テクスチャ ファイルをロードし、スプライト フレームをキャッシュすることです:

// set the appropriate resource directory for this deviceFileUtils::getInstance()->addSearchResolutionsOrder("HD");// load and cache the texture and sprite framesauto cacher = SpriteFrameCache::getInstance();cacher->addSpriteFramesWithFile("Ninja.plist");
ログイン後にコピー

スプライト フレームの 1 つを使用してスプライトを作成する方法は次のとおりです:

Sprite* someSprite = new Sprite;someSprite->initWithSpriteFrameName("ninja-stopped0000.png");
ログイン後にコピー

スプライト フレームの 1 つを個別に取得するには:

// get the sprite frameSpriteFrame* frame =  cacher->getSpriteFrameByName("ninja-sidekick-e0007.png");// set someSprite's display framesomeSprite->setSpriteFrame(frame);
ログイン後にコピー

アニメーションを再生するには:

#include <iomanip>// load all the animation frames into an arrayconst int kNumberOfFrames = 13;Vector<SpriteFrame*> frames;for (int i = 0; i < kNumberOfFrames; i++){  stringstream ss;  ss << "ninja-sidekick-e" << setfill('0') << setw(4) << i << ".png";  frames.pushBack(cacher->getSpriteFrameByName(ss.str()));}// play the animationAnimation* anim = new Animation;anim->initWithSpriteFrames(frames, 0.05f);someSprite->runAction(Animate::create(anim));
ログイン後にコピー

コード例は以上です。 SpriteFrame で他に何ができるかを確認したい場合は、Xcode を開き、Command キーを押しながら SpriteFrame をクリックしてください。 SpriteFrame クラスのインターフェースに移動し、そこで方法論を熟読できます。

結論

この章は以上です。

質問はありますか?以下にコメントを残してください。新しい章がリリースされたときに通知を受け取るように登録することもできます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTMLは初心者のために簡単に学ぶことができますか? HTMLは初心者のために簡単に学ぶことができますか? Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTML、CSS、およびJavaScriptの役割:コアの責任 HTML、CSS、およびJavaScriptの役割:コアの責任 Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLでの開始タグの例は何ですか? HTMLでの開始タグの例は何ですか? Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

See all articles