PDA

Просмотр полной версии : Проблемы с прелоадером.


Spider10k
27.11.2009, 23:28
Здравствуйте.
Проблему опишу подробно, т.к. являюсь новичком в as и не очень понимаю, что важно в моей ситуации, а что нет....
Использую adobe flash cs4. Основной класс моего проекта - Main. В проекте имеется файл Main.fla, у которого основным классом указан Main (из этого fla я так понимаю экспортится swf). Возникла необходимость сделать прелоадер. По информации найденной здесь использовал [Frame]:

Основной класс:
[Frame (factoryClass="Preloader")]
public class Main extends Sprite
{
.....
}

Класс прелоадера:

public class Preloader extends MovieClip
{
public function Preloader()
{
stop();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

public function onEnterFrame(event:Event):void
{
graphics.clear();
if(framesLoaded == totalFrames)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
nextFrame();
init();
}
else
{
var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
graphics.beginFill(0);
graphics.drawRect(0, stage.stageHeight / 2 - 10,
stage.stageWidth * percent, 20);
graphics.endFill();
}
}

private function init():void
{
var mainClass:Class = Class(getDefinitionByName("Main"));
if(mainClass)
{
var app:Object = new mainClass();
addChild(app as DisplayObject);
}
}
}

Вобщем, результата никакого нет, класс прелоадера вообще не создается (вариант, что я не замечаю прелоадер просто из-за быстрой загрузки отпадает, ибо trace в конструкторе прелоадера ставил, который не вызывался). Попробовал поставить fla файлу основной класс Preloader - тогда выдается такая ошибка:
ReferenceError: Error #1065: Переменная Main не определена.
at global/flash.utils::getDefinitionByName()
at Preloader/init()
at Preloader/onEnterFrame()


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

mayakwd
28.11.2009, 00:18
компилируете в дебаг режиме и у вас подключены как swc так и присутствуют [Embed] тэги? ну или одно из двух )
если так - то черт его знает почему - сам до сих пор не могу разобраться.

Spider10k
28.11.2009, 02:26
Компилирую через Control -> Test movie. [Embed] есть, но не в основном классе Main :)

mayakwd
28.11.2009, 12:01
вся проблема в эмбеде - попробуй убрать его.

Spider10k
28.11.2009, 13:27
Embed убрать не есть приемлимый выход из данной ситуации. Да и в примерах в инете как раз с помощью эмбеда вставляют большие рисунки в основной класс для проверки прелоадера.....

mayakwd
28.11.2009, 14:03
swc библиотеки используются?

etc
28.11.2009, 14:16
[Frame] в CS4 не работает, это фича mxmlc. Размещайте пустой мувик с назначенным на него классом Main в третьем кадре в координатах 0, 0 (убив создание Main из прелоадера), либо просто положите этот мувик в библиотеку и экспортом во второй кадр.

Spider10k
28.11.2009, 22:25
Спасибо за помощь. С горем пополам разобрался :)
Особое спасибо mayakwd за его материал http://pastila.org/flash/vstroennyj-preloader-as3/ :)