Изменение размера игры в браузере

У меня проблема с изменением размера окна игры. Я читал различные сообщения на форуме, но я не мог получить правильное изменение размера изображения в игре.

Если повернуть размер экрана устройства, то хотелось бы, чтобы игра адаптировалась к ширине/высоте дисплея устройства как по горизонтали, так и по вертикали. Когда игра запустилась, она правильно масштабируется, просто включение масштабирования вашего устройства обмена неверно. Вернувшись к предыдущей ориентации экрана, устройство сохраняет свои пропорции.

В html шаблона добавляю:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Первый скрипт:

function preload() {
	...
	Global.game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;              
	Global.game.scale.pageAlignHorizontally = true;                   
	Global.game.scale.pageAlignVertically = true;
	Global.game.scale.forceOrientation(true, false);
	Global.game.scale.setMaximum();
	Global.game.scale.setScreenSize(true);
	...
}

function resize() {
	Global.game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
	Global.game.scale.pageAlignHorizontally = true;
	Global.game.scale.pageAlignVertically = true;
	Global.game.scale.forceOrientation(true, true);
	Global.game.scale.setShowAll();
	Global.game.scale.refresh();
}

Когда я использую этот код, масштаб игры корректируется при запуске игры. Когда в устройстве:

  • изменить положение с горизонтального на вертикальное, игра большая и показать прокрутку

  • изменить положение с вертикального на горизонтальное, игра плоская

Второй скрипт:

function preload() {
...
Global.game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
Global.game.scale.parentIsWindow = true;
...
}
 
 
function resize () {
Global.game.scale.refresh();
} 

Когда я использую этот код, масштаб игры корректируется при запуске игры. Когда в устройстве: 1. изменить положение с горизонтального на вертикальное, игра масштабируется, но слева и справа виден белый фон 2. изменить положение с вертикального на горизонтальное, игра масштабируется, но внизу я вижу белый фон

Я использую Фазер 2.3.

Кто-нибудь знает решение моей проблемы?

Спасибо =)

ЛУЧШЕЕ РЕШЕНИЕ

В Phaser 2.3 есть ошибка - не меняется ресайз сайта. Качаю версию 2.4.3.

Я добавил функции, загружаемые в начале, которые охраняют изменение разрешения.

    var attacks.base.x = 110;
    var attacks.base.y = 190;

    $(document).ready(function () {
       handleScreenResize(); 
    });

function handleScreenResize() {
        $(window).resize(function () {
            clearTimeout(timeoutResize);
            timeoutResize = setTimeout(function () {
            var xButtonBase;
            var yButtonBase;

            /* resize game */
            game.scale.scaleMode = Phaser.ScaleManager.RESIZE;
            game.scale.pageAlignHorizontally = true;
            game.scale.pageAlignVertically = true;
            game.scale.forceLandscape = true;
            game.scale.parentIsWindow = true;
            game.scale.refresh();

            /* get new width and height*/
            var gameWidth = game.width < game.world.width ? game.width : game.world.width;

            /** If you have static button you have change position use "cameraOffset.x" and "cameraOffset.y" set new position*/
            /* change position buttons attack */
            if(settings.control_option === 'RIGHTHAND') {
                xButtonBase = attacks.base.x;
                yButtonBase = game.height - attacks.base.y;
            } else {
                xButtonBase = gameWidth - attacks.base.x;
                yButtonBase = game.height - attacks.base.y;
            }

            /** set position buttons with attack and assist (down screen)*/
            attacks.base.button.cameraOffset.x = xButtonBase;
            attacks.base.button.cameraOffset.y = yButtonBase;

            }, 1000);
        });
    }

В preload добавить этот скрипт

 function preload() {
    ...
    Global.game.scale.scaleMode = Phaser.ScaleManager.RESIZE;
    Global.game.scale.pageAlignHorizontally = true;
    Global.game.scale.pageAlignVertically = true;
    Global.game.scale.forceLandscape = true;
    Global.game.scale.parentIsWindow = true;
    Global.game.scale.refresh();
    ...
}

person Dariusz Andryskowski    schedule 09.07.2015    source источник


Ответы (1)


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

См. этот выпуск: https://github.com/photonstorm/phaser/issues/1881 Это должно быть исправлено в Phaser 2.4 (RC1 уже вышел).

person Pandacoder    schedule 13.07.2015
comment
Благодарю за ваш ответ - person Dariusz Andryskowski; 16.07.2015
comment
Мое предложение случайно не решило вашу проблему? - person Pandacoder; 16.07.2015
comment
В версии 2.3 пробовал разные комбинации, но удовлетворительного результата не получил. Если что найду напишу. - person Dariusz Andryskowski; 16.07.2015
comment
Как я уже сказал, это должно быть исправлено в Phaser версии 2.4. Попробуйте использовать это. - person Pandacoder; 16.07.2015
comment
Pandacoder: Могу я попросить вас написать мне этот кусок кода, отвечающий за масштабирование? Я использовал это для моего выше. Я также пробовал Phaser.ScaleManager.RESIZE, но у меня это не сработало, когда я поворачиваю устройство. - person Dariusz Andryskowski; 27.07.2015