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)
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);
}
Voir aussi http: // stackoverflow.com/questions/2510354/android-activity-wont-remplir-wvga-screen – OJW