В настоящее время я разрабатываю свое первое приложение для Android и свою первую игру. Я развиваюсь на нетбуке с CliqXT (HVGA). Все идет хорошо, оно отлично отображается на меньшем экране. Я знал, что у меня возникнут проблемы при рендеринге на больших экранах, но проблемы, которые у меня возникают, - это не то, что я ожидал, и я как бы застрял.Проблемы с размером экрана и отображением активности
Итак, в основном игра состоит из основного SurfaceView, который я делаю для черепичного игрового мира. Я последовал за этот учебник, чтобы начать работу, и моя структура по-прежнему очень похожи, за исключением того, что рассчитывает boundries на основе местоположения игрока:
http://www.droidnova.com/create-a-scrollable-map-with-cells-part-i,654.html
В игре также есть различные здания игрок может войти. При входе в него запускается другое действие для этого конкретного здания. Действия в здании - это просто нормальные представления с элементами интерфейса Android, определенные в XML (кнопки, текстовые и т. Д.).
Что я ожидал, чтобы это произошло:
Так что я ожидал, что здание UIs для правильного отображения на большом экране. Я указал все размеры в «dp» и шрифтах в «sp» в надежде, что они будут масштабироваться правильно. Я ожидал, что фактическая игровая плитка будет отображаться в целом правильно, но, возможно, будет очень маленькой из-за более высокого разрешения/dpi. Я использую очень похожую функцию с учебником, связанным выше (calculateLoopBorders(), моя версия вставлена ниже), чтобы рассчитать, сколько фрагментов для рендеринга основано на высоте и ширине экрана (getHeight() и getWidth()).
Что на самом деле происходит:
Вся игра просто отображаются как если это HVGA. Плитка и пользовательские интерфейсы здания просто уменьшаются до меньшего размера экрана, оставляя черные границы вокруг левой, правой и нижней (см. Изображения).
Если кто-то может указать мне в правильном направлении, было бы весьма полезно, спасибо большое!
(Некоторые из вас могут признать этот публичный домен DOS классический)
Edit: Спасибо Christian для фиксации кода форматирования.
mCellHeight и mCellWidth являются ширина/высота ячейки в пикселях
mMapHeight и mMapWidth являются ширина/высота от общего мира игры в количестве плиток
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);
}
Также см. Http: // stackoverflow.com/questions/2510354/android-activity-wont-fill-wvga-screen – OJW