Как справиться с разрешением Galaxy S4, так как оно слишком велико для AndEngine RatioResolutionPolicy

Я начинаю с AndEngine, следуя этому руководству:

http://www.matim-dev.com/full-game-tutorial---part-1.html

Но этот парень, похоже, использует устройство с низким разрешением для этого теста, я использую Galaxy S4 с разрешением 1920x1080, да, чертовски высокое.

Я знаю, что такое RatioResolutionPolicy, но, несмотря на то, что я использую 800x480 на своем S4, у меня есть 2 белые полосы с обеих сторон (LANDSCAPE), как если бы он был плохо изменен, мне нужно включить другие обои для очень высокого экрана устройства разрешения?

Кроме того, некоторые координаты, которые этот парень использовал в учебнике, плохо размещены на моем S4. Как я должен сделать все устройства совместимыми с этим?

ДОБАВЛЕНИЕ КОДА:

    private static int CAMERA_WIDTH = 800;
    private static int CAMERA_HEIGHT = 480; 

    @Override
    public EngineOptions onCreateEngineOptions() {
        camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
        EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.camera);
        engineOptions.getAudioOptions().setNeedsMusic(true).setNeedsSound(true);
        engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
        return engineOptions;
    }

person user3078876    schedule 07.01.2014    source источник
comment
какая у вас камера по высоте?   -  person Arpit Patel    schedule 07.01.2014
comment
высота и ширина моей камеры установлены на 800 x 480, конечно, жестко закодированы. А у меня S4 1920x1080 :/ а почему так высоко, а? (обновил сообщение, чтобы вы могли видеть этот фрагмент кода)   -  person user3078876    schedule 07.01.2014
comment
Совместимы ли используемые вами изображения с разрешением 480X800 или нет? Вы можете зафиксировать высоту и ширину камеры в зависимости от целевого разрешения.   -  person Rama    schedule 07.01.2014
comment
мои изображения 800x480 да, как фоновое главное меню. Но... похоже, что 800x480 не может адаптироваться к 1920x1080... поэтому у меня появляются белые полосы по краям... мне было интересно, как я буду поддерживать все разрешения? :/   -  person user3078876    schedule 07.01.2014
comment
Почему вы придерживаетесь этой политики. Вы можете попробовать другие политики разрешения, такие как кадрирование, полноэкранный режим...   -  person Rama    schedule 07.01.2014
comment
Обрезка, полноэкранный режим? :o можешь дать мне этот драгоценный код D: ха-ха   -  person user3078876    schedule 07.01.2014
comment
о, лол, новый FillResolutionPolicy() отлично работает!   -  person user3078876    schedule 07.01.2014
comment
пожалуйста, взгляните на мой ответ, и если вы не понимаете, попросите разъяснений. Вам не нужно знать каждое разрешение, чтобы поддерживать его, просто рассчитайте соотношение устройства, а затем создайте камеру с этим соотношением, чтобы andengine поместил ее в полноэкранный режим без необходимости обрезки или искажения. Это естественный путь. если вы форсируете полноэкранный режим, не заботясь о соотношении, у вас будут искаженные элементы (даже если разница настолько мала, что вы этого не осознаете). Но на некоторых других устройствах разница может быть больше, и пользователь это поймет.   -  person Carlos Robles    schedule 07.01.2014
comment
На самом деле Николас Грамлич говорит, что для использования FillResolutionPolicy() Beware that you have to handle the ratio of the camera to the same ratio as the screen has.   -  person Carlos Robles    schedule 07.01.2014


Ответы (1)


Ваша проблема не в разрешении, а в соотношении. ваша камера имеет соотношение 1,66, а ваше устройство имеет соотношение 1,77, то есть почти то же самое, но не то же самое.

Вам нужно рассчитать соотношение. Andengine будет проецировать камеру на любое устройство, в этом магия opengl и камеры, но если соотношение не совпадает, он должен поставить эти линии, чтобы изображение не было обрезано или искажено, например, когда вы видите 4: 3 фильма на телевизоре 16:9

Решением было бы иметь камеру с тем же соотношением сторон, что и устройство, поэтому, если соотношение отличается, у вас не будет белых полос, а, например, какой-то дополнительный фон.

Например, в вашем случае вы получаете размер устройства, получаете соотношение (1920/1080 = 1,7777), поэтому вы создаете камеру с этим соотношением. то есть:

    float device_ratio = DEVICE_HEIGHT/DEVICE_WIDTH;// in this case 1.7777 
    CAMERA_WIDTH = 800;
    CAMERA_HEIGHT = 800/device_ratio ; /// this will be 450

Итак, у вас будет камера 800x450, и вы можете иметь фоны такого же размера (или большего размера, который вы можете обрезать). То есть вам не нужно использовать изображения в полный размер устройства, а просто создать камеру того же размера, что и устройство, и создать фон, который будет нормально смотреться в этой камере. Вы создаете свой мир на этом «холсте» 800x450, а andengine проецирует его на реальное устройство. Поскольку соотношение одинаковое, все будет выглядеть нормально. ничего не обрезано, ничего не искажено и нет лишних линий.

Теперь вы должны мыслить более относительно, так как ваша камера не всегда будет точно такой же, в зависимости от устройства. Это просто, если у вас не так много жестко запрограммированных значений.

person Carlos Robles    schedule 07.01.2014
comment
Пытался использовать фон главного меню 1920x1080, приложение выдавало сообщение об ошибке puu.sh/6cmzt.png ржу не могу :( - person user3078876; 07.01.2014
comment
Вам не нужен такой большой фон, на самом деле я не знаю, насколько велика текстура GPU, но я думаю, что это слишком много. Вам нужен только фон, который хорошо выглядит в этом соотношении сторон, или фон, который вы можете обрезать, и он немного больше, чем ваша камера, поэтому он действителен для любого соотношения сторон. А вот с небольшим фоном вполне достаточно, нужно только соблюдать пропорции. - person Carlos Robles; 07.01.2014
comment
+1 к @CarlosRobles - речь идет о соотношении, а не о фактическом размере. И вы тоже правы - не используйте 1920x1080 - используйте что-то вроде 1024x576 и оставьте свои текстуры ‹= 1024x1024 - person jmroyalty; 07.01.2014
comment
Точно @ jmr499485. А также, для лучшей производительности, вы можете отслеживать, где вы помещаете изображение в текстуру, и использовать свободное место для размещения большего количества изображений, вы можете использовать столько, сколько сможете из 1024×1024. - person Carlos Robles; 07.01.2014
comment
с другой стороны, если вы спроектируете его с таким соотношением сторон S4, оно будет выглядеть иначе на других устройствах с другим соотношением сторон. Идеальным решением было бы разработать 3 распространенных соотношения сторон и определить то, которое необходимо во время выполнения для загрузки соответствующих ресурсов. - person jmroyalty; 08.01.2014
comment
Это может быть нормально, если все относительно, или если вы выбираете хорошее внутреннее соотношение для сцены, то есть и центр, независимо от того, какое соотношение камеры, и у вас больше или меньше фона в зависимости от устройства. На самом деле решение об этом зависит от конкретной игры, и это один шаг вперед. - person Carlos Robles; 08.01.2014
comment
БЕЛЫЕ ПОЛОСЫ ФОНА: они вызваны темой приложения по умолчанию. Попробуйте использовать Style.Theme_Black_NoTitleBar_Fullscreen. Тогда вы получите более желанный черный почтовый ящик, когда ваше соотношение сторон не соответствует устройству. - person Plastic Sturgeon; 08.01.2014