Пытаюсь сделать простую вещь, изменить один из примеров с оф.
сайта Sandy 3D поставив вместо битмап-текстур свои мувиклипы:

Код AS3:
package
{
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.display.StageDisplayState;
import flash.events.*;
import flash.net.URLRequest;
import flash.ui.*;
import flash.utils.getTimer;
import sandy.core.Scene3D;
import sandy.core.data.*;
import sandy.core.scenegraph.*;
import sandy.events.*;
import sandy.materials.*;
import sandy.materials.attributes.*;
import sandy.primitive.*;
import sandy.util.*;
import sandy.view.*;
public class index extends BasicView
{
public function index():void
{
super();
init( 800, 600 );
camera.setPosition( 0, 0, 0 );
camera.fov = 60;
planeNames = [ "side2" , "side3", "side4", "side5", "side0", "side1" ];
loadSideMovies();
}
private var shape:SkyBox;
private var planeNames:Array;
private var polygons:Array;
private var textures:Array;
private var running:Boolean = false;
private var keyPressed:Array = new Array();
private var queue:LoaderQueue = new LoaderQueue();
public function __onKeyDown(e:KeyboardEvent):void
{
keyPressed[e.keyCode] = true;
if( e.keyCode == Keyboard.SPACE )
stage.displayState = StageDisplayState.FULL_SCREEN;
}
public function __onKeyUp(e:KeyboardEvent):void
{
keyPressed[e.keyCode] = false;
}
private function clickHandler( p_oEvt:Event ):void
{
if( p_oEvt.type == MouseEvent.MOUSE_DOWN )
{
lastPanAngle = panangle;
lastTiltAngle = tiltangle;
lastMouseX = stage.mouseX;
lastMouseY = stage.mouseY;
running = true;
}
else
{
running = false;
}
}
// --
private function loadSideMovies():void
{
queue = new LoaderQueue();
queue.add( "side0", new URLRequest("superbox/side0.swf") );
queue.add( "side1", new URLRequest("superbox/side1.swf") );
queue.add( "side2", new URLRequest("superbox/side2.swf") );
queue.add( "side3", new URLRequest("superbox/side3.swf") );
queue.add( "side4", new URLRequest("superbox/side4.swf") );
queue.add( "side6", new URLRequest("superbox/side5.swf") );
queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete );
queue.start();
}
var SideMat0:MovieMaterial = new MovieMaterial( queue.data["side0"],40 );
var SideMat1:MovieMaterial = new MovieMaterial( queue.data["side1"],40 );
var SideMat2:MovieMaterial = new MovieMaterial( queue.data["side2"],40 );
var SideMat3:MovieMaterial = new MovieMaterial( queue.data["side3"],40 );
var SideMat4:MovieMaterial = new MovieMaterial( queue.data["side4"],40 );
var SideMat5:MovieMaterial = new MovieMaterial( queue.data["side5"],40 );
private function loadComplete( event:QueueEvent ):void
{
createScene();
// --
shape.front.appearance = new Appearance(SideMat0);
shape.back.appearance = new Appearance(SideMat1);
shape.left.appearance = new Appearance(SideMat2);
shape.right.appearance = new Appearance(SideMat3);
shape.top.appearance = new Appearance(SideMat4);
shape.bottom.appearance = new Appearance(SideMat5);
// --
shape.front.enableClipping = true;
shape.back.enableClipping = true;
shape.left.enableClipping = true;
shape.right.enableClipping = true;
shape.top.enableClipping = true;
shape.bottom.enableClipping = true;
// --
stage.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, clickHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, __onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, __onKeyUp);
// --
render();
}
// Create the root Group and the object tree
private function createScene():void
{
shape = new SkyBox( "pano", 300, 1, 1 );
rootNode.addChild( shape );
}
private var panangle:Number = 0;
private var tiltangle:Number = 0;
private var lastPanAngle:Number = 0;
private var lastTiltAngle:Number = 0;
private var lastMouseX:Number = 0;
private var lastMouseY:Number = 0;
private const toRADIANS:Number = Math.PI/180;
override public function simpleRender( event : Event = null ) : void
{
if( running )
{
panangle = 0.3*(stage.mouseX - lastMouseX) + lastPanAngle;
tiltangle = -0.3*(stage.mouseY - lastMouseY) + lastTiltAngle;
if (tiltangle > 85)
tiltangle = 85;
if (tiltangle < -85)
tiltangle = -85;
camera.rotateY = panangle;
camera.tilt = tiltangle;
/*
camera.lookAt( 100 * Math.sin(panangle * toRADIANS) * Math.cos(tiltangle * toRADIANS),// + camera.x,
100 * Math.cos(panangle * toRADIANS) * Math.cos(tiltangle * toRADIANS),// + camera.z,
100 * Math.sin(tiltangle * toRADIANS)// + camera.y
);
*/
}
super.simpleRender( event );
}
}
}
Флэш выдает:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at sandy.materials::MovieMaterial()
at index()
Думаю я упускаю что-то простое и очевидное для программиста, но будучи дизигнером в упор не вижу в чем проблема, научный тык и гугление пока не помогли, помогите люди добрые, ткните носом
Добавлено через 5 минут
UPD: Уточню что именно я менял: добавил импорт недостающих классов sandy из примера с клипами, добавил функцию loadSideMovies(), задал материалы так:

Код AS3:
var SideMat0:MovieMaterial = new MovieMaterial( queue.data["side0"],40 );
, назначил материалы поверхностям.