それぞれのデバイスタイプに特定のアセットセットを使用したいと思っていれば、あなたは正しい方向に進んでいると思います。これまで私が行ったことは、rake
スクリプトを使用することですが、あなたが準拠している任意のmake
-/ant
のようなユーティリティを使用することです。基本的に、プロジェクトのコンパイルの前に実行されるタスクの1つは、ファイル構造を掘り下げて、これらのヘルパークラスをプログラムで構築することです。これらのマッピングを手作業で構築するという単調さを避けるのに役立ちます。それはいったんあなたが些細でない資産を得ると、麻痺することがあります。私はこのような構造でなければならない私のプロジェクトで
:
/ProjectRoot
/src
/imgs
/132dpi
/unit1.jpg
/unit2.jpg
.
/160dpi
/unit1.jpg
/unit2.jpg
.
/264dpi
/unit1.jpg
/unit2.jpg
.
/326dpi
/unit1.jpg
/unit2.jpg
.
を私は通常、スクリプトが窮地を実行します、
public interface IAssetSet {
function get DPI():uint;
function get Unit1():BitmapData;
function get Unit2():BitmapData;
}
のようなものをすべての私の資産が遵守でしょういくつかのインタフェースを持っているでしょうフォルダ/ファイルを作成し、/src/assets
のようなフォルダにactionscriptクラスを生成します。初期化コードで
public class AssetSet132dpi implements IAssetSet {
public function get DPI():uint { return 132; }
[Embed("img/132dpi/unit1.jpg")]
private var _unit1Class:Class;
private var _unit1:BitmapData;
public function get Unit1():BitmapData { return _unit1; }
[Embed("img/132dpi/unit2.jpg")]
private var _unit2Class:Class;
private var _unit2:BitmapData;
public function get Unit2():BitmapData { return _unit2; }
...
public function AssetSet132dpi() {
_unit1 = BitmapData(new _unit1Class()).bitmapData;
_unit2 = BitmapData(new _unit2Class()).bitmapData;
....
}
}
のようなものは、あなたが上で実行されているどのようなデバイスを決定したり、特定のデバイスに対してのみプリコンパイルし、必要解像度をインスタンス化します。あなたのコードのどこにいても、IAssetSetへの参照を渡し、IAssetSet.DPIに基づいて何をすべきかを理解するだけです。
これは1つのアプローチですが、他にもあります。
もう1つのアプローチは、元の画像を最高のDPIに格納してからアプリケーションのロード時に格納し、メモリで目的のDPIにダウンスケーリングし、dispose()
オリジナルにすることです。
最近、Stage3DやStarlingやnd2dのようなフレームワークで実行可能なもう1つのアプローチでは、このスケーリングを実行するのが本当にうまくいくGPUに伝統的な合成で実現可能です。
従来のコンポジットを使用している場合は、常に動的にサイズを変更するのではなく、必要なサイズのアセットを使用してパフォーマンスを向上させるように見えます。奇妙な時期やタンク性能で、これらの資産の内部表現を再生成することについては、Flashが少し奇妙になることがあります。おそらく最善のアプローチはStage3D/Starling/nd3dを活用することですが、自明なコードベースが構築されていれば、ゲームのこの時点でレンダリングエンジンを切り替えるのは簡単な作業ではないでしょう...
少なくとも、それらは私の2セントです。たぶん誰かが別の経験をしているかもしれません。
徹底的な回答といくつかの良いアイデアをありがとう。 TexturePackerのようなツールを使用することで、削り取り/建物が部分的に回避できると思います(できるだけ少ない時間でアップロードする方が良いと思われます)。しかし、私の主な関心は現在パフォーマンスです。 GPUをサポートしたSuper3ed Stage3D - デバイス上では、非常に単純な低レベルのテストでさえ、あまりうまく動作しません。 –