問題タブ [sprite-sheet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - スプライト シート配置アルゴリズム
私は、opengl とスプライト シートを使用して Android 用のシンプルな 2D ゲームを作成しています。これらのスプライト シートを作成するには、zwoptex を使用します。
私の質問は、他のアルゴリズムよりもアルゴリズムのいずれかを使用することに何らかの有用性があるかどうかです。たとえば、現在、無駄なスペースがほとんどないように見えるため、ツリーを使用しています (max rect も良いようです)。
グラフィックス カードのパフォーマンスを最適化するためにスペースを効率的に利用する以外に、追加の考慮事項はありますか。スプライトシート全体が GPU RAM に含まれていますか?
そのような可能な速度の利点がない場合、さまざまなアルゴリズムがどのように正確に機能するので、私が考えているものに対して最も効率的なものを決定できますか?
javascript - 既存のコードで EaselJS スプライト シートを使用する
画像を使用してアニメーション化する既存のコードを変更し、代わりにスプライト シートを使用したいと考えています。これには EaselJS ライブラリを使用しています。
アニメーション用のオブジェクトを作成するコード:
そして、これは完全なコードです:
作成したスプライトで使用されている画像を置き換えるにはどうすればよいですか?
ios - cocos2d ios アプリのスプライトシートにはどのような画像を入れる必要がありますか?
複数のサブ質問を含む長い質問を前もってお詫びしますが、質問はタイトルに記載されているとおりです。以下は、質問のさまざまな側面の詳細な分割です。
cocos2d を使用して作成した私のユニバーサル ios ゲームには、4 つのカテゴリの画像があります。どれをスプライト シートに入れる必要があり、どれを個別の画像としてロードしたほうがよいかを判断したいと考えています。私の現在の推測では、ゲーム全体で実行されるキャラクター アニメーションのみが、スプライトシートとしてメモリに読み込まれる値を提供します。
- ゲーム プレイ全体で実行されるキャラクター アニメーション (ユーザーがメニューにいる場合を除く): これらについては、スプライトシートに画像を配置すると、実行時のメモリ使用量が削減されると想定しています (個々のファイルが 2 バイト境界の累乗にパディングされるため)。したがって、それらはスプライトシートの候補です。あれは正しいですか?
- 小さな画像 (約 200 個) は、ゲームのプレイ中にランダムに選択され、いつでも 0 ~ 4 個表示されます。これらについては、一度に多くても 4 枚しか使用されない場合に、200 枚の画像すべてをメモリにロードする価値があるかどうかはわかりません。そのため、画像として直接アクセスする方がよい場合があります。あれは正しいですか?
- 静的メニューでのみ使用されるボタンのようないくつか (約 20) の小さなメニュー要素: メニュー項目はメニュー表示中にのみ使用されるため、スプライトシートを介したメモリ アクセスの改善にはあまり価値がないと思います。あれは正しいですか?
- メニューやゲーム プレイ シーンなどの背景として使用されるいくつかの大きな画像。これらの画像のほとんどは、画面の解像度と同じ大きさです。画面の解像度は 1 つの画像の最大サイズとほぼ同じであるため (たとえば、iPad Retina の場合、4096 x 4096 の画像サイズと 2048 x 1536 の画面サイズ)、スプライトシートを最大で 1または 2 つの大きな画像が 1 つのスプライトシートに収まります。また、これらの大きなファイルはそれぞれ 1 つのシーンでのみ使用されるため、これらすべての大きな画像を事前にメモリにスプライトシートとしてロードすることは、不要なオーバーヘッドのように思えます。したがって、スプライトシートとして直接アクセスしてください。あれは正しいですか?
関連するよくある質問:
a) 異なるシーンで使用される画像を同じスプライトシートにパックすると、そのシーンで画像のサブセットのみが使用されている場合でも、それらをメモリにロードできます。それは悪い考えだと思います。正しい?
b) 古いデバイス (iPad 1 および iPhone 3gs) でのみ、ゲーム プレイにカクつきがあります。スプライトシートはそのような吃音を減らすのに役立ちますか?
c) スプライトシートは実行時のメモリ フットプリントのみにメリットがあり、アプリ アーカイブのディスク上のサイズにはあまりメリットがないと思います。たとえば、サイズが 11.8 MB の一連のファイルをスプライトシートに入れると 11 Mb になることに気付きました。これは、圧縮によるメリットはあまりありません。それは有効な仮定ですか?
上記の私の論理的根拠についてあなたの考えを教えてください。
ありがとう
アナンド
c++ - シェーダーを使用して OpenGL でスプライトシートを描画するためのテクニック
私は現在 OpenGL を学習しており、スプライト シートから画面にスプライトを描画したいと考えています。ただし、これを正しい方法で行っているかどうかは確信しています。
私がやりたいのは、Terraria 風のタイルで世界を構築することです。つまり、私の世界を構築するすべてのタイルは 1x1 ですが、後で 2x1、1x2、2x2 などのエンティティが必要になる可能性があります。
私が今行っていることは、タイルの変換マトリックスとそのバッファーへのポインターを含む「Tile」という名前のクラスがあることです。非常に簡単です:
次に、タイルを描画するときに、バッファーをバインドし、シェーダーの UV 座標と頂点位置を更新します。その後、タイルの変換マトリックスをシェーダーに渡し、glDrawElements を使用して描画します。
これをもっと効率的に行うことはできますか?1x1 タイル用に 1 つのバッファー、2x1 タイル用に 1 つのバッファーなどを用意して、Tile クラスに UVpos と UVsize を含めて、それらをシェーダーに送信するだけでよいと考えていましたが、どうすればよいかわかりません。そうするだろう。
1x1 用に 1 つ、2x1 用に 1 つのバッファーで説明したことは、はるかに高速になるように聞こえます。
python - PySide:スプライトシートの分離/画像を連続した色の領域に分離する
私は、スプライトシートを分離する必要があるプログラム、つまり、画像を連続する色の領域に分離する必要があるプログラムに取り組んでいます。
これまで画像処理をしたことがないので、どうしたらいいのか気になります。ピクセルカラーをテストした後はどうすればよいですか?どのピクセルが各スプライトに適合するかを判断するための最良の方法は何ですか?
すべての入力画像の背景は均一であり、背景のアルファチャネルとは異なるアルファチャネルが色としてカウントされます。出力画像の順序は、左右、上下にする必要があります。私のプロジェクトはPySideで書かれているので、このタスクにも使用したいと思っていますが、必要に応じてさらにライブラリをインポートすることもできます。
返信ありがとうございます!
PS:私はPySideを使用しているので、PySideタグが適切かどうかはわかりませんが、質問にはGUIの側面は含まれていません。modが属していないと感じた場合は、遠慮なく削除してください。
たとえば、次のようなスプライトシートがあります。
私はそれをこれらに分けたい:
cocos2d-iphone - スプライトシートとスプライトを cocos2d ゲームに追加するには、どの API を使用する必要がありますか?
cocos2d iOS ゲームの作成中に、スプライトシートを追加するためのオプションがいくつかあります - CCTextureCache::addImageAsync、CCSpriteFrameCache::addSpriteFramesWithFile など - スプライトシートを追加するこれらの異なる方法を使用することの違いは何ですか?
同様に、スプライトをロードするには、CCSprite::spriteWithSpriteFrameName または CCSprite::spriteWithFile または CCSpriteBatchNode::batchNodeWithTexture などを呼び出すことができます。これらの手法を使用することの違いは何ですか?
ありがとう
アナンド
cocos2d-iphone - 空白を使わずに、読み込みシーンの背景をcocos2dに読み込むにはどうすればよいですか?
cocos2d
たくさんのアセットをロードするロードシーンがあるゲームがあります。ゲームはスプラッシュ画面から始まり、読み込みシーンを開始します。読み込みシーンは背景を読み込むことから始まります。そのため、アセットが読み込まれている間、ユーザーには読み込みシーンの背景が表示されます。
CCSprite::spriteWithFile:
ファイルパスを呼び出して渡すことにより、読み込みシーンの背景を読み込みます。loadingbackground.pvr.ccz
デバイスによって動作が異なるようです。
- iphone(3gs)シミュレーターでは、ロードシーンが期待どおりに表示されます。
- iphone retinaシミュレーターでは、読み込みシーンが表示されず(アセットがまだ多くないため、すぐに発生する可能性があります)、メインメニューシーンに直接移動します。
- iPad 3デバイスでは、スプラッシュ画面が表示され、次に0.5秒の黒い画面が表示され、メインメニューシーンが表示されます。
iPad 3で黒い画面が表示されないようにするために何ができるかを知りたいのですが、これは読み込み中の背景の読み込みに時間がかかったためだと思います。
私は次の最適化を試しました(主にメモリ最適化に関する@Steffenのブログ投稿に基づいています):
- 読み込み中の背景(元々は2.3 MB RGB8 pngファイル)をpvr.cczスプライトシートに移動し、サイズを1.8MBに縮小しました。
- 使用後すぐに画像をテクスチャから削除しました。
iPad 3でまだ黒い画面が表示されます。何か提案はありますか?
更新:問題が見つかりました-オーバーライドOnEnter
して呼び出し[[CCDirector sharedDirector]replaceScene]
、バックグラウンドスレッドからも呼び出しているコードがありました。OnEnterオーバーロードを削除し、ちらつきなしで動作しました。
ありがとう
ios - 「offset」および「sourceColorRect」キーtexturepackerpListスキーマとは何ですか?
iOS開発者が生成したスプライトシートを簡単に使用できるように、 texturepackerスキーマに一致するデータを提供する.NETサービスを作成しています。これが基本的なノードです(そして私はまだドキュメントを見つけていません):
スキーマの明らかな冗長性に加えて、「フレーム」があります。これは宛先の長方形ですか?
sourceColorRectとは何ですか?それが単なるソースである場合は、それを呼び出してsourceSizeを削除してみませんか?それは冗長性です。
また、オフセットとは何ですか?それは登録ポイントのようなものですか?原点座標情報が必要ない場合、それを無視できますか?
理想的には、このリストは次のようになります。
おそらく、単純化されたデータと、iOS開発者がimage_nameをキーとして決定し、「フレーム」が何であるかを忘れるのに必要な最低限のデータを含む独自のpListを与える方が簡単でしょう。