PDA

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


softrix
16.01.2013, 19:33
Я новичок во Флэш, мне на сайт нужно сделать прелоадер для SWF файлов.

Как я понимаю, структура обычного Flash прелоадера такова: получает ссылку на SWF файл, качает его, параллельно выводит информацию о статусе загрузки, затем отображает содержимое.

В интернете нашел много уроков по созданию прелоадеров, но ни в одном не сказано, как подгрузить нужный файл, и как затем его отобразить.
Может кто подскажет, как это сделать или поделится ссылкой на исходники готового прелоадера ?

namespaces
16.01.2013, 20:07
Прелоадеры бывают внешние и внутренние. Если основная флешка тяжелая, лучше воспользоваться внешней.
Даже не знаю что тебе посоветовать, в сети столько примеров, готовые классы есть.

NikolyA
16.01.2013, 20:20
можно вот так:

var g:Loader = new Loader();
g.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop);
g.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
g.load(new URLRequest("грузим_нашу_прелесть.swf"));

function loop(e:ProgressEvent):void
{
var perc:Number = e.bytesLoaded / e.bytesTotal;
percent.text = Math.ceil(perc*100).toString();
}

function done(e:Event):void
{
removeChild(percent);
percent = null;
addChild(l);
}

spirit2
16.01.2013, 20:21
Прелоадеры бывают внешние и внутренние. Если основная флешка тяжелая, лучше воспользоваться внешней.
Даже не знаю что тебе посоветовать, в сети столько примеров, готовые классы есть.
Внешний или внутренний, определяется поставленной задачей, а не размером флешки.

Вот FDшный:
package
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.text.TextField;
import flash.utils.getDefinitionByName;

public class Preloader extends MovieClip
{
private var _progressField:TextField;

public function Preloader()
{
if (stage)
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//stage.showDefaultContextMenu = false;

_progressField = new TextField();
_progressField.width = 40;
_progressField.height = 40;
_progressField.x = stage.stageWidth / 2 - 20;
_progressField.y = stage.stageHeight / 2 - 20;
addChild(_progressField);
}
addEventListener(Event.ENTER_FRAME, checkFrame);
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
}

private function ioError(e:IOErrorEvent):void
{
trace(e.text);
}

private function progress(e:ProgressEvent):void
{
_progressField.text = Math.floor(100 / e.bytesTotal * e.bytesLoaded) + "%";
}

private function checkFrame(e:Event):void
{
if (currentFrame == totalFrames)
{
stop();
loadingFinished();
}
}

private function loadingFinished():void
{
removeEventListener(Event.ENTER_FRAME, checkFrame);
loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);

removeChild(_progressField);
_progressField = null;

startup();
}

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

}

}

[Frame(factoryClass="Preloader")]
public class Main extends Sprite {

Sintesis
16.01.2013, 20:30
вот готовый внешний, самый подходящий для данного случая:

package {

import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.text.*;

public class SlimLoader extends Sprite{
private var loader:Loader;
private var progressOutput:TextField;

public function SlimLoader(){
createLoader();
createProgressIndicator();
//"http://../*.swf"
load(new URLRequest("*.swf"));
}
private function createLoader():void{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);
loader.contentLoaderInfo.addEventListener(Event.INIT, initListener);
}
private function createProgressIndicator():void{
progressOutput = new TextField();
progressOutput.autoSize = TextFieldAutoSize.LEFT;
progressOutput.background = true;
progressOutput.border = true;
progressOutput.x = 200;
progressOutput.y = 150;
progressOutput.selectable = false;
progressOutput.text = "LOADING...";
}
private function load (urlRequest:URLRequest):void{
loader.load(urlRequest);
if(!contains(progressOutput)){
addChild(progressOutput);
}
}
private function progressListener(e:ProgressEvent):void{
progressOutput.text = "LOADING: " + Math.floor(e.bytesLoaded / 1027) + "/" + Math.floor(e.bytesTotal / 1027) + "kB";
}
private function initListener(e:Event):void{

}
private function completeListener(e:Event):void{
removeChild(progressOutput);
stage.addChild(loader.content);
}
}
}

namespaces
16.01.2013, 22:20
Сейчас будем соревноваться у кого какой прелоадер?
В интернете нашел много уроков по созданию прелоадеров, но ни в одном не сказано, как подгрузить нужный файл, и как затем его отобразить.
Вы хоть объясните куда будет вставляться подгружаемый файл. Копи-пастить я тоже могу.

NikolyA
16.01.2013, 23:20
с понятием классы знаком? а подгружаемый файл можешь подгружать откуда тебе лучше