PDA

Просмотр полной версии : Лишний вес первого кадра


BleSSeD
29.08.2009, 18:56
Пишу я сайт. Весь код, вся графика и т.д. у меня в первом кадре. Сделал я прелоадер. Тоесть все-все перенес во второй кадр, но почему-то первый у меня весит 35кб. От куда они взялись я не пойму, там только черный фон.... Что это может быть?

mooncar
29.08.2009, 19:00
Значит не все-все.
1. Наверняка в библиотеке есть объекты с Linkage для программного добавления на сцену в процессе исполнения кода (компоненты, фонты, мувики, звук). И галочка там "Export in First Frame". Если так, то экспортируйте объекты тоже во второй, но до их 1-го использования. То есть перенесите теперь конетент уже в 3-й, а во второй вставьте экземпляры экспортируемых объектов. И в Settings для AS2 укажите экспорт классов во 2-ой кадр, а галочки в библиотеке уберите.
Вот тут (http://flash-ripper.com/archives/001800.php)подробнее.
2. Как насчет элементов самого прелоадера?

BleSSeD
29.08.2009, 19:59
В паблиш сеттингс указал что грузит во второй кадр. так что туда ничего не грузится....

mooncar
29.08.2009, 20:04
В паблиш сеттингс указал что грузит во второй кадр. так что туда ничего не грузится....
И в библиотеке нет элементов с галочкой насчет первого кадра? Может звук какой с Linkage и экспортом в 1-й? Там библиотеку отсортировать можно по Linkage, посмотрите.

И что, в первом кадре нет вообще ничего от предлоадера? Графики, текстовых полей?

BleSSeD
29.08.2009, 20:14
Когда в ЦС4 в паблиш сеттингс указываеш что експортировать для второго кадра, то в линкейдж галочка уже не "експортировать для 1 кадра", а "експортировать для 2 кадра".....

А в первом кадре мувики прелоадера весят 9кб, но даже когда я их еще не добавил в свой проект, а только перенес все в второй кадр, то первый весил 35 кб. а теперь с прелоадером 44.

Добавлено через 11 минут
Интересно, что если закоментировать весь код во втором фрейме, то первый занимает 4кб.

mooncar
29.08.2009, 20:32
А "Generate Size Report" в Settings разве не дает точного указания на название объекта и его вес?

BleSSeD
29.08.2009, 20:41
это где такое есть?

mooncar
29.08.2009, 21:10
"Publish Settings" - > "Flash" , там чекбокс "Generate Size Report" есть.

BleSSeD
29.08.2009, 21:32
Хм, интересно. сначала оно показало, сколько каждый фрейм занимает, но это я и так знаю. Но вот что интересно.
ActionScript Bytes Location
------------------ --------
38141 Scene 1:Frame 1
2044 Scene 1:Frame 2
Тоесть 35кб акшин скрипта находится в первом фрейме, это как раз то,что делает этот фрейм таким большим. Но что такое ActionScript Bytes ?

mooncar
29.08.2009, 21:34
Ну, видимо, оно и есть - код AS.

BleSSeD
29.08.2009, 21:35
Так он у меня во втором фрейме!!!!!

mooncar
29.08.2009, 21:37
Включитете-ка Movie Explorer (Alt+F3), может где какой-то код рукописный завалялся бесхозный, посмотрите.

Добавлено через 2 минуты
Если у вас убрать код прелоадера из 1-го кадра, то там все равно 35кБ, верно я вас понял?

BleSSeD
29.08.2009, 21:42
http://s2.share.te.ua/b82071/353xpuw1q2.png
Да нет, только немного кода прелоадера.....


Да, даже ввобще без кода в первом фрейме 35 кб.

mooncar
29.08.2009, 21:46
Увы, больше ничего не могу подсказать. У вас в коде контента дальше там импорт классов идет, а тут я не силен. Может быть с этим как-то связано...
Убирайте по кусочку из контента код, смотрите через Size Report, что будет...

BleSSeD
29.08.2009, 21:55
Интересно что если закоментировать весь код во втором фрейме, то все ок, первый занимает 4кб, и все хорошо...... почему оно так?:(

mooncar
29.08.2009, 22:05
Ну не весь сразу комментируйте, что ли... Если переиначить: "Локализуйте, локализуйте, Шура!.." .. по кусочкам убирайте подозрительные действия.

BleSSeD
29.08.2009, 22:36
Нашел! Когда коментирую
import fl.transitions.easing.*;
то все стает ок. Но что мне с етим делать? от твинов отказаться же не могу:)

Добавлено через 15 минут
Нет, просто оно выдавало ошибку, и далее код не шел..... Я не знаю что делать:(

mooncar
29.08.2009, 23:15
Продолжайте локализовывать.. Я с AS3, увы, никак.

BleSSeD
29.08.2009, 23:30
а можно програмно узнать вес фрейма?

mooncar
29.08.2009, 23:41
Кажется, нет (в AS2, по крайней мере).

wvxvw
30.08.2009, 00:35
Ну так классы тоже надо во второй фрейм экспортировать :)
(в тех же Publish Settings)

etc
30.08.2009, 13:11
Интересно что если закоментировать весь код во втором фрейме, то все ок, первый занимает 4кб, и все хорошо...... почему оно так?:(
Потому что это один и тот же класс.

BleSSeD
31.08.2009, 16:06
Publish Settings - Flash - Settings - Export classes in frame - и стоит 2. Так что не так?

etc
31.08.2009, 18:40
Не так то, что вы пишете код в кадрах.

Jivel
31.08.2009, 19:24
основной таймлайн тоже является классом и компилятор весь код с ваших кадров тянет в первый кадр что вполне логично.

mooncar
31.08.2009, 19:41
основной таймлайн тоже является классом и компилятор весь код с ваших кадров тянет в первый кадр что вполне логично.
Это как? А что же тогда показывает Size Report, когда для каждого кадра указывает вес заключенного в нем кода AS? Для 1-го - отдельно, для 2-го - отдельно, а не весь сразу в 1-м кадре. Не понятно.

etc
31.08.2009, 19:47
Это как? А что же тогда показывает Size Report, когда для каждого кадра указывает вес заключенного в нем кода AS? Для 1-го - отдельно, для 2-го - отдельно, а не весь сразу в 1-м кадре. Не понятно.
Очень просто, в первом кадре код всего рутового класса. Остальные как повезет, может попадут во второй, если не упомянуты в рутовом.

mooncar
31.08.2009, 19:50
У автора там import mx... идет во втором кадре... Это имеет отношение к сказанному?

etc
31.08.2009, 19:54
У автора там import mx... идет во втором кадре... Это имеет отношение к сказанному?
В том числе. То, что было использовано из mx.*, тоже попадёт в первый кадр.

Jivel
31.08.2009, 20:04
то ---> mooncart

вот этот год на первом кадре
stop();
trace (ff);
trace(this);
и вот этот на втором
var ff:String;
ff="ты видиш суслика? А его еще нет";
выведет

null
[object MainTimeline]

то есть трейс в первом кадре уже знает о существовании переменной которая будет создана во втором кадре.
Во втором же кадре - ей просто присваивается значение

Добавлено через 48 минут
Зачем это было сделано? =)

давайте переопределим основной класс и вобьем в поле Class --> MyRoot
и создадим файл с названием MyRoot.as в той же директории где лежит *.fla файл
с кодом

package
{
import flash.display.MovieClip;

public class MyRoot extends MovieClip
{

public function MyRoot()
{
trace("трейс из конструктора -->"+ff);
}

}

}

при трейсе видим следующее
трейс из конструктора -->null
null
[object MyRoot]
первым сработал трейс конструктора вторым трейс из кадра и в третьем трейсе видим что основной таймлайн ассоциирован с нашим рут классом.
Такимо образом основной таймлайн fla файла становится своеобразной структурой управления. а код класса MyRoot.as фактически нативно приводится к виду
package
{
import flash.display.MovieClip;
//и прочие используемые в классе импорты

public class MyRoot extends MovieClip
{
var ff:String;
//и прочие используемые в классе переменные
public function MyRoot()
{
trace("трейс из конструктора -->"+ff);
}
//и прочие используемые в классе функции
}

}

mooncar
31.08.2009, 22:08
Спасибо за пояснения, хотя суслика в вашем первом примере я так и не увидел (у меня trace выдал undefined _level0 ), но в силу того, что я еще очень далек от понимания работы с классами, попытаюсь понять эти особенности позднее, когда буду готов.

Jivel
31.08.2009, 22:18
что то подсказывает что вы компилировали под AS2 =)

вот пример в CS4

mooncar
31.08.2009, 22:22
Да, у меня нет CS4... нужно переходить...
Пример скачаю ваш, потом поразбираюсь, сенкс.

Jivel
31.08.2009, 22:46
да там без разницы только поле для привязки рут-класса в CS4 называется "Class" а в CS3 "Document class"

вот для CS3

mooncar
31.08.2009, 22:51
Спасибо, буду вникать :)

Jivel
31.08.2009, 23:03
Спасибо, буду вникать :)

Только обратите внимание что это все таки именно пример того как как работает компилятор AVM2 код на кадрах - есть очень не хорошо и это потенциальный путь к неотлавливаемым глюкам.

mooncar
31.08.2009, 23:10
Если не использовать код на кадрах, то как? Если делать include скрипта, ситуация будет лучше?
Можно услышать резюме, как и почему лучше использовать код AS при разработке? Если это не очень сложно?
Централизация кода при include - это очевидно. А еще?

Jivel
31.08.2009, 23:26
в AS3
каждый предмет на сцене это обьект включая и основной таймлайн.
То что обьекты и кадры можно добавлять руками - это так сказать переходные костыли совместимости.
Сделайте зоопарк Колина Мука - там все хорошо разжевывается. (ActionScript3.0 для Flash Подробное руководство.)
Ссылку дать не могу но она уже не редкость.
И можете посмотреть пример Мерлина он в ветке AS3 в самом верху. Но сначала или хотя бы параллельно Мука =)

офтоп --
правда после подкастов Ивана Дембицкого и Евгения Потапенко Колина Мука без смеха не могу воспринимать.
енд офтоп --

mooncar
31.08.2009, 23:36
Ок, пора браться за AS3... Все, с флудом завязываем.

BleSSeD
31.08.2009, 23:58
А мне что делать?:)

Jivel
01.09.2009, 00:15
А мне что делать?:)

Вынесите код второго и прочих фремов в другой класс или классы и используйте его уже после загрузки флешки и будет вам счастье.

Добавлено через 17 минут
вот тут более подробно
http://etcs.ru/blog/as3/export_in_second_frame_flash_cs3/
и тут
http://racer242.blogspot.com/2008/01/flex-as3.html