I have been working on a project that creates a table of cells from a xml data source. The cells animate onto the screen using the Tween class. At a specified timer the table fades away, updates the xml and rebuilds the table. The problem is that the Tween animation intermittently hangs up and doesn’t complete.
Here is what it should look like every time:
Here is an example of the kind of hang ups I’m getting:
Here’s my code. The flash file I’m using is a 2 frame movie. frame 1 sets some variables and fetches the xml.
Frame 2 processes the xml and creates the table via for loops.
Frame 1 Code:
if (allCells == null) {
var allCells:Array = new Array();
}
for (var i:int = 0; i < allCells.length; i++) {
//fadeOut(allCells*);
removeChild(allCells*);
}
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(new URLRequest("http://10.10.10.154/statuscharts/webservices/chartutil.asmx/getMemberCounts")); //spreadSheet.xml
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void {
xml = XML(event.target.data);
xmlList = xml.children();
//trace(xmlList);
gotoAndStop("parse");
}
function getXMLNode(nodeName:String, theXmlList:XMLList) {
var theXmlListLength:int = theXmlList.length();
//trace(theXmlListLength);
for (var i:int = 0; i < theXmlListLength; i++) {
//trace(String(theXmlList*.name()));
if (String(theXmlList*.name()) == nodeName) {
//trace(theXmlList*);
return theXmlList*.children();
break;
}
}
}
stop();
Frame 2 code:
import fl.motion.easing.*;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
var titleBar_mc:MovieClip;
var myStates:XMLList = xmlList;
var columnHeader:MovieClip;
var columnCell:MovieClip;
var addColumnCellsTarget:Object;
function makeTable(theXMLList:XMLList) {
var allCellsIndex:int = 0;
titleBar_mc = new tableTitle_mc();
titleBar_mc.addEventListener(Event.ADDED_TO_STAGE, fadeOn);
titleBar_mc.alpha = 0;
titleBar_mc.x = 0;
titleBar_mc.y = 0;
allCells[allCellsIndex] = titleBar_mc;
addChild(titleBar_mc);
allCellsIndex++;
var theAttributes:XMLList = theXMLList[0].attributes();
var theAttribute_count:int = theAttributes.length();
for (var i:int = 0; i < theAttribute_count; i++) {
var theAttribute_name:String = theAttributes*.name();
columnHeader = new tableHeader_mc();
columnHeader.addEventListener(Event.ADDED_TO_STAGE,slideToRight);
columnHeader.width = 550 / theAttribute_count; //stage.stageWidth / theAttribute_count;
columnHeader.x = 0;
columnHeader.y = columnHeader.height;
columnHeader.tableCellHomeX = columnHeader.width * i;
columnHeader.tableCellHomeY = columnHeader.y;
columnHeader.cellValue_text.text = theAttribute_name;
allCells[allCellsIndex] = columnHeader;
allCellsIndex++;
addChild(columnHeader);
for (var j:int = 0; j < theXMLList.length(); j++) {
var theCellValue:String = theXMLList[j].attribute(theAttribute_name);
columnCell = new tableCell_mc();
columnCell.addEventListener(Event.ADDED_TO_STAGE,slideDown);
columnCell.width = stage.stageWidth / theAttribute_count;
columnCell.x = columnHeader.tableCellHomeX;
columnCell.tableCellHomeX = columnHeader.tableCellHomeX;
columnCell.y = columnHeader.tableCellHomeY;
columnCell.tableCellHomeY = (columnHeader.tableCellHomeY) + (columnHeader.height * (j + 1));
columnCell.cellValue_text.text = theCellValue;
allCells[allCellsIndex] = columnCell;
allCellsIndex++;
addChild(columnCell);
}
}
}
var mySlideRightX:Tween;
function slideToRight(event:Event) {
event.target.removeEventListener(Event.ADDED_TO_STAGE,slideToRight);
mySlideRightX = new Tween(event.target, "x", Linear.easeOut, event.target.x, event.target.tableCellHomeX, .5, true);
}
var mySlideLeftX:Tween;
function slideToLeft(event:Event) {
addColumnCellsTarget = event.target;
mySlideLeftX = new Tween(event.target, "x", Linear.easeOut, event.target.tableCellHomeX, event.target.x, .5, true);
}
var mySlideDownY:Tween;
function slideDown(event:Event) {
event.target.removeEventListener(Event.ADDED_TO_STAGE,slideDown);
mySlideDownY = new Tween(event.target, "y", Linear.easeOut, event.target.y, event.target.tableCellHomeY, .5, true);
}
var mySlideUpY:Tween;
function slideUp(theMc) {
mySlideUpY = new Tween(theMc, "y", Linear.easeOut, theMc.tableCellHomeY, theMc.y, .5, true);
}
var myFadeOn:Tween;
function fadeOn(event:Event) {
event.target.removeEventListener(Event.ADDED_TO_STAGE, fadeOn);
myFadeOn = new Tween(event.target, "alpha", Linear.easeOut, 0, 1, 1, true);
}
var myFadeOut:Tween;
function fadeOut(theMc) {
myFadeOut = new Tween(theMc, "alpha", Linear.easeOut, 1, 0, 1, true);
}
function fadeOutChartTimer() {
var myTimer:Timer = new Timer(60000);
myTimer.addEventListener(TimerEvent.TIMER, fadeOutChartTimerHandler);
myTimer.start();
}
function refreshChartTimer() {
var myTimer:Timer = new Timer(2000);
myTimer.addEventListener(TimerEvent.TIMER, refreshChartTimerHandler);
myTimer.start();
}
function fadeOutChartTimerHandler(event:TimerEvent):void {
//trace(event.target);
event.target.removeEventListener(TimerEvent.TIMER, fadeOutChartTimerHandler);
for (var i:int = 0; i < allCells.length; i++) {
fadeOut(allCells*);
//removeChild(allCells*);
}
refreshChartTimer();
}
function refreshChartTimerHandler(event:TimerEvent):void {
event.target.removeEventListener(TimerEvent.TIMER, refreshChartTimerHandler);
gotoAndPlay("init");
}
makeTable(myStates);
fadeOutChartTimer();
stop();
Anyone got any ideas?