#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 обычно используется для того, чтобы предотвратить это, когда вы хотите, чтобы содержимое не изменяло размер (как в «плохом» примере), или если вы хотите динамически изменять макеты в зависимости от размера контейнера.