Как создавать адаптивные игры через Phaser

Я создаю простую игру через Phaser.io. Как мне заставить ее правильно отображаться на разных экранах?

Когда я использую это:

var w = window.innerWidth * window.devicePixelRatio,
h = window.innerHeight * window.devicePixelRatio;

var avaProfile = game.add.image(w/1.66, h/6.3, 'avaProfile');
avaProfile.fixedToCamera = true;

как то так происходит

И я даже не представляю, как сделать все элементы адаптивными

1 ответ

Решение

Во-первых, если вы хотите расположить свою кнопку в соответствии с размером игры, вам, вероятно, следует использовать game.width / game.height, которые являются более надежными.

Теперь, если вы хотите адаптировать положение вашей кнопки в соответствии с размером экрана, волшебного решения не существует. Вот общая статья о теме, например. Вы должны решить, из какого источника вы будете располагать каждый элемент пользовательского интерфейса, будь то угол экрана, центр экрана, объект игрового процесса и т. Д., И предугадать, как все изменится в случае изменения разрешения.

Например, если вы хотите иметь всплывающее окно в центре экрана, вы сделаете что-то вроде:

var popup = game.add.sprite(game.width/2, game.height/2, 'popup');
popup.width = 400;
popup.height = 400;
popup.anchor.set(0.5, 0.5);

Теперь, чтобы дать ему название, вы, вероятно, захотите расположить его в соответствии с самим всплывающим окном:

 var text = game.add.sprite(popup.x, popup.y + 10, 'Hello world');
 text.anchor.set(0.5, 0);

и т.д. Нет единого решения, которое подходит всем, но проясните, что использует то, что является источником, и, надеюсь, у вас не будет сюрпризов при изменении размера экрана.

Другие вопросы по тегам