0

私のゲームは 2D の車ベースのゲームで、最終的にランダムな障害物を追加できるようになったまっすぐな無限マップがあります。車がとれる位置は 3 つだけで、すべて正常に機能しています。

ポイントは、私が最近、それが応答しないことに気づき、次のような行をAppDelegate.cppに追加して応答性を持たせようとしたことです:

glview->setDesignResolutionSize(1024.0, 600.0, kResolutionFixedWidth);

kResolutionFixedWidthkResolutionFixedHeight、およびそこに配置できる他のすべての 5 つの変数を使用しようとしましたが、画面に沿って黒い線しか表示されず、想像できるすべての画面内訳が表示されました -.-'

タイルの性質上、TMXTiledMap のサイズを手動で変更する必要があることはわかりますが (私は Tiled で行いました)、この問題に直面する方法がわかりません。

現在、1024x600 の Android デバイス向けに開発を行っていますが、タブレットとスマートフォンの両方で少なくとも最も一般的な解像度をサポートしたいと考えています。

4

1 に答える 1

0

使用したい解決ポリシーがおそらく 2 つあります。

No Borderを使用すると黒いバーは表示されませんが、エンジンがデザインの解像度をトリミングするため、隅に UI を配置したくない場合や、Visible Origin と Visible Size を使用して計算する必要がある場合があります。ポジション。

Exact Fitを使用する場合は、デザインの解像度をデバイスの正確なサイズに設定する必要があります。その後、歪みを避けるためにすべてを正しく配置およびスケーリングする必要があります。

黒いバーが表示されている場合は、ポリシーとデザイン解像度の選択に応じてアートをスケーリングする必要があります。

この wiki ページを読みましたか? http://www.cocos2d-x.org/wiki/Multi_resolution_support

以下は、私たちのゲームの 1 つに対して行うことです。

auto director = Director::getInstance();
auto glview = director->getOpenGLView();

float contentScaleFactor = 1.f;

// Set the design resolution
Size frameSize = glview->getFrameSize();
Size designSize = glview->getDesignResolutionSize();
CCLOG("defaults:");
CCLOG("framesize = {%f,%f}", frameSize.width, frameSize.height);
CCLOG("visibleSize = {%f,%f}", glview->getVisibleSize().width, glview->getVisibleSize().height);
CCLOG("designSize = {%f,%f}", designSize.width, designSize.height);
CCLOG("contentscalefactor = %f", director->getContentScaleFactor());

Vec2 origin = director->getVisibleOrigin();
CCLOG("visibleSize = %s", CStrFromSize(director->getVisibleSize()));
CCLOG("origin = {%f,%f}", origin.x, origin.y);

// Retina? 
contentScaleFactor = director->getContentScaleFactor();
float designWidth = frameSize.width / contentScaleFactor;
float designHeight = frameSize.height / contentScaleFactor;
CCLOG("contentScale = %f, designWidth/Height = {%f,%f}", contentScaleFactor, designWidth, designHeight);

glview->setDesignResolutionSize(designWidth, designHeight, ResolutionPolicy::EXACT_FIT);

// we designed the game for 480x320 (hence the divisors)
// used to scale full screen backgrounds
float fullWidthScaleFactor = designWidth/480.f;
// used to scale up most UI
float largeScaleFactor = floorf(designHeight/320.f);
// round to closest HALF step (1.0,1.5,2.0,2.5,3.0,etc)
// used for scaling UI where pixel art is affected by .1 scales
float largeScaleFactorExact = floorf(designHeight * 2.f / 320.f) * 0.5f;
// used to scale up UI that must be touchable (larger on high desnsity)
float largeScaleFactorUI = STROUND(designHeight / 320.f);

// this forces minimum of 1x scale (we should just not support these devices)
float scaleFitAll = designWidth > designHeight ? designHeight/320.f : designWidth/480.f;
if(largeScaleFactor < 1.f)
    largeScaleFactor = scaleFitAll;
if(largeScaleFactorExact < 1.f)
    largeScaleFactorExact = scaleFitAll;
if(largeScaleFactorUI < 1.f)
    largeScaleFactorUI = scaleFitAll;
于 2015-04-26T22:49:33.610 に答える