Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.11.2012, 00:35
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 11  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Sintesis Посмотреть сообщение
Конечно только событие RESIZE слушать, оно для этого и сделано.
Немного неверно. В режимах отличных от StageScaleMode.NO_SCALE это событие не диспатчится.

Добавлено через 7 минут
Цитата:
Сообщение от dimensb Посмотреть сообщение
Если я правильно понимаю значения stage.stageWidth и stage.stageHeight, то они должны соответствовать максимальному размеру дочерних объектов.
Stage#stageWidth отражает размер окна flash player или одного из окон air.
А вот DisplayObject#width, который наследует Stage, соответствует вашему предположению.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.11.2012, 00:44
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 12  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Все верно, но масштабирование flash тоже должно работать из коробки, без дополнительных действий. Я пытался разобраться почему это не так.
Насколько я понял Ваше представление этого процесса, если, скажем, в начале после запуска ролика на сцене лежит красный кружок и начинает двигаться вправо, то "из коробки" Вы ожидаете получить постоянное уменьшение изображения таким образом, чтобы кружок никогда не вышел из поля видимости? Бедные, бедные мультипликаторы...
SHOW_ALL означает, что прямоугольник дефолтного размера стейджа всегда будет полностью виден. Что там творится за границей "рабочего стола", никого не волнует. Мультипликаторы обычно держат там всякое зверье, входящее в кадр и выходящее из него, а у игроделов там покусанные края карты. И ни те, ни другие не хотят, чтобы юзер любовался бардаком за сценой.

Добавлено через 3 минуты
Сорри. "Творческим беспорядком")))
__________________
Reality.getBounds(this);

Старый 30.11.2012, 04:18
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 13  
Ответить с цитированием
dimensb

Регистрация: Jun 2012
Сообщений: 16
Цитата:
Сообщение от FlashRus Посмотреть сообщение
Потому что SHOW_ALL, будет стремиться показать весь изначальный размер stag'а.
Т.е. если браузер к примеру находится в оконном режиме и окно как-нибудь сжато, или у пользователя установлено разрешение которое вы не учли, то по краям вы увидети область, которая должна была бы находиться за пределами видимости, т.к. stage.stageWidth превышает stage.width.

Так, например, будет выглядеть ваш ролик с SHOW_ALL на квадратном мониторе. Красные полосы это дельта stage.height от stage.stageHeight.
Согласно http://help.adobe.com/en_US/FlashPla...lay/Stage.html stage представляет собой всю область, где отображается содержимое flash, что сбило меня с толку, поскольку я решил что размер stage просто подстроится под размер отрисованного содержимого.

В вашем примере верно показано, что размер stage - это один параметр, а размеры объектов, которые отрисованы на нем, могут быть больше, поэтому отобразится только часть. Долго экспериментировал с отрисовкой за границей stage, все сошлось

Спасибо за разъяснение!

Добавлено через 5 минут
Цитата:
Сообщение от caseyryan Посмотреть сообщение
С чего бы это?
Поскольку StageScaleMode по умолчанию установлен в SHOW_ALL, а значит содержимое должно масштабироваться в пределах stage. А вот с тем, как определяются эти пределы, я ошибся.

Добавлено через 11 минут
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Насколько я понял Ваше представление этого процесса, если, скажем, в начале после запуска ролика на сцене лежит красный кружок и начинает двигаться вправо, то "из коробки" Вы ожидаете получить постоянное уменьшение изображения таким образом, чтобы кружок никогда не вышел из поля видимости? Бедные, бедные мультипликаторы...
SHOW_ALL означает, что прямоугольник дефолтного размера стейджа всегда будет полностью виден. Что там творится за границей "рабочего стола", никого не волнует. Мультипликаторы обычно держат там всякое зверье, входящее в кадр и выходящее из него, а у игроделов там покусанные края карты. И ни те, ни другие не хотят, чтобы юзер любовался бардаком за сценой.

Добавлено через 3 минуты
Сорри. "Творческим беспорядком")))
Я отключаю ненужные объекты с помощью visible, поэтому не задумывался о таком случае, но, по сути, вы правы.
Если бы stage включал в себя все объекты, от него было бы не спрятаться

Спасибо!

Добавлено через 27 минут
Цитата:
Сообщение от dimarik Посмотреть сообщение
Немного неверно. В режимах отличных от StageScaleMode.NO_SCALE это событие не диспатчится.

Добавлено через 7 минут


Stage#stageWidth отражает размер окна flash player или одного из окон air.
А вот DisplayObject#width, который наследует Stage, соответствует вашему предположению.
Еще раз проверил на примере, все верно, спасибо!

Добавлено через 46 минут
Цитата:
Сообщение от AlexeiSulga Посмотреть сообщение
У меня было несколько похожая задача. Есть флешка с фиксированной шириной, высоту влешки меняет javascript.

HTML, JS
Код AS3:
var fo = new FlashObject("myflash.swf", "myFlash", "919", "2000", "10");
<div style="width:919px; height:754px;" id="flashcontent_widget">
</div>
function resizeFlash(h)
{
$("#myFlash").attr("height", h);
}
Стартовые размеры флешки 919x754. Значение высоты 2000 в данном случае роли не играет.

AS3 Document class
Код AS3:
stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
stage.align = flash.display.StageAlign.TOP_LEFT;
stageResize();
stage.addEventListener(Event.RESIZE, stageResize, false, 0, true);
private function stageResize(event:Event = null):void 
{
	this.scaleX = this.scaleY = stage.stageWidth / 919;
}
"stage.stageWidth меньше stage.width". В моем понимании stage.stageWidth это ширина swf в браузере. Она зависит от html, stage.width - это ширина объектов на сцене. Необходимо также учитывать zoom в самом браузере. Если 1 тогда все нормально, если пользователь увеличит zoom тогда stage.stageWidth увеличится, в этом случае флешь дожен изменить scaleX document класса.

Другая серьезная проблема с которой я столкнулся быля связана с тем что при изменении размера swf из JS наблюдалось кратковременное (примерно 0.2 секунды) изменение aspect ratio флешки. Это было заметно и неприемлемо. Протестировал все 4 варианта StageScaleMode: SHOW_ALL, NO_SCALE, NO_BORDER, EXACT_FIT. Нормально работает только NO_SCALE.
В итоге решилось все следующим образом:
Как показали выше, размер stage не привязан к размеру отображаемых объектов.

Что меня удивило, так это то, что без использования тэга [SWF(width='x', height='y')] масштабирование происходит нормально, но в пределах stage (размер которого равен 500х375 в этом случае - судя по всему значение по умолчанию для mxmlc), а при использовании тэга масштабирование не происходило вообще.
Для разработки использовался Flash Builder, который генерирует html файл для вызова swf и оказалось, что html файл содержит указание размеров в px, которые берутся из тэга SWF, если он есть и 100% по ширине и высоте, если его нет.
Загрузив SWF напрямую все заработало.
Насколько понимаю правильным решением будет указание необходимого разрешения в тэге SWF + использование 100% в html файле (если он необходим).

Спасибо всем за помощь!

Старый 30.11.2012, 08:51
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 14  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
Я отключаю ненужные объекты с помощью visible, поэтому не задумывался о таком случае, но, по сути, вы правы.
Если бы stage включал в себя все объекты, от него было бы не спрятаться
Воспользуйтесь маской.
http://help.adobe.com/ru_RU/FlashPla...ject.html#mask

Старый 30.11.2012, 15:32
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 15  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Цитата:
Другая серьезная проблема с которой я столкнулся быля связана с тем что при изменении размера swf из JS наблюдалось кратковременное (примерно 0.2 секунды) изменение aspect ratio флешки. Это было заметно и неприемлемо. Протестировал все 4 варианта StageScaleMode: SHOW_ALL, NO_SCALE, NO_BORDER, EXACT_FIT. Нормально работает только NO_SCALE.
То есть вам при NO_SCALE удалось избавиться от этого эффекта? я просто так тоже делал в одном проекте и флешка бликует и дергается при изменении размера (а размер менялся при переключении стр.), особенно в хроме, избавиться от этого пока так и не удалось. Параметр StageScaleMode - NO_SCALE

Старый 01.12.2012, 01:17
AlexeiSulga вне форума Посмотреть профиль Отправить личное сообщение для AlexeiSulga Найти все сообщения от AlexeiSulga
  № 16  
Ответить с цитированием
AlexeiSulga

Регистрация: Sep 2007
Сообщений: 43
Цитата:
Сообщение от PainKiller Посмотреть сообщение
То есть вам при NO_SCALE удалось избавиться от этого эффекта? я просто так тоже делал в одном проекте и флешка бликует и дергается при изменении размера (а размер менялся при переключении стр.), особенно в хроме, избавиться от этого пока так и не удалось. Параметр StageScaleMode - NO_SCALE
Тоже блики и дергания были, но проблема решилась. Код приведен выше.

Код AS1/AS2:
var fo = new FlashObject("myflash.swf", "myFlash", "919", "2000", "10");
Попробуйте не задавать размеры флешки как 100%.


Последний раз редактировалось AlexeiSulga; 01.12.2012 в 01:20. Причина: Забыл код добавить
Старый 01.12.2012, 21:07
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 17  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Цитата:
Попробуйте не задавать размеры флешки как 100%.
Да у меня флешка задана как 100%, но от этого в проекте уже никак не денешся. А вообще в IE и FF все выглядит более менее приемлимо, вот хром сурово страницы перерисовывает. А вообще обсуждение ценное, учту на будущее :-)

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
stage scaling , Stage.scaleMode , масштабирование , размер окна

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.