I am trying to update some code from AS2 to AS3 and I am having a really hard time with it.
I have a slide loader. It uses XML to hold all of the slide information. What I want to happen is that after I load the slide information I will be able to add or delete a slide and trace the updated information. On top of that I want the slide show to advance to the newly created slide.
This is the basic XML:
<?xml version="1.0" encoding="utf-8"?>
<presentation courseName ="" lesson="" >
<modules>
<module>
<title></title>
<slide></slide>
<bullets></bullets>
<bodyText></bodyText>
<checkpoint></checkpoint>
<question></question>
<answers></answers>
<correctAnswer></correctAnswer>
<avatarAnswer></avatarAnswer>
</module>
</modules>
</presentation>
I am loading this XML into and array which was easy enough. What I want to do once it is loaded in to the array is to be able to add or delete slides from the array and then trace the new array/XML information. Here is the AS3 I have so far:
var allSlides:Array = new Array();
var _currentSlide:Number = 0;
var numSlides:Number = 0;
var xmlOut:String = "";
var allLength:Number = new Number();
var tt:Number = 0;
var all:XMLList = new XMLList();
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
var xml:XML;
function xmlLoaded(e:Event):void {
xml = XML(e.target.data);
all = xml.modules.module;
allLength = all.length();
for (var s:uint=0; s<allLength; s++) {
allSlides.push(all[s]);
allSlides._title = all.title;
}
populateScreen(0);
}
loader.load(new URLRequest("xml.xml"));
var modNode:String = "";
//var modAttName:String = "number";
//var modAtt:Number = modNum;
var titNode:String = titleTxt.text;
var slNode1:String = "";
var bullNode:String = "";
var bdyNode:String = "";
var checkNode:String = "";
var quesNode:String = "";
var answNode:String = "";
var corAnNode:String = "";
var avAnNode:String = "";
var slNode:Array = ["module", "title", "slide", "bullets", "bodyText", "checkpoint", "question", "answers", "correctAnswer", "avatarAnswer"];
//var novel:String = <{slNode[0]}{modAttName}={modAtt}>
var novel:String = <{slNode[0]}>
<{slNode[1]}>{titNode}</{slNode[1]}>
<{slNode[2]}>{slNode1}</{slNode[2]}>
<{slNode[3]}>{bullNode}</{slNode[3]}>
<{slNode[4]}>{bdyNode}</{slNode[4]}>
<{slNode[5]}>{checkNode}</{slNode[5]}>
<{slNode[6]}>{quesNode}</{slNode[6]}>
<{slNode[7]}>{answNode}</{slNode[7]}>
<{slNode[8]}>{corAnNode}</{slNode[8]}>
<{slNode[9]}>{avAnNode}</{slNode[9]}>
</{slNode[0]}>;
function populateScreen(s) {
titleTxt.text = allSlides._title[s];
}
function saveScreen(s) {
allSlides._title[s] = titleTxt.text;
}
function gotoFrame(s) {
_currentSlide = s;
if (_currentSlide==allSlides.length) {
_currentSlide = 0;
} else if (_currentSlide<=0) {
_currentSlide = 0;
}
populateScreen(_currentSlide);
}
function watchSlides() {
if (_currentSlide==0) {
deleteSlideBtn.enabled = false;
deleteSlideBtn.visible = false;
} else if (_currentSlide!=0) {
deleteSlideBtn.enabled = true;
deleteSlideBtn.visible = true;
}
}
nextSlideButton.addEventListener(MouseEvent.MOUSE_DOWN, nextButton_MOUSEDOWN);
function nextButton_MOUSEDOWN(e:MouseEvent):void {
saveScreen(_currentSlide);
gotoFrame(_currentSlide+1);
//trace(_currentSlide);
}
prevSlideButton.addEventListener(MouseEvent.MOUSE_DOWN, prevSlideButton_MOUSEDOWN);
function prevSlideButton_MOUSEDOWN(e:MouseEvent):void {
saveScreen(_currentSlide);
gotoFrame(_currentSlide-1);
//trace(_currentSlide);
}
newSlideBtn.addEventListener(MouseEvent.MOUSE_DOWN, insertButton_MOUSEDOWN);
function insertButton_MOUSEDOWN(e:MouseEvent):void {
saveScreen(_currentSlide);
//watchSlides();
allSlides.splice(_currentSlide+1,0, novel);
_currentSlide++;
populateScreen(_currentSlide);
trace(allSlides.length);
}
deleteSlideBtn.addEventListener(MouseEvent.MOUSE_DOWN, deleteButton_MOUSEDOWN);
function deleteButton_MOUSEDOWN(e:MouseEvent):void {
watchSlides();
saveScreen(_currentSlide);
allSlides.splice(_currentSlide,1);
_currentSlide--;
}
saveSlideButton.addEventListener(MouseEvent.MOUSE_DOWN, doneButton_MOUSEDOWN);
function doneButton_MOUSEDOWN(e:MouseEvent):void {
saveScreen(_currentSlide);
trace(allSlides);
}
I am a total loss here. I have a working version in AS2 but it doesn’t want to work right in AS3. What am I messing up? Where did I go wrong? How do I get this to work?
I am right on the verge of it working; this DOES add and delete slides but it starts acting up after you reach the last slide. After the last slide it adds two slides together; doubling them.