Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   AIR Создание окна с SHOW_ALL (http://www.flasher.ru/forum/showthread.php?t=209528)

in4core 18.11.2014 23:36

AIR Создание окна с SHOW_ALL
 
Привет. Столкнулся с проблемой следующего характера, создаю новое Native окно, пробую добавлять в него разную графику, начал с простого шейпа 100*100. Если задать для стейджа SHOW_ALL то содержимое в нем ведет себя странно, расползнается на ВЕСЬ экран, а точнее вообще вылезает за границы. То есть работа с графикой в новом окне совершенно ведет себя иначе, чем в основном. Кто нибудь может объяснить суть этого феномена?

Начал вникать в суть , пишут про какое то скалирование 72 к 1 , что курили в адобе? Дибилы.
В итоге все равно непонятно, даже если скалировать.
Имею картинку 1920 * 1080 загружаю ее, добавляю на сцену ( размер окна такой же 1920*1080 ) начинаю подгонять, эксперементально для scaleX = scaleY = 0.065 ну вот блин откуда эта коснтнта могла появится?! Именно с ней картинка ровно ( может не до долей ) врезается в окно! идиоты... еще раз хочу про них сказать

Zebestov 19.11.2014 15:11

SHOW_ALL используют халявщики, так вам и надо :)

in4core 19.11.2014 17:41

Zebestov ну конечно блин :) У тебя 100500 кнопок разных размеров, форматов и т.п., и еще дофига элементов, попробуйка на онРесайз каждый элемент крутить, ой как удобно! Это вопервых. Во вторых - если не задумываться и ресайзить сразу весь baseView со всеми внутренностями, то имеет место быть, что у некоторых элементов есть маска и размер контейнера будет при таком случае непропорциональным, короче пиндосы опять порадовали. Не даром Задорнов их хвалит

Zebestov 19.11.2014 17:45

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

А во-вторых, для всего выше перечисленного я использую небольшую утилиту, которая выравнивает объекты (DisplayObject & Rectangle) и несказанно упрощает жизнь.

:p

in4core 19.11.2014 19:56

Цитата:

что его легко имитировать в пару строк
Его не возможно имитировать в пару строк, если у некоторых элементов имеются списки в N высотой или длинной, которые под маской. В любом другом случае, конечно в пару строк.
Утилита это конечно все хорошо, но нет такой утилиты, которую не написать самому :)
Ладно, разговор то о другом немного был, поругание адобовцев, а не нахождение решения через но_скейл, это я и так знаю.

Zebestov 19.11.2014 19:59

Ну т.е. ты заранее не знаешь, какой у тебя "базовый" размер имеет твой viewport?

in4core 20.11.2014 03:57

Цитата:

Ну т.е. ты заранее не знаешь, какой у тебя "базовый" размер имеет твой viewport?
Да, конечно не знаю, так как все довольно динамически. Какая то часть статичная и сразу добавляется показывается, какая то по ходу выполнения, плюс если контекнт подтиягивается и менятся со временем оно и проблематично.
Представь простую ситуацию - имеется приложение 500*500 в котором есть выпадающий список, под маской, ну как то так. Через 5 минут пришли данные и список стал высотой в 800, а через 10 минут в 1200 например и т.п.
Я понимаю все зависит от приложения, как ни крути, но все же.
Мне больше инитересно почему они сделали такое ограничение и откуда они придумали константу 72 к 1.
Я даже больше скажу, начав изучать глубже нашел конкретный баг.
1) создаем окно ( не основное ) с SHOW_ALL и делаем трейс stage.stageWidth = 72
2) Меняем размеры окна на 800*600 например
3) делаем трейс stage.stageWidth = 800
4) грузим графику через лоадер
5) после загрузки ничего не делаем, и даже не добавляем лоадер
6) делаем трейс stage.stageWidth = 72
Вуяля супер баг детектед!

Zebestov 20.11.2014 04:16

Цитата:

Сообщение от in4core (Сообщение 1175193)
Да, конечно не знаю, так как все довольно динамически…

Все сказанное тобой в свое оправдание обнаруживает твою лютую некомпетентность в данном вопросе )) без обид!

Цитата:

Сообщение от in4core (Сообщение 1175193)
Вуяля супер баг детектед!

Ух ты! Про этот "баг" даже в документации сказано, внезапно.

in4core 20.11.2014 14:49

Цитата:

Все сказанное тобой в свое оправдание обнаруживает твою лютую некомпетентность в данном вопросе )) без обид!
Зачем обижаться, может и правда некомпетентность - расскажи ка мне про свою компетентность, научусь глядишь чему :)

Цитата:

Ух ты! Про этот "баг" даже в документации сказано, внезапно.
Ткни носом где про этот баг написано ))) А лучше перечитай по пунктам, что я отписал, там совсем о другом написано.

Zebestov 20.11.2014 14:58

Цитата:

Сообщение от in4core (Сообщение 1175211)
Зачем обижаться, может и правда некомпетентность - расскажи ка мне про свою компетентность, научусь глядишь чему )

Даже не знаю, что тут рассказывать. Ну давай так: иди от крупного к мелкому.
Данность — размер окна.
Первый уровень — расчет размеров и расположения крупных блоков.
Второй уровень — выравнивание более мелких элементов относительно крупных блоков.

Цитата:

Сообщение от in4core (Сообщение 1175211)
Ткни носом где про этот баг написано.

Цитата:

Если задать для свойства Stage.scaleMode значение StageScaleMode.NO_SCALE, когда пользователь изменяет размеры окна, содержимое рабочей области сохраняет заданный размер, а свойство stageWidth изменяется, отражая новую ширину области экрана, занимаемой SWF-файлом.

in4core 20.11.2014 19:49

Цитата:

Если задать для свойства Stage.scaleMode значение StageScaleMode.NO_SCALE,
Ты видишь, что там про NO_SCALE напмисано? А у меня про SHOW_ALL ? Разница не очевидна? Тем более, даже если бы там было написано про ШОУАЛЛ, то написано там о другом. Еще раз, что я вижу :
Код AS3:

trace(stage.stageWidth)  // 72
native.width = 1400;
trace(stage.stageWidth) // 1400 - OK
1();
function 1():void  {  loader.load("ddd.swf")  }
function onLoaded(e:Event) :void { trace(stage.stageWidth) // 72 why if was 1400 1 sec ago! }


Zebestov 20.11.2014 20:17

Ты видишь, что там черным по белому написано? Не используешь NO_SCALE — забудь про stageWidth ))

in4core 20.11.2014 20:41

Zebestov да блин же ты чего издеваешься чтоль? ПРичем тут забудь не забудь. Я тебе показываю конкретную багу как при ШОУ_АЛЛ стейджВидтс меняется как хочет без каких либо документаций или оправданий, причем это связано с загрузкой данных

Zebestov 20.11.2014 20:48

Нет, я не издеваюсь. Лишь указываю, что ты счел багом то, что тебе никто и не обещал (согласно документации).

in4core 21.11.2014 00:51

Цитата:

Нет, я не издеваюсь. Лишь указываю, что ты счел багом то, что тебе никто и не обещал (согласно документации).
То есть по твоему это не баг, а нормальная фича ? Я так понимаю ?
А если бы - в документации не было написано , что именно 50 * 50 = 2499.333 - это тоже была бы фича? Разницы никакой, одна система.

В любом случае это уже глупо обсуждать, я тебя понял - лезть в дебри и понимать почему так тебе не охота, проще сказать - да баловство это все, я вот no_scale изучил, какой я молодец ))))

Zebestov - у меня такой вопрос, а ты вообще поднимал тему AIR для десктоп или только с читсым флеш работаеь? У меня просто есть вопрос специфический, может быть ты этим занимался и сможешь подсказать кое что

Zebestov 21.11.2014 00:55

Ну, что бы ни думали мы с тобой, в документации четко прописано, что все это работает "если задать для свойства Stage.scaleMode значение StageScaleMode.NO_SCALE".

Насчет "изучения NO_SCALE" — нелепо звучит как-то )) что там изучать-то?

AIR для десктопа еще не пробовал. Мобильные платформы — да, особенно Android.

in4core 21.11.2014 02:50

Понял тебя. В любом случае может знаешь как оно : пробую сделать ресайз окна по аспект ратио. В гуглах некто приводит такой код, собственно другого в гуглах не попадается. Тут интересный вопрос, что имеется ввиду под аспект_ратио. Я пробовал отрабатывать так аспект_ратио = 1920/1080 - результат собственно плачевный, не работает как надо. И еще возможно имеет какое то значение УГОЛ ресайза? Меня интересует правый нижний, но вроде как оно автоматом стоит так...

Код AS3:

private function windowResizeEventHandler(evt:NativeWindowBoundsEvent):void
    {
        evt.preventDefault()
        if (evt.beforeBounds.width != evt.afterBounds.width){//user resizes width
            evt.currentTarget.width = evt.afterBounds.width
            evt.currentTarget.height = evt.afterBounds.width/ASPECT_RATIO;
        } else if (evt.beforeBounds.height != evt.afterBounds.height){
            evt.currentTarget.height = evt.afterBounds.height
            evt.currentTarget.width = evt.afterBounds.height*ASPECT_RATIO;
        }
 
    }

Далее на просторах интернета попадается поясннение , которое как то меня смущает
Код AS3:

private static const ASPECT_RATIO:Number = 2.0; //2:1 Aspect Ratio


Zebestov 21.11.2014 03:14

А что означает "ресайз окна по аспект ратио"? Это ты имеешь в виду масштабирование с соблюдением пропорций?

in4core 21.11.2014 15:15

Цитата:

А что означает "ресайз окна по аспект ратио"? Это ты имеешь в виду масштабирование с соблюдением пропорций?
Да именно так. То есть открывается окно допустим 1024*768. ПРи изменении его размеров можно изменять только пропорционально, например к 800*600 и т.п. где аспект = 1.33 У меня аспект 1.77 тоесть 1920*1080.
Я привел пример со скачком из 1024 к 800, скачек мне не нужен конечно же,а планое перемещение, тоесть может быть и 1023*765 и т.п.

Zebestov 21.11.2014 15:17

Тут не подскажу, у меня мобильные игры, fullscreen, никакого ресайза окна.

in4core 21.11.2014 16:37

Ок, все равно спасибо :) Может кто знает ? аууу коллеги?!

in4core 25.11.2014 16:32

Коллеги - кажется я придумал решение, пока его еще не пробовал, но думаю прокатит :
для ресайза у нас имеется аж 2 события RESIZING и RESIZE у boundsEvent. Первое диспатчится сразу, как только чего то меняем и работает кривовато если e.preventDefault() и кастомизировать.
Второе же выполняется уже постфактум. Так вот слушаем второе, и работаем например по ширине так :
Код AS3:

var h:int = this.width;
while(this.width / h != aspect_ration) h--;
this.height = h;

В итоге получим размер по феншую нашему ))))

Psycho Tiger 27.11.2014 20:40

Код AS3:

while(this.width / h != aspect_ration) h--;

Серьезно?

Zebestov 27.11.2014 20:51

При правильном aspect_ratio программа повиснет. Классное решение!

P.S.
И да, люблю, когда переменные носят очевидные имена, наподобие var h:int = this.width;

:quiet:

in4core 27.11.2014 21:48

Zebestov ))) этож отруки написано ) И да - отказался я от всех решений в болото, non-resize и баста. не работает AIR ские окна стабильно.


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

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