1
votes

My timer has three variables that I can trace to the output window, but don't know how to pass them to the timer. How to I pass the XML values to my timer?

Purpose
I want to test with an XML document, before I try connecting it to an XML socket.

myXML

<?xml version="1.0" encoding="utf-8"?>
<SESSION>
<TIMER TITLE="speed">100</TIMER>
<COUNT TITLE="starting position">-77777</COUNT>
<FCOUNT TITLE="ramp">1000</FCOUNT>
</SESSION>

myFlash

//COUNTER 'instance of mytext on stage'
/*
fields I want to change with XML
*/
        //CHANGE TO 100
        var timer:Timer = new Timer(10); 
        //CHANGE TO -77777
        //var count:int = 0;
        var myString:String = "-77777";
        var count:int = int(myString);
        //CHANGE TO 1000
        //var fcount:int = 0; 
        var myStrg:String = "1000";
        var fcount:int = int(myStrg);

        //myXML.COUNT.text

timer.addEventListener(TimerEvent.TIMER, incrementCounter);  
timer.start();  

function incrementCounter(event:TimerEvent) {  
  count++;  
  fcount=int(count*count/1000);//starts out slow... then speeds up 
  mytext.text = formatCount(fcount);
}

function formatCount(i:int):String { 
  var fraction:int = i % 100; 
  var whole:int = i / 100;  

  return ("0000000" + whole).substr(-7, 7) + "." + (fraction < 10 ? "0" + fraction : fraction); 
} 

//LOAD XML
var myXML:XML;
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("time.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);

//PARSE XML
function processXML(e:Event):void {
  myXML = new XML(e.target.data);
  trace(myXML.COUNT.*);
  trace(myXML);

//TEXT 
var text:TextField = new TextField(); 
text.text = myXML.COUNT.*; 
text.textColor = 0xFF0000;
addChild(text);
 }

DID THIS "commented out my var count and did this

ex.

var count:int = Number(myXML.COUNT.text());

ex.
var count:int = int(myXML.*.(@TITLE == 'starting position'));

TypeError: Error #1009: Cannot access a property or method of a null object reference. at numbersXMLtext_fla::MainTimeline/frame1()


RESOURCES

OReilly's ActionScript 3.0 Cookbook, Chapter 12 Strings, Chapter 20 XML

1
The pseudo-code I supplied in my answer just shows how you can access the values you want from the xml snippet you provided. What you do with those values is up to you. If you want the variable names to be timer, count, and fcount then by all means change them accordingly... not sure what more you're looking for.heavilyinvolved
Yea, it should be that hard. I tried using your structure but I'm missing something. I'm looking at this site senocular.com/flash/tutorials/as3withflashcs3/?page=4anon255058

1 Answers

0
votes

For the speed value:

var speed:int = int(myXML.*.(@TITLE == 'speed'));

For the starting position value:

var startingPoint:int = int(myXML.*.(@TITLE == 'starting position'));

For the ramp value:

var ramp:int = int(myXML.*.(@TITLE == 'ramp'));

These snippets are using E4X to parse the xml values. It should also be noted that depending on what the final xml looks like this approach will probably need to be modified accordingly. Good luck!