2010-07-01 2 views
0

В настоящее время я разрабатываю свое первое приложение для 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 классический)

alt text

alt text

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

Также см. Http: // stackoverflow.com/questions/2510354/android-activity-wont-fill-wvga-screen – OJW

ответ

0

я понял это. Я нацелился на 1,5 в проекте, поэтому предполагал HVGA. Ориентация 2.1 устраняет проблему, и растровые изображения даже кажутся правильно масштабируемыми с использованием какой-либо магии Android.

У меня все еще есть вопрос, хотя, когда я заканчиваю эту игру, я хочу, чтобы она работала с более чем 1.5 устройствами. Нужно ли мне размещать отдельные сборки на рынке, по одному для каждого класса устройств? Это похоже на массу проблем для того, что может быть обработано в строке или 2 кода в самом приложении ... но я никогда не выпускал приложение, поэтому, возможно, его легко обрабатывать в процессе.

+0

Вы можете настроить таргетинг на 1.6 и иметь минимально поддерживаемый SDK как 1.5 ('' в манифесте) и сделать ваш код совместимым с 1.5. Это должно позволить ему работать со всеми версиями после 1.5. –

+0

Спасибо. Это проясняет некоторые вещи. –

Смежные вопросы