2

ディレクトリ構造に従う方法と、assetMangerそのフォルダーを異なる解像度で使用するために指定するもの。

私は調査assetManagerResolutionFileResolverましたが、今まで、さまざまな解像度をサポートするためにフォルダーを指定する方法を正確に理解できませんでした。

4

3 に答える 3

4

更新: 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ソースは、おそらく開始するのに適した場所です。

于 2013-02-04T16:56:18.287 に答える
2

私もこの問題に苦しんでいましたが、最終的には、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));
	   }
	   
	}
  //
  : 
  :
  //
}

このコードを任意のタイプの解像度で実行すると、その解像度で邪魔されることなく調整されます。

于 2015-01-08T10:23:20.743 に答える
0

OrthographicCameraを使用する場合は、異なる画像解像度を処理する必要はありません。

サイズが400x300のカメラがあるとします。次に、座標(0,0)で400x300の大きな画像を描画します。次に、画面の解像度に関係なく、画像は画面全体に拡大縮小されます。これは、画面の解像度がデバイスごとに大きく異なる可能性があるAndroidで非常に優れており、このようにすることで、それについて考える必要はありません。

于 2013-02-03T22:07:26.847 に答える