Большинство Flash-игр не изменяют размер должным образом в окне браузера. Как я могу легко заставить свою игру делать это?

#javascript #flash #actionscript-3 #actionscript

#javascript #flash #actionscript-3 #actionscript

Вопрос:

Большинство браузерных игр на основе flash, похоже, не изменяют размер должным образом, когда пользователь изменяет размер окна своего браузера (например, ctrl колесо мыши).

Пример неправильного изменения размера: Boxhead The Zombie Wars. Пожалуйста, воздержитесь от игры на мгновение, чтобы не забыть о моем вопросе.

Некоторые (на удивление, очень немногие) действительно изменяют размер должным образом. Пример (по крайней мере, в Chrome): D.N.8

Существует ли простой или стандартный метод для достижения правильного изменения размера? Как вы это делаете?

Комментарии:

1. Я не знаю ответа, но я хотел поблагодарить вас за напоминание о том, насколько забавен Boxhead. Я только что потратил несколько минут, и скоро будет еще больше. Отличная игра!

Ответ №1:

Это возможно, для начала вам нужно убедиться, что сцена не масштабируется автоматически при изменении окна просмотра проигрывателя, и выбрать выравнивание, в котором ваша сцена будет «прилипать» по мере увеличения окна просмотра:

 stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
  

Как только это будет сделано, вы должны прослушать событие ИЗМЕНЕНИЯ размера сцены, чтобы при изменении размера окна проигрывателя / области просмотра вы могли проверить новый размер и соответствующим образом отобразить свой пользовательский интерфейс:

 var resizeTimeout:uint;

stage.addEventListener(Event.RESIZE, onResize);
function onResize(e:Event=null):void 
{
    // Try setting a delay to workaround a weird bug when leaving fullscreen mode where the
    // dimensions aren't updated properly, even though a resize event is triggered..?
    if (resizeTimeout)
        clearTimeout(resizeTimeout);

    resizeTimeout = setTimeout(
        function ()
        {
            trace("resizing: "   stage.stageWidth "x" stage.stageHeight);
            // Re-layout from here
        },
        250);
}
  

Как вы можете видеть, я исправляю здесь ошибку, которая может быть необязательной в вашем случае. Без отключения режима масштабирования проигрыватель автоматически изменит размер вашей сцены в соответствии с областью просмотра, не позволяя вашему приложению заметить изменения. Это может привести к проблемам при изменении соотношения ширины / высоты.

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

Комментарии:

1. Однако, глядя на игру, которую вы привели в качестве плохого примера, кажется, что они отключили масштабирование и заставили ее придерживаться TOP_LEFT , но не потрудились изменить что-либо при изменении размера окна просмотра.. что немного странно, поскольку, я думаю, было бы лучше, если бы она просто масштабировалась по умолчанию

2. Это прекрасный ответ о no_scale, но он более или менее противоположен тому, что нужно запрашивающему. Вы должны объяснить, что для большинства материалов лучше всего использовать один из других режимов масштабирования и позволить Flash автоматически масштабировать содержимое вверх или вниз. Предположительно, это то, что происходит в приведенном «хорошем» примере. Использование no_scale обычно используется для того, чтобы предотвратить это, когда вы хотите, чтобы содержимое не изменяло размер (как в «плохом» примере), или если вы хотите динамически изменять макеты в зависимости от размера контейнера.