質問: glview->getFrameSize(); if (frameSize.width / frameSize.height >= 1.5f) { //phone glview->setDesignResolutionSize(designResolutionSize_phone.width, designResolutionSize_phone.height, ResolutionPolicy::NO_BORDER); } else { //tablet glview->setDesignResolutionSize(designResolutionSize_tablet.width, designResolutionSize_tablet.height, ResolutionPolicy::NO_BORDER); } ``` しかし、Android端末の場合、例えばNexut10の縦横比は1.6なので、携帯電話と判定されてしまいます。 端末の物理的な画面サイズが7インチ以上の場合はタブレットと判断したいのですが、どのように判定すれば良いでしょうか。 物理サイズの取得方法等ご存知でしたら教えてください。 よろしくお願いいたします。
回答: cocos2dxは知りません。 しかし、androidのSDKにはその機能があるので、もしcocos2dxのAPIにそのような機能がなければ、Javaで呼び出す他にないでしょうね。 というわけで、以下にjavaでのやり方を説明します。 一応、参考にさせてもらったサイトも挙げておきます。 * 画面サイズを攻略して機種依存を吸収する * 画面サイズ(ピクセル)をセンチメートルに変換するには 例えば、以下のような感じで画面サイズを計算できます。 ``` package com.example.sample; import android.app.Activity; import android.os.Bundle; import android.view.Display; import android.util.DisplayMetrics; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); Display display = this.getWindowManager().getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); DisplayMetrics realMetrics = new DisplayMetrics(); display.getRealMetrics(realMetrics); TextView textView = (TextView)this.findViewById(R.id.text); textView.setText(String.format("display %dx%d (%.1f inch).\nreal %dx%d (%.1f inch).", metrics.widthPixels, metrics.heightPixels, Math.sqrt(Math.pow(metrics.widthPixels / metrics.xdpi, 2.0) + Math.pow(metrics.heightPixels / metrics.ydpi, 2.0)), realMetrics.widthPixels, realMetrics.heightPixels, Math.sqrt(Math.pow(realMetrics.widthPixels / realMetrics.xdpi, 2.0) + Math.pow(realMetrics.heightPixels / realMetrics.ydpi, 2.0)))); } } ``` 注意する点は、「Display#getMetrics」と「Display#getRealMetrics」という2つのメソッドが存在する点です。 違いは、前者はアプリケーションが使用している表示領域に対して、後者はナビゲーションバーも含む「本当の」ハードウェアの表示領域の情報を取得する点です。 つまり、いわゆるスペック表通りの数値を期待するならば、後者を使います。 しかし、「Display#getRealMetrics」はAPILevel17からの実装になっているので、それ以前のOS(android4.2より古い機種)では動作しません。 (上記のリンク先で書かれているように、隠されている可能性もありますから、強引に使用できるかもしれませんが) 上記の事を踏まえて、どちらを使用するかはご自身で決めてください。 (もしかして、ナビゲーションバーを非表示にした状態で「Display#getMetrics」を呼べば、「Display#getRealMetrics」と同じ結果になるかなぁ...) 余談ですが、「iphone ipad 判別」でググったら、iOSでの質問とは別の判別方法が出てきました。 そっちの方がいいのでは?と思いますが、いかがですかね。 まぁ、何で区別したいかの理由にもよりますので、最終的な判断はお任せします。