PDA

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


Snut
30.10.2007, 13:26
package site{

import flash.display.MovieClip;
import flash.events.*;

dynamic public class preloader extends MovieClip {
public function preloader():void{
drawPreloader();
initPreloader();
addEventListener(Event.ENTER_FRAME, Update);
}

private function drawPreloader():void{
var preloader_container:MovieClip = this.createEmptyMovieClip("preloader", this.getNextHighestDepth());

var percent_container:MovieClip = preloader.createEmptyMovieClip("percent_container", preloader.getNextHighestDepth());

var bar_container:MovieClip = preloader.createEmptyMovieClip("bar_container", preloader.getNextHighestDepth());

this.preloader.percent_container.createTextField("percent_txt", this.parent.getNextHighestDepth(), 0, 0, this.width, this.height);

this.preloader.percent_container.percent_txt.embedFonts = true;
var tf:TextFormat = new TextFormat;
this.tf.font = "Tahoma";
this.tf.size = 10;
this.tf.color = 0x00000;
this.preloader.percent_container.percent_txt.setNewTextFormat(tf);

this.preloader.bar_container.lineStyle(1, 0x000000);
var colors:Array = [0xdadada, 0x757f8f, 0xdadada];
var alphas:Array = [100, 100, 100];
var ratios:Array = [0, 127, 255];
var matrix:Object = {matrixType:"box", x:0, y:0, w:1, h:10, r:(90/180)*Math.PI};

this.preloader.bar_container.beginGradientFill("linear", colors, alphas, ratios, matrix);
this.preloader.bar_container.moveTo(0, 0);
this.preloader.bar_container.lineTo(1, 0);
this.preloader.bar_container.lineTo(1, 10);
this.preloader.bar_container.lineTo(0, 10);
this.preloader.bar_container.lineTo(0, 0);
this.preloader.bar_container.endFill();
}

private function initPreloader():void{
addChild(preloader_container);
}

private function Update(e : Event):void{
var bytesTotal:Number = stage.loaderInfo.bytesTotal;
var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
var pl:String = "";
var percent:Number = 0;
if (bytesTotal>0){
percent = Math.floor(bytesLoaded/bytesTotal*100);
pl = percent+"% загруженно";
}
this.preloader.percent_container.percent_txt.text = pl;
this.preloader.bar_container.width = percent;
if(bytesLoaded == bytesTotal || bytesTotal == 0){
removeEventListener(Event.ENTER_FRAME, Update);
parent.play();
}

}
}
}


а как мне этот класс вызвать из root.as?
ну допустим:

package site {

import site.preloader;

dynamic public class root {
private var pre:Object = new preloader(); // создам сам объект, будет он после создания на сцене или нет?

public function root{
...
}

}

}


только начал осваивать ас3, так что просьба ногами не сильно бейте

†‡Paladin‡†
30.10.2007, 13:49
Создать то создадим, но его еще нужно добавить на сцену addChild`ом.(this.addChild(pre);)
Но у тебя в любом случае неполучится, т.к. компилятор умрет от хохота увидев this.getNextHighestDepth()

etc
30.10.2007, 14:04
Все классы именуются с прописной буквы, а не со строчной.
Конструктор класса Root описан неправильно.
А втыкать AS2 код в AS3 — очень круто, да.

Snut
30.10.2007, 18:08
to __etc, ну я же просил ногами не бить сильно... тока учусь:) ок,
1) написание имени класса с большой буквы вопрос этики а не работы
2) а как его правильно описать, учитывая то что я dynamic ессесно уберу...
3) что происходит с параметром depth в ас3? // !!!поправка надо было написать так? parent.getNextHighestDepth()?

to †‡Paladin‡†
тоесть этот метод вообще не нужен в классе прелоадера?

private function initPreloader():void{
addChild(preloader_container);
}

vvk80
30.10.2007, 18:25
нет в AS3 метода getNextHighestDepth - есть addChild и addChildAt
см. в хелпе миграцию с AS2 на AS3 (ActionScript 2.0 Migration)

Snut
30.10.2007, 18:30
vvk80, тогда как это работает? this.createEmptymovieClip("mc", ????)

Nirth
30.10.2007, 18:40
Пора создавать раздел АС3 для новичков.

Snut
30.10.2007, 18:46
да, сейчас мне почему-то вспомнилось как я начинал вообще флеш изучать.... ну хоть носом ткнули где чего смотреть. пошел доки читать.

vvk80
30.10.2007, 18:55
vvk80, тогда как это работает? this.createEmptymovieClip("mc", ????)

это не работает в AS3 :)

Snut
30.10.2007, 19:40
vvk80, понял уже:) сижу читаю миграцию...

Snut
30.10.2007, 19:57
тобишь получается что теперь надо писать вместо

var preloader_container:MovieClip = this.createEmptyMovieClip("preloader", this.getNextHighestDepth());

вот так?

var preloader_container:MovieClip = new MovieClip;

Snut
30.10.2007, 22:38
А теперь правильно?

// Preloader.as

package site{

import flash.display.MovieClip;
import flash.events.*;

dynamic public class Preloader extends MovieClip {
public function Preloader():void{
drawPreloader();
initPreloader();
addEventListener(Event.ENTER_FRAME, Update);
}

private function drawPreloader():void{
private var preloader_container:MovieClip = new MovieClip;
private var percent_container:MovieClip = new MovieClip;
private var bar_container:MovieClip = new MovieClip;

preloader_container.addChild(percent_container);
preloader_container.addChild(bar_container);

private var preloader_container.percent_container.percent_txt:TextField = new TextField;


preloader_container.percent_container.percent_txt.embedFonts = true;
var tf:TextFormat = new TextFormat;
tf.font = "Tahoma";
tf.size = 10;
tf.color = 0x00000;
preloader_container.percent_container.percent_txt.setNewTextFormat(tf);

preloader.bar_container.lineStyle(1, 0x000000);
var colors:Array = [0xdadada, 0x757f8f, 0xdadada];
var alphas:Array = [100, 100, 100];
var ratios:Array = [0, 127, 255];
var matrix:Object = {matrixType:"box", x:0, y:0, w:1, h:10, r:(90/180)*Math.PI};

preloader_container.bar_container.beginGradientFill("linear", colors, alphas, ratios, matrix);
preloader_container.bar_container.moveTo(0, 0);
preloader_container.bar_container.lineTo(1, 0);
preloader_container.bar_container.lineTo(1, 10);
preloader_container.bar_container.lineTo(0, 10);
preloader_container.bar_container.lineTo(0, 0);
preloader_container.bar_container.endFill();
}

private function initPreloader():void{
parent.addChild(preloader_container);
}

private function Update(e : Event):void{
var bytesTotal:Number = stage.loaderInfo.bytesTotal;
var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
var pl:String = "";
var percent:Number = 0;
if (bytesTotal>0){
percent = Math.floor(bytesLoaded/bytesTotal*100);
pl = percent+"% загруженно";
}
preloader_container.percent_container.percent_txt.text = pl;
preloader_container.bar_container.width = percent;
if(bytesLoaded == bytesTotal || bytesTotal == 0){
removeEventListener(Event.ENTER_FRAME, Update);
parent.play();
}

}
}
}


// Root.as

package site{

import site.Preloader;

dynamic public class Root {
private var pre:Object = new Preloader(); // создам сам объект, будет он на сцене или нет?

public function Root{
//
}

}

}