More on the project I’ve posted about recently…
I’ve developed a class, TypewriterXML, that loads text from an XML file and IS SUPPOSED TO render the text typewriter-like. Here’s TyperwriterXML:
package {
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.*;
public class TypewriterXML extends Sprite {
private var xmlFile:String;
private var xmlData:XML;
private var urlLoader:URLLoader;
private var _speed:Number;
private var _tX:uint;
private var _tY:uint;
private var _tWidth:uint;
private var _tHeight:uint;
private var _primaryFormat:String;
private var _formatMatrix:Array;
private var _textField:TextField;
private var _typeText:String;
private var typeTimer:Timer;
private var count:int;
private var str:String;
private var testTextField:TextField;
private var testString:String;
private var defaultFormat:TextFormat;
public function TypewriterXML(arg_filename:String,
arg_speed:uint,
arg_x:int,
arg_y:int,
arg_width:int,
arg_height:int,
arg_primaryFormat:String,
arg_formatMatrix:Array) {
xmlFile = arg_filename;
_speed = arg_speed;
_tX = arg_x;
_tY = arg_y;
_tWidth = arg_width;
_tHeight = arg_height;
_primaryFormat = arg_primaryFormat;
_formatMatrix = arg_formatMatrix;
var urlRequest:URLRequest = new URLRequest(xmlFile);
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, xmlCompleteListener);
urlLoader.load(urlRequest);
}
private function xmlCompleteListener(e:Event) {
xmlData = new XML(urlLoader.data);
str = xmlData.PAR1.toString();
typewriter(_speed, _tX, _tY, _tWidth, _tHeight,
_primaryFormat, _formatMatrix);
}
private function typewriter(_speed, _tX, _tY, _tWidth, _tHeight,
_primaryFormat, _formatMatrix):void {
_textField = new TextField();
typeTimer = new Timer(_speed);
typeTimer.addEventListener(TimerEvent.TIMER, type);
typeTimer.start();
count = 0;
_textField.text = "";
_textField.x = _tX;
_textField.y = _tY;
_textField.wordWrap = false;
}
private function type(e:TimerEvent) {
_textField.text = str.substring(0, count);
trace("_textField.text = " + _textField.text);
addChild(_textField);
count++;
if (count > str.length) {
typeTimer.stop();
}
}
}
}
Problem: Although the trace in the type() function shows that the text is rendering letter by letter (meaning the class works), I cannot make the text render on the stage. Note that I have addChild(_textField); in the type() function – I thought this should do it. But it doesn’t.
Probably a simple solution? Help please.