flash as3-文档类外的访问阶段
我正在尝试向stage添加一个键盘事件侦听器,以检测用户何时单击左箭头键或右箭头键。但是这个监听器是从导入到文档类的类文件中调用的,因此我认为它不知道“stage”指的是什么。我如何解决这个问题 这是我的代码: 文档类:AugmentedReality.as:flash as3-文档类外的访问阶段,flash,actionscript-3,Flash,Actionscript 3,我正在尝试向stage添加一个键盘事件侦听器,以检测用户何时单击左箭头键或右箭头键。但是这个监听器是从导入到文档类的类文件中调用的,因此我认为它不知道“stage”指的是什么。我如何解决这个问题 这是我的代码: 文档类:AugmentedReality.as: package { import examples.PlaneVid_Carousel; public function AugmentedReality(){ addChild (new PlaneVid_Carous
package {
import examples.PlaneVid_Carousel;
public function AugmentedReality(){
addChild (new PlaneVid_Carousel())
}
}
平面视频传送带{
package examples {
import flash.display.*;
import flash.events.*;
public class PlaneVid_Carousel extends Sprite {
public function PlaneVid_Carousel(){
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown
}
protected function keyPressedDown(e:KeyboardEvent):void {
//DO STUFF
}
}
}
}
将PlaneVid_旋转木马添加到舞台后,添加键盘侦听器,舞台将可访问
public function PlaneVid_Carousel()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedDown);
}
protected function keyPressedDown(e:KeyboardEvent):void
{
//DO STUFF
}
我总是对我的DisplayObjects使用此init方法,它是FlashDevelop的DisplayObject的默认模板。简单的解决方法是在document类上添加一个静态属性,在本例中称为MyApp.as。您可以通过在适当的时间点设置globalStage属性来为其赋值,这在大多数情况下都是正确的文档类中的可以是构造函数:
public class MyApp extends Sprite {
public static var globalStage:Stage;
//...
public function MyApp() {
globalStage = stage;
}
}
之后,您可以通过导入文档类并调用以下代码段从任何位置访问该阶段:
MyApp.globalStage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
现在它不必是document类的属性,也许像StageProxy
这样的专用类更清晰,您仍然可以从document类分配它
public function MyApp() {
StageProxy.stage = stage;
}
并从任何地方访问它:
StageProxy.stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
这仍然不是我所说的“干净”或“漂亮”,但它完成了任务。@mheavens,忘了我说的话。我完全忽略了你们班实际上是一个精灵的事实。@adam说的是这样做的适当方式。