2015-04-25 2 views
0

Mon jeu est basé sur une voiture 2D, avec une carte infinie droite où j'ai finalement pu ajouter quelques obstacles aléatoires. Il y a seulement 3 positions où la voiture peut être, et tout fonctionne bien.Comment rendre TMXTiledMap réactif?

Le point est que je l'ai récemment remarqué qu'il ne répond pas, et essayé de le rendre réactif en ajoutant une ligne comme ceux-ci l'un à l'AppDelegate.cpp:

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

I « ai essayé d'utiliser kResolutionFixedWidth, kResolutionFixedHeight et tous les autres 5 variables que vous pouvez mettre là-bas, mais je ne suis des lignes noires le long de l'écran et chaque panne d'un seul écran, vous pouvez imaginer -.- »

Je peux comprendre que j'ai besoin de redimensionner mon TMXTiledMap manuellement en raison de la nature des tuiles (je l'ai fait avec Tiled), mais je ne sais pas comment faire face à ce problème.

Notez que je suis en train de développer pour un appareil Android 1024x600 mais je voudrais supporter au moins les résolutions les plus courantes pour les tablettes et les smartphones.

+0

Quel était le problème avec ma question? Est-ce que le poli est un problème ici? – jjimenezg93

Répondre

0

Il existe probablement 2 stratégies de résolution que vous souhaitez utiliser.

Si vous utilisez No Border alors vous ne devriez pas voir les barres noires, mais le moteur recadrer la résolution de votre conception de sorte que vous ne voulez pas mettre l'interface utilisateur dans les coins, ou vous aurez envie d'utiliser Visible Origine et taille visible pour calculer les positions.

Si vous utilisez Exact Fit vous devez définir la résolution de la conception à la taille exacte des périphériques, puis vous êtes responsable du positionnement et de la mise à l'échelle de tout correctement pour éviter la distorsion.

Vous devrez adapter votre art selon vos choix de politique et de résolution de conception si vous voyez des barres noires.

Avez-vous lu cette page wiki? http://www.cocos2d-x.org/wiki/Multi_resolution_support

Voici ce que nous faisons pour l'un de nos jeux:

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; 
+0

Oui, j'ai lu la page wiki et je n'ai rien compris, c'est pourquoi j'ai demandé ça. Je vais essayer ce que vous avez dit dans quelques jours, quand je finirai ce Sprint. Je vois le point et je suppose que c'est la solution. Merci pour votre réponse – jjimenezg93