AndEngineでhdpi/ldpi/mdpiから画像を出し分ける/Deviceの幅を取得/フルスクリーン設定
AndEngineで画像をテクスチャ化するとき、サンプル通りに、assetsフォルダを作って読み込む方法をとっていました。
しかし、、、Deviceのdpiに応じて画像を出し分けるメソッドを最近発見したのでメモ。
//textureの幅と高さは32,64,128,256,512,1024から選ぶ Texture texture = new Texture(128, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA); TextureRegion textureRegion = TextureRegionFactory.createFromResource(texture, this, R.drawable.icon, 0, 0); engine.getTextureManager().loadTexture(texture);
TextureRegionFactory.createFromResource() メソッドを使います。
ただ、BaseGameActivityを継承しているActivityで
public final float CAMERA_WIDTH = 320; public final float CAMERA_HEIGHT = 480; @Override public Engine onLoadEngine() { Camera mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); Engine engine = new Engine(new EngineOptions(true, ScreenOrientation.PORTRAIT, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera).setNeedsSound(true).setNeedsMusic(true)); return engine; }
で、デバイスの幅をうまく320×480で調整してくれるんですが、その辺との兼ね合いが未だによくわからず。。
Deviceごとに最適な画像を表示させるのは、Androidでめんどくさいことのひとつだと思うのですが、もう一歩ですね。
このメソッドを知る前に、自分で画像を出し分けるところを作ろうとしていたのですが、そのとき調べたことなどをここにメモっておきます。(無駄な時間だったかもしれませんが、これを知れただけでもよしとするか。。。)
//フルスクリーン処理 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //Deviceの情報を取得 WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); DisplayMetrics displayMetrics = new DisplayMetrics(); display.getMetrics(displayMetrics); //Log Log.v("xdpi", String.valueOf(displayMetrics.xdpi)); Log.v("ydpi", String.valueOf(displayMetrics.ydpi)); Log.v("widthPixels", String.valueOf(displayMetrics.widthPixels)); Log.v("heightPixels", String.valueOf(displayMetrics.heightPixels)); Log.v("density", String.valueOf(displayMetrics.density)); Log.v("scaledDensity", String.valueOf(displayMetrics.scaledDensity)); Log.v("width", String.valueOf(display.getWidth())); Log.v("height", String.valueOf(display.getHeight())); Log.v("orientation", String.valueOf(display.getOrientation())); Log.v("refreshRate", String.valueOf(display.getRefreshRate())); Log.v("pixelFormat", String.valueOf(display.getPixelFormat()));