Я начинающий, не судите строго.
Есть игра. При нажатии кнопки в главном меню запускается сам игровой процесс. Нужно было осуществить управление клавиатурой. Единственным рабочим способом оказался такой:
Код AS3:
/*Обработчик нажатие кнопки начала игры*/
function gsConnect(event:Event){
addChild(_game);}
/*конструктор класса _game*/
function Game() {
. . . .
this.addEventListener(Event.ADDED, _test);
. . . .
}
/*Ф-я добавление слушателей клавиатуры*/
function _test(event:Event){
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, reportKeyUp);
stage.addEventListener(Event.ENTER_FRAME,Movement);}
Я, честно говоря, довольствовался бы и подобным костылём. НО решил я, значит, добавить прелоадер, который ничем особенным не отличается.
[spoiler]
Код AS3:
package {
import flash.display.*;
import flash.events.*;
import flash.text.TextField;
import flash.net.URLRequest;
public class Preloader extends Sprite {
var progress_tf:TextField = new TextField();
var loader:Loader = new Loader();
public function Preloader() {
var loader_url='http://.... .swf';
progress_tf.x=530/2;
progress_tf.y=380/2;
addChild(progress_tf);
var loadURL:URLRequest=new URLRequest(loader_url);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoadProgress);// прогресс загрузки
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);// загружено
loader.load(loadURL);
}
function onLoadProgress(evt:ProgressEvent):void {
progress_tf.text = String(Math.round(100*(evt.bytesLoaded/evt.bytesTotal)))+"%";
}
function onLoadComplete(evt:Event):void {
removeChild(progress_tf);
addChild(loader);
}
}
}
[/spoiler]
И что вы думаете, естественно, stage теперь не фокусируется на классе Game(имхо), и не реагирует на нажатие клавиш. Не прошу решить проблему за меня. Хотел бы услышать объяснение почему таковая возникает, либо почувствовать пинок в максимально конкретезированном направлении её решения.