2010-07-01 9 views
0

Je développe actuellement ma première application android et mon premier jeu. J'ai développé sur un netbook avec un CliqXT (HVGA). Les choses vont bien, ça rend parfaitement sur le petit écran. Je savais que j'aurais des problèmes lors du rendu sur de plus grands écrans, mais les problèmes que je rencontre ne sont pas ce à quoi je m'attendais et je suis coincé.Problèmes de taille d'écran et de rendu d'activité

Donc, fondamentalement, le jeu se compose d'un SurfaceView principal sur lequel je suis en train de rendre le monde du jeu en mosaïque. J'ai suivi ce tutoriel pour commencer, et ma structure est encore assez similaire, sauf qu'il calcule les boundries en fonction de l'emplacement du joueur:

http://www.droidnova.com/create-a-scrollable-map-with-cells-part-i,654.html 

Le jeu a aussi divers bâtiments, le joueur peut entrer. En entrant, il lance une autre activité pour ce bâtiment particulier. Les activités de construction ne sont que des vues normales avec des éléments d'interface utilisateur Android définis en XML (boutons, vues de texte, etc.).

Ce que je pensais arriver:

J'attend le bâtiment UIs de rendre correctement sur l'écran plus grand. J'ai spécifié toutes les dimensions dans "dp" et les polices dans "sp" dans l'espoir qu'elles évolueraient correctement. Je m'attendais à ce que le tilemap du jeu soit rendu correctement, mais peut-être vraiment minuscule en raison de la résolution plus élevée/dpi. J'utilise une fonction très similaire au tutoriel lié ci-dessus (calculateLoopBorders(), ma version est collée ci-dessous) pour calculer le nombre de carreaux à afficher en fonction de la hauteur et de la largeur de l'écran (getHeight() et getWidth()).

Qu'est-ce qui se passe réellement:

L'ensemble du jeu vient d'être rendu comme si ce HVGA. Le tilemap et les interfaces utilisateur du bâtiment sont réduits à la taille de l'écran, laissant des bordures noires autour de la gauche, de la droite et du bas (voir images).

Si quelqu'un peut me diriger dans la bonne direction ce serait grandement apprécié, merci beaucoup!

(Certains d'entre vous reconnaître ce domaine public DOS classique)

alt text

alt text

Edit: Merci Christian pour fixer le formatage du code.

mCellHeight et mCellWidth sont la largeur/hauteur des cellules en pixels

mMapHeight et mMapWidth sont la largeur/hauteur du total mondial du jeu en nombre de tuiles

public void calculateLoopBorders() { 

    mWidth = getWidth(); 
    mHeight = getHeight(); 


    mStartRow = (int) Math.max(0, mPlayer.mRow - ((int) (mHeight/2)/mCellHeight)); 
    mStartCol = (int) Math.max(0, mPlayer.mCol - ((int) (mWidth/2)/mCellWidth)); 

    mMaxRow = (int) Math.min(mMapHeight, mStartRow + (mHeight/mCellHeight)) + 1; 
    mMaxCol = (int) Math.min(mMapWidth, mStartCol + (mWidth/mCellWidth)); 

    if (mMaxCol >= mMapWidth) { 
    mStartCol = mMaxCol - (mWidth/mCellWidth); 
    } 

    if (mMaxRow >= mMapHeight) { 
    mStartRow = mMaxRow - (mHeight/mCellHeight); 
    } 

    int x1 = mStartCol * mCellWidth; 
    int y1 = mStartRow * mCellHeight; 
    int x2 = x1 + mWidth; 
    int y2 = y1 + mHeight; 

    mBgSrcRect = new Rect(x1, y1, x2, y2); 
    mBgDestRect = new Rect(0,0, mWidth, mHeight); 
} 
+0

Voir aussi http: // stackoverflow.com/questions/2510354/android-activity-wont-remplir-wvga-screen – OJW

Répondre

0

I figured it out. Je visais 1,5 dans le projet donc il assumait HVGA. Le ciblage 2.1 corrige le problème et les bitmaps semblent même évoluer correctement en utilisant une sorte de magie Android.

J'ai encore une question cependant, quand je finis ce jeu je veux qu'il fonctionne avec les appareils 1.5+. Dois-je mettre des modèles séparés sur le marché, un pour chaque classe d'appareil? Cela ressemble à beaucoup de problèmes pour quelque chose qui pourrait être manipulé dans une ligne ou 2 de code dans l'application elle-même ... mais je n'ai jamais publié une application alors peut-être qu'il est facilement manipulé dans le processus.

+0

Vous pouvez cibler 1.6 et avoir le SDK minimum pris en charge en 1.5 ('' dans le manifeste) et faites votre code est compatible avec 1.5. Cela devrait lui permettre de fonctionner sur toutes les versions après 1.5. –

+0

Merci. Cela efface certaines choses. –