I’m trying to create an xml image gallery at the moment. I’ve made it so it works but I’m now cleaning the code and I want to separate the navigation into a class of its own. Here is the Gallery class…
package _classes{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import _classes.media.displays.ImageDisplay;
import _classes.media.controllers.ImageController;
public class Gallery extends Sprite {
private var _xmlLoader:URLLoader = new URLLoader();
private var _xmlData:XML;
public var pImageList:XMLList;
public function Gallery() {
initStage();
loadContent();
}
private function loadContent():void {
_xmlLoader.addEventListener(Event.COMPLETE, onContentLoaded);
_xmlLoader.load(new URLRequest("gallery.xml"));
}
private function initStage():void {
stage.frameRate = 61;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
}
private function onContentLoaded(event:Event):void {
_xmlData = _xmlData = new XML(event.target.data);
pImageList = _xmlData.image.imagePath;
initController();
}
private function initController():void {
var imageController:ImageController = new ImageController(pImageList);
addChild(imageController);
}
}
}
ImageController class
package _classes.media.controllers{
import flash.display.Sprite;
import flash.events.MouseEvent;
import _classes.media.displays.ImageDisplay;
public class ImageController extends Sprite {
private var _imageCurrPos:Number = 1;
public function ImageController(pImageList:XMLList) {
var navBack:NavBack = new NavBack();
addChild(navBack);
navBack.x = 0;
navBack.y = 373;
var prevButton:PrevButton = new PrevButton();
addChild(prevButton);
prevButton.x = 0;
prevButton.y = 373;
prevButton.addEventListener(MouseEvent.MOUSE_DOWN, previousClick);
var nextButton:NextButton = new NextButton();
addChild(nextButton);
nextButton.x = stage.stageWidth - nextButton.width;
nextButton.y = 373;
nextButton.addEventListener(MouseEvent.MOUSE_DOWN, nextClick);
var navContainer:Sprite = new Sprite();
addChild(navContainer);
navContainer.y = 374;
for (var i:uint = 1; i <pImageList.length() + 1; i++) {
var imageElement:XML = pImageList*;
var button:ImageButton = new ImageButton();
navContainer.addChild(button);
button.addEventListener(MouseEvent.MOUSE_DOWN, onMouseClick);
button.x = i * 18;
button.useHandCursor = true;
button.buttonText.text = String(i);
}
navContainer.x = stage.stageWidth - (navContainer.width + prevButton.width + 20);
function onMouseClick(event:MouseEvent):void {
var image:ImageDisplay = new ImageDisplay(pImageList[(event.target.text) - 1]);
addChild(image);
_imageCurrPos = Number(event.target.text);
trace(_imageCurrPos);
}
function previousClick(event:MouseEvent):void {
var image:ImageDisplay = new ImageDisplay(pImageList[_imageCurrPos - 1]);
addChild(image);
_imageCurrPos = _imageCurrPos - 1;
trace(_imageCurrPos);
}
function nextClick(event:MouseEvent):void {
var image:ImageDisplay = new ImageDisplay(pImageList[_imageCurrPos + 1]);
addChild(image);
_imageCurrPos = _imageCurrPos + 1;
trace(_imageCurrPos);
}
}
}
}
I’m trying to pass a public XMLList variable from the gallery to the controller and I get this error…
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at _classes.media.controllers::ImageController$iinit()
at _classes::Gallery/::initController()
at _classes::Gallery/::onContentLoaded()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()
Any help would be greatly appreciated…
David