0

これら 2 つの機能の意図的な違いは何ですか。

    var size = cc.Director.getInstance().getWinSize();
    var sizePx = cc.Director.getInstance().getWinSizeInPixels();

私の場合、どちらもまったく同じ値を返します。

どのような場合に異なる値を返す必要がありますか?

4

2 に答える 2

2

Cocos2dx の最近のバージョンでは、与えられた答えはもはや正確ではありません。具体的には、フレームワークが明示的な Retina モードのサポートを中止し、プログラマーが画面やアセットの解像度とは無関係にゲームの解像度を設定し、スケーリングを実行できるようにしたためです。必要に応じて。

厳密に言えば、関数getWinSize()は、( を使用して) 選択した解像度の値をCCGLView::setDesignResolution(float, float, ResolutionPolicy)ピクセル単位で返します。getWinSizeInPixels()は、デザインの解像度にコンテンツ スケール ファクターを掛けたものを返しますCCDirector::setContentScaleFactor(float)。これらの関数で値を指定しない場合、Cocos2dx は現在のプラットフォームに応じて任意の値に基づいて設計解像度を選択します。たとえば、iOS では、提供された CAEAGLView のピクセル単位のサイズ (場合によっては、実際のデバイスの解像度よりも小さい場合があります) を使用しgetWinSize()getWinSizeInPixels()同じ値を返します。

getWinSize()リソースをgetWinSizeInPixels()ゲームの解像度にスケーリングしている場合は、異なる値が返されます。そのような場合getWinSizeInPixels()、リソースをスケーリングする必要がなかった場合の解決策を示します。

システムがどのように機能するかを説明するためのいくつかの可能なセットアップ:

  • 1 セットの画像、1 つのデザイン解像度、多数のデバイス解像度 = デザインのたびにスケーリングされる画像 != デバイス (アップスケールでは外観の品質が低下し、ダウンスケールでは不要なメモリ/CPU 使用量)、単一解像度のレイアウト コード (おそらくより単純)
  • 複数の画像セット、1 つのデザイン解像度、多くのデバイス解像度 = 異なるアセットがより広い範囲のターゲットをカバーするため、画像をスケーリングする必要が少なく、単一解像度のレイアウト コードが保持される
  • 複数の画像セット、複数の/採用可能な設計解像度、多くのデバイス解像度 = スケーリングの必要性が少なく、コードは解像度に明示的に依存する必要があります (おそらくより複雑になります)

少し前に Cocos2dx を調べ始めたので、何か間違っている可能性がありますが、それはいくつかのテストの結果です。

于 2017-02-14T19:39:45.607 に答える
1

1 つはポイント、論理ピクセルを返し、もう 1 つは物理ピクセルを返します。Retina ディスプレイでは、両方の値が異なります (2x)。

于 2014-05-02T08:42:58.153 に答える