Приветствую знатоков темы.
Делаю прелоадер по примеру:
http://etcs.ru/blog/as3/export_in_se...ame_flash_cs3/
и получается вот что: Есть Файл
Preloader.fla + класс
Preloader.as + класс
Program.as + класс
ComponentMaterialTest.as.
Если я в Preloader.as пишу:
var program:Sprite = new Program as Sprite;, то работает прелоадер и сама программа...
Если в Preloader.as пишу:
var program:ComponentMaterialTest = new ComponentMaterialTest(800, 600, false, true, "CAMERA3D"); , то выдаёт ошибку :
Цитата:
INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at ComponentMaterialTest()
at Preloader/main()
at Preloader/enterFrameHandler()
|
ПОЧЕМУ ТАК? Помогите разобраться пожалуйста.
ОПИСАНИЕ ФАЙЛОВ:
Preloader.as

Код AS3:
package {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import org.papervision3d.view.*;
public class Preloader extends MovieClip {
private var progressBar:Sprite;
var program:Sprite;
public function Preloader() {
//super();
stop();// стоп в первом кадре
progressBar = getChildByName("loadingLine") as Sprite; // полоска прелоадера с именем "pBar" со сцены
progressBar.scaleX = 0;// размер полоски изначально
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);// подпись содержимого загрузчика флэшки
loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
}
// Процесс загрузки
private function progressHandler(event:ProgressEvent):void {
var loaded:uint = event.bytesLoaded; // загружено байт
var total:uint = event.bytesTotal; // общий объём загружаемой флэшки
progressBar.scaleX = loaded/total; // изменение размера полоски
}
// Загрузка завершена
private function completeHandler(event:Event):void {
play(); // запустить ролик
addEventListener(Event.ENTER_FRAME, enterFrameHandler); //при ENTR_FRAME
}
private function enterFrameHandler(event:Event):void {
if (currentFrame >= 2) { // если номер текущего кадра = 2
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);// то убрать подпись по событию ENTER_FRAME
stop(); // и вообще тормазнуть ролик
main();// запустить код
}
}
private function main():void {
// С этим работает
var program:Sprite = new Program as Sprite;
// С этим не работает
//var program:ComponentMaterialTest = new ComponentMaterialTest(800, 600, false, true, "CAMERA3D");
addChild(program);
}
}
}
Program.as -
Проверочная программка работает

Код AS3:
package {
import flash.display.*;
import flash.text.*;
public class Program extends Sprite{
private var txt:TextField;
public function Program() {
//TEXT FIELD
txt= new TextField();
txt.selectable = false;
txt.width = 500;
txt.textColor = 0x555566;
txt.text = "LOADING COMPLETE"; //ahtungReturn
txt.y =200;
txt.x =200;
addChild(txt);
trace("Program starting");
var object:MovieClip = new Star as MovieClip;
addChild(object);
}
}
}
ComponentMaterialTest.as -
Нужная программка не работает

Код AS3:
package
{
import flash.display.*;
import flash.events.*;
import flash.geom.Rectangle;
import flash.utils.*;
import flash.net.*;
import flash.system.fscommand;
import flash.external.ExternalInterface;
import flash.filters.*;
import flash.text.*;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.view.BasicView;
import org.papervision3d.cameras.FreeCamera3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.objects.*;
import org.papervision3d.view.stats.StatsView;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.core.components.as3.utils.ObjectController;
import org.papervision3d.core.proto.*;
import caurina.transitions.Tweener;
import org.papervision3d.materials.MovieAssetMaterial;
import org.papervision3d.materials.*;
import org.papervision3d.materials.shadematerials.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.materials.shaders.*;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.utils.*;
import creator.IVModel;
public class ComponentMaterialTest extends BasicView
{
// OBJECT
public var ObjectGroup: Sphere;
private var fon:Sprite;
private var nameOfSelected3DObject:String="NameOfTheObject"; // имя выбранного объекта
// Up menu
private var but_BackToMap:MovieClip ;
private var but_BackToOut:MovieClip;
// HELPERS
private var classname:String;
private var tempMaterial:MaterialObject3D;
private var img:Loader;
private var matArray:Array = new Array();;
//Materials
private var ObjectGroupMat:ColorMaterial;
private var greenMat:GouraudMaterial;
private var testMat:GouraudMaterial;
private var matList:MaterialsList;
public var plane :Plane;
public var movieMat :MovieMaterial;
public var movie :MovieClip;
//CAMERA
private var TargetSphere:Sphere;
private var isOribiting:Boolean;
private var previousMouseX:Number;
private var previousMouseY:Number;
private var differenceX:Number = 0;
private var differenceY:Number =0;
private var cameradelta=35;
// LIGHT
private var light:PointLight3D= new PointLight3D(true);
//XML
private var numberOfObject:int = 0; //номер загружаемой из массива геометрии
private var requestArrayGeometry:Array = new Array(); //массив адресов на XML файлы
private var spisok: XML;
private var spisokLoader:URLLoader;
private var xmlListGeometry:XMLList;
private var xmlListCameras:XMLList;
//TEXT FIELD
private var txt:TextField;
//START
public function ComponentMaterialTest(viewportWidth:Number=800, viewportHeight:Number=600, scaleToStage:Boolean=false, interactive:Boolean=true, cameraType:String="CAMERA3D")
{
/*************************************** НАСТРОЙКИ STAGE ***************************************/
super(viewportWidth, viewportHeight, scaleToStage, interactive, FreeCamera3D.TYPE);
stage.align = StageAlign.TOP;
stage.scaleMode = StageScaleMode.SHOW_ALL;
stage.quality = StageQuality.MEDIUM;
/************************************* ПОДПИСЬ STAGE на события ************************************/
addEventListener(Event.ENTER_FRAME, EnterFrame);
//MOUSE EVENTS
addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
addEventListener(MouseEvent.MOUSE_UP, MouseUp);
addEventListener(MouseEvent.MOUSE_WHEEL, MouseWHELL);
/************************************** MATERIALS ***********************************************/
//MATERIALS LIST
matList = new MaterialsList();
//SelectedMaterial
var selectedMat:ColorMaterial = new ColorMaterial (0x000099,0.7);
selectedMat.interactive=true;
matList.addMaterial(selectedMat as MaterialObject3D , "selectedMat");
/******************************************** OBJECTS ********************************************/
CreateMap();// запуск функций, которые я не буду описывать тут
CreateObjectGroup();//с целью экономии места
/******************************************** Camera *********************************************/
camera.focus = 20;
camera.zoom = 30;
camera.y = plane.y;
camera.z = plane.z-1000;
camera.x = plane.x;
camera.rotationY = 0;
/******************************************** Vievport *********************************************/
viewport.buttonMode = true;
/********************************************** Light ***********************************************/
light.x=1000;
light.y=2000;
loadXML();
}
protected function CreateMap():void
{ trace ("bla-bla");}
protected function CreateObjectGroup():void
{ trace ("bla-bla");}
private function EnterFrame(event:Event=null):void
{ singleRender();}
public function MouseWHELL(event:MouseEvent):void
{ trace ("bla-bla");}
public function MouseDown(event:MouseEvent): void
{ trace ("bla-bla");}
public function MouseUp(event:MouseEvent): void
{ trace ("bla-bla");}