PDA

Просмотр полной версии : Прелоадер на Flash Builder


Randi
22.09.2015, 16:14
Всем привет, по этому вопросу есть масса инфы, но нет чёткого ответа.
А мне надо быстро сдавать проект, нет времени разбираться.
Игра у меня сделана на Flash Builder.
Подскажите как просто и быстро можно в нём реализовать прелоадер ?
Желатено с кодом =)
(Flash Pro использую только для загрузки в игру картинок)

Bletraut
22.09.2015, 17:55
Заэмбеддить в свою новую сфв с прелоадером свою свф с игрой и показывать насколько она загрузилась.

Randi
23.09.2015, 18:25
А можно подробнее ? Сейчас я много чего испробовал и ничего не получается. А именно прелоадер делаю главным в настройки прописываю -frame appFrame Main но прелоадер чтото загружает а создавать Майн не хочет =( выдаёт ошибку.

Добавлено через 2 минуты
Или может мне в Flash Pro сделать как то загрузочную оболочку ?

Randi
27.09.2015, 23:51
Вообще ничего не получается
Неужели никто не делает прелоадеры ?

illuzor
28.09.2015, 00:09
Код в студию

Randi
28.09.2015, 00:13
package
{
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.text.TextField;
import flash.utils.getDefinitionByName;

[SWF(frameRate="60", width="700", height="525", backgroundColor="0x000000")]
public class Preloader extends Sprite
{
// Private
private var _preloaderBackground:Shape
private var _preloaderPercent:Shape;
private var _checkForCacheFlag:Boolean = true;
// Constants
private static const MAIN_CLASS_NAME:String = "Cars";

public function Preloader()
{
trace("Preloader: Initialized.")
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

var txt:TextField = new TextField();
txt.textColor = 0xffffff;
txt.x = 350;
txt.y = 250;
txt.text = "Loading";
addChild( txt );
}

public function dispose():void
{
trace("Preloader: Disposing.")
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
if (_preloaderBackground)
{
removeChild(_preloaderBackground);
_preloaderBackground = null;
}
if (_preloaderPercent)
{
removeChild(_preloaderPercent);
_preloaderPercent = null;
}
}

// Private functions

private function onAddedToStage(e:Event):void
{
trace("Preloader: Added to stage.");
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
stage.scaleMode = StageScaleMode.SHOW_ALL;
stage.align = StageAlign.TOP_LEFT;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

private function onEnterFrame(e:Event):void
{
if (_checkForCacheFlag == true)
{
_checkForCacheFlag = false;
if (root.loaderInfo.bytesLoaded >= root.loaderInfo.bytesTotal)
{
trace("Preloader: No need to load, all " + root.loaderInfo.bytesTotal + " bytes are cached.");
finishedLoading();
}
else
beginLoading();
}
else
{
if (root.loaderInfo.bytesLoaded >= root.loaderInfo.bytesTotal)
{
trace("Preloader: Finished loading all " + root.loaderInfo.bytesTotal + " bytes.");
finishedLoading();
}
else
{
var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
updateGraphic(percent);
trace("Preloader: " + (percent * 100) + " %");
}
}
}

private function beginLoading():void
{
// Might not be called if cached.
// ------------------------------
trace("Preloader: Beginning loading.")
_preloaderBackground = new Shape()
_preloaderBackground.graphics.beginFill(0x333333)
_preloaderBackground.graphics.lineStyle(2,0x000000)
_preloaderBackground.graphics.drawRect(0,0,200,20)
_preloaderBackground.graphics.endFill()

_preloaderPercent = new Shape()
_preloaderPercent.graphics.beginFill(0xFFFFFFF)
_preloaderPercent.graphics.drawRect(0,0,200,20)
_preloaderPercent.graphics.endFill()

addChild(_preloaderBackground)
addChild(_preloaderPercent)
_preloaderBackground.x = _preloaderBackground.y = 10
_preloaderPercent.x = _preloaderPercent.y = 10
_preloaderPercent.scaleX = 0
}

private function updateGraphic(percent:Number):void
{
// Might not be called if cached.
// ------------------------------
_preloaderPercent.scaleX = percent
}

private function finishedLoading():void
{
var MainClass:Class = getDefinitionByName(MAIN_CLASS_NAME) as Class;

if (MainClass == null)
throw new Error("Preloader: There is no class \"" + MAIN_CLASS_NAME + "\".");

var main:DisplayObject = new MainClass() as DisplayObject;
if (main == null)
throw new Error("Preloader: The class \"" + MAIN_CLASS_NAME + "\" is not a Sprite or MovieClip.");

addChild(main);
dispose();
}
}
}


Это прелоадер
Ещё в доп. аргёментах прописываю -frame appFrame Cars
Но как только прелоадер начинает создавать класс Cars, то ничего не происходит
При это тестовый класс создаётся
Вопрос, из-за чего может не создаться класс Cars
Ошибок там вроде нет, компилятор не ругается =)

Добавлено через 5 минут
Просто раньше Cars был по умолчанию и ошибок не возникало =/

udaaff
28.09.2015, 00:48
Метод finishedLoading() отрабатывает без ошибок?

прелоадер чтото загружает а создавать Майн не хочет =( выдаёт ошибку.
Какую ошибку?

djyamato
28.09.2015, 01:04
Следуя логике уважаемого Randi дорожный знак "Тупик" будет создавать тупик где-то на дороге, на которой он выставлен. Не могу согласиться с тем что прелоадер что-либо создает кроме того что касается прелоадера.

Randi
28.09.2015, 11:01
Метод finishedLoading() отрабатывает без ошибок?
Какую ошибку?

Он просто останавливает работу на том месте где я создаю главный класс игры. Я стал выводить флажки и последний флажок показался тот что перед созданием главного класса

При использовании вот этого метода
var MainClass:Class = getDefinitionByName(MAIN_CLASS_NAME) as Class;
MainClass равен null

И если явно создавать главный класс то тоже ничего не получится

udaaff
28.09.2015, 11:14
Может быть вы имя не полное указываете?

Randi
28.09.2015, 13:13
Может быть вы имя не полное указываете?

Всмысле не полное ? Я указываю имя класса

udaaff
28.09.2015, 13:30
Имя с пакетом, например flash.display.Sprite.

Randi
28.09.2015, 13:32
Имя с пакетом, например flash.display.Sprite.

Если бы пакетов не хватало то игра бы не скомпилировалась

udaaff
28.09.2015, 13:59
private static const MAIN_CLASS_NAME:String = "пакет.Cars";

Randi
28.09.2015, 14:09
Cars находится в пакете по умолчанию