これら 2 つの機能の意図的な違いは何ですか。
var size = cc.Director.getInstance().getWinSize();
var sizePx = cc.Director.getInstance().getWinSizeInPixels();
私の場合、どちらもまったく同じ値を返します。
どのような場合に異なる値を返す必要がありますか?
これら 2 つの機能の意図的な違いは何ですか。
var size = cc.Director.getInstance().getWinSize();
var sizePx = cc.Director.getInstance().getWinSizeInPixels();
私の場合、どちらもまったく同じ値を返します。
どのような場合に異なる値を返す必要がありますか?
Cocos2dx の最近のバージョンでは、与えられた答えはもはや正確ではありません。具体的には、フレームワークが明示的な Retina モードのサポートを中止し、プログラマーが画面やアセットの解像度とは無関係にゲームの解像度を設定し、スケーリングを実行できるようにしたためです。必要に応じて。
厳密に言えば、関数getWinSize()
は、( を使用して) 選択した解像度の値をCCGLView::setDesignResolution(float, float, ResolutionPolicy)
ピクセル単位で返します。getWinSizeInPixels()
は、デザインの解像度にコンテンツ スケール ファクターを掛けたものを返しますCCDirector::setContentScaleFactor(float)
。これらの関数で値を指定しない場合、Cocos2dx は現在のプラットフォームに応じて任意の値に基づいて設計解像度を選択します。たとえば、iOS では、提供された CAEAGLView のピクセル単位のサイズ (場合によっては、実際のデバイスの解像度よりも小さい場合があります) を使用しgetWinSize()
、getWinSizeInPixels()
同じ値を返します。
getWinSize()
リソースをgetWinSizeInPixels()
ゲームの解像度にスケーリングしている場合は、異なる値が返されます。そのような場合getWinSizeInPixels()
、リソースをスケーリングする必要がなかった場合の解決策を示します。
システムがどのように機能するかを説明するためのいくつかの可能なセットアップ:
少し前に Cocos2dx を調べ始めたので、何か間違っている可能性がありますが、それはいくつかのテストの結果です。
1 つはポイント、論理ピクセルを返し、もう 1 つは物理ピクセルを返します。Retina ディスプレイでは、両方の値が異なります (2x)。