Я работаю над текстовой приключенческой игрой, в которой на сцене всегда будет по крайней мере несколько компонентов (текстовая область для повествования и ввода текста для ввода пользователя). Поэтому я создал эти компоненты статически с помощью среды разработки Flash WYSIWYG. Я дал им имена экземпляров "myTA" и "myTI" соответственно. Мне удалось заставить мой основной класс (класс документа для сцены) взаимодействовать с ними (динамически добавлять текст по одному символу за раз, как пишущая машинка во время выполнения), но другие классы в том же пакете, похоже, не способны распознавать сценические составляющие. Ниже приведен соответствующий код:
Случай A, в котором все происходит в основном классе:
package {
public class Main extends MovieClip {
public var myTA:TextArea;
var displayedChar:String = new String();
var textToWrite:String = new String();
var i:int = 0; var intervalId:uint;
var done:int = 0;
public function Main {
setUpTA();
}
public function setUpTA(){
myTA.text = "" + playAtInterval("Hello Player!");
}
public function writeCharsSlowly(){
textToWrite = arguments[0];
displayedChar=textToWrite.substring(i,i+1);
myTA.appendText(displayedChar);
i++;
if (i == textToWrite.length) {
done = 1;
clearInterval(intervalId);
}
}
public function playAtInterval(theText:String) {
i = 0;
intervalId = setInterval(writeCharsSlowly, 100, theText);
}
}
}
Случай B, где Main вызывает второй класс TypeWriter для обработки печати на пишущей машинке:
Main:
package {
public class Main extends MovieClip {
public var myTA:TextArea;
public var myTI:TextInput;
var str:String = new String();
public function Main{
testTypeWriter();
}
public function testTypeWriter(){
typeW.playAtInterval("Hello Player");
typeW.addEventListener(MouseEvent.CLICK,testTypeWriter2);
typeW.addEventListener(KeyboardEvent.KEY_DOWN,inputEngine2)
addChild(typeW);
}
public function testTypeWriter2(event:MouseEvent){
if (myTI.text == "a") {
typeW.playAtInterval("yo");
} else {
typeW.playAtInterval("Greetings, I am a test...");
}
addChild(typeW);
}
public function inputEngine2(event:KeyboardEvent){
str = String.fromCharCode(event.charCode);
myTI.appendText(str);
}
TypeWriter:
package {
public class TypeWriter extends MovieClip {
public var myTI:TextInput;
public var myTA:TextArea;
var i:int = 0;
var done:int = 0;
var intervalId:uint;
var displayedChar:String = new String();
var textToWrite:String = new String();
public function TypeWriter(){
///nothing here
}
public function writeCharsSlowly(){
textToWrite = arguments[0];
displayedChar = textToWrite.substring(i,i+1);
myTA.appendText(displayedChar);
i++;
if (i == textToWrite.length) {
done = 1;
clearInterval(intervalId);
}
}
public function playAtInterval(theText:String) {
i = 0;
intervalId = setInterval(writeCharsSlowly, 100, theText);
}
}
}
Случай A работает, но в случае B Flash выдает ошибку «Ошибка № 1009: не удается получить доступ к свойству или методу пустой ссылки на объект» и отмечает первую строку в TypeWriter, где я пытаюсь работать с myTA, как проблема.
как я могу сделать другие классы, кроме класса документа, "осведомленными" о существующих компонентах этапа?
Спасибо
CCJ