ディレクトリ構造に従う方法と、assetManger
そのフォルダーを異なる解像度で使用するために指定するもの。
私は調査assetManager
しResolutionFileResolver
ましたが、今まで、さまざまな解像度をサポートするためにフォルダーを指定する方法を正確に理解できませんでした。
ディレクトリ構造に従う方法と、assetManger
そのフォルダーを異なる解像度で使用するために指定するもの。
私は調査assetManager
しResolutionFileResolver
ましたが、今まで、さまざまな解像度をサポートするためにフォルダーを指定する方法を正確に理解できませんでした。
更新: Libgdx の新しいバージョンは、ファイル名を解決するために別の戦略を使用するため (ファイルではなくディレクトリを使用)、この回答は (0.9.2 だと思いますか? https://github.com/libgdx/ libgdx/コミット/3afcfe49c40196765033a90b4610159183dde981 )
ビルトインResolutionFileResolver
はディレクトリ階層を使用しません。ファイルのサフィックスを使用して、画面解像度をアセットに一致させます。
libGDX のコードは次のとおりAssetManagerTest
です。
Resolution[] resolutions = { new Resolution(320, 480, ".320480"),
new Resolution(480, 800, ".480800"),
new Resolution(480, 856, ".480854") };
ResolutionFileResolver resolver = new ResolutionFileResolver(new InternalFileHandleResolver(), resolutions);
AssetManager manager = new AssetManager();
manager.setLoader(Texture.class, new TextureLoader(resolver));
...
リゾルバーは、現在の画面解像度に基づいて、これらのサフィックスの 1 つを追加します。たとえば、480x800 のデバイスで「foo.jpg」を検索すると、「foo.jpg.480800」というファイルが開かれます。
ディレクトリに基づいてファイルを解決したい場合 (つまり、「foo.jpg」は「480x800/foo.jpg」などに解決されます)、新しいリゾルバーを作成できます。実装するだけFileHandleResolver
です。ResolutionFileResolver.javaソースは、おそらく開始するのに適した場所です。
私もこの問題に苦しんでいましたが、最終的には、libgdx で SpriteBatch または Stage を使用して何かを描画するための実用的な解決策を得ました。正投影カメラを使用すると、これを行うことができます。
まず、ゲームに最適な固定解像度を 1 つ選択します。ここでは 1280*720 (横長) を使用しています。
class ScreenTest implements Screen{
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();
OrthographicCamera camera;
SpriteBatch batch;
Stage stage;
Texture img1;
Image img2;
public ScreenTest(){
camera = new OrthographicCamera();
camera.setToOrtho(false, appWidth, appHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(camera.combined);
img1 = new Texture("your_image1.png");
img2 = new Image(new Texture("your_image2.png"));
img2.setPosition(0, 0); // drawing from (0,0)
stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
stage.addActor(img2);
}
@Override
public void render(float delta) {
batch.begin();
batch.draw(img, 0, 0);
batch.end();
stage.act();
stage.act(delta);
stage.draw();
// Also You can get touch input according to your Screen.
if (Gdx.input.isTouched()) {
System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
}
}
//
:
:
//
}
このコードを任意のタイプの解像度で実行すると、その解像度で邪魔されることなく調整されます。
OrthographicCameraを使用する場合は、異なる画像解像度を処理する必要はありません。
サイズが400x300のカメラがあるとします。次に、座標(0,0)で400x300の大きな画像を描画します。次に、画面の解像度に関係なく、画像は画面全体に拡大縮小されます。これは、画面の解像度がデバイスごとに大きく異なる可能性があるAndroidで非常に優れており、このようにすることで、それについて考える必要はありません。