使用事件监听器检测方向更改
我正在开发ActionScript移动项目,我正在使用Starling和AS3,我尝试添加事件侦听器来检测Starling类中的ORIENTATION_CHANGE事件,但它不会检测到更改,如果我添加AS3类(Main类)中的事件侦听器将检测并再次调用Starling类。使用事件监听器检测方向更改
主类AS3的:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.StageOrientationEvent;
import starling.core.Starling;
public class mainClass extends Sprite
{
private var myStarling:Starling;
public function mainClass()
{
super();
stage.addEventListener(Event.RESIZE,onResize);
stage.addEventListener(flash.events.StageOrientationEvent.ORIENTATION_CHANGE,shangedOr);
}
private function shangedOr(e:StageOrientationEvent):void
{
// code
}
private function onResize(e:Event):void
{
myStarling = new Starling(Main,stage);
myStarling.start();
}
}
}
八哥类:我补充新的AS类,并使其八哥类
package
{
import feathers.controls.ScrollContainer;
import feathers.layout.VerticalLayout;
import feathers.themes.AeonDesktopTheme;
import flash.events.Event;
import feathers.controls.Label;
import feathers.controls.TextInput;
import flash.events.StageOrientationEvent;
import org.osmf.layout.VerticalAlign;
import starling.display.DisplayObject;
import starling.display.Sprite;
import starling.display.Stage;
import starling.events.Event;
public class starlingClass extends starling.display.Sprite
{
private var newLayout:VerticalLayout = new VerticalLayout();
private var container:ScrollContainer = new ScrollContainer();
public function starlingClass()
{
super();
this.addEventListener(starling.events.Event.ADDED_TO_STAGE,addToStage);
this.addEventListener(flash.events.StageOrientationEvent.ORIENTATION_CHANGING,orientationChange);
}
private function addToStage(e:starling.events.Event):void
{
this.theme = new AeonDesktopTheme(this.stage);
drawComponent();
}
private function orientationChange(evt:StageOrientationEvent):void
{
// orientation will not responce to change orientation.
}
private function drawComponent():void
{
var button:feathers.controls.Button = new feathers.controls.Button();
button.label = "Click Me";
var newLabel:Label = new Label();
newLabel.text = "hello world";
var txt:TextInput = new TextInput();
var layout:VerticalLayout = new VerticalLayout();
var container:ScrollContainer = new ScrollContainer();
container.layout = layout;
container.addChild(button);
container.addChild(newLabel);
container.addChild(txt);
this.addChild(container);
layout.paddingTop = 10;
layout.paddingRight = 15;
layout.paddingBottom = 10;
layout.paddingLeft = 15;
layout.gap = 5;
}
}
}
问题:mainClass.as
将检测的方向变化并会拨打starlingClass.as
并且不显示任何组件。 starlingClass.as
绝不可能检测取向变化,因为我发现八哥类中的闪光现象.. 任何帮助
答案是: 有在我的代码错误,在此功能的问题:
private function onResize(e:Event):void
{
myStarling = new Starling(Main,stage);
myStarling.start();
}
,因为每一个变化方向将调用onResize
方法,再次把它八哥。 解决方案很简单:
private function onResize(e:flash.events.Event):void
{
if (myStarling == null)
{
myStarling = new Starling(Main,stage);
myStarling.start();
}
}
你应该在nativeStage添加事件侦听器,如下图所示:
this.nativeStage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, onOrientationChanging);
因为您使用的“舞台”是Starling舞台。
如果你再次检查问题,你会看到,闪光事件不会在starling类上工作..'this.nativeStage'不存在于starling类..我想知道如果我可以传递参数从闪存类到椋鸟课,你有什么想法吗? – 2013-05-09 07:06:22
尝试官方信息吧:http://wiki.starling-framework.org/manual/auto-rotation Basicly需要检测尺寸并定向改变之外八哥并将信息传递进去。这就是Starling的工作原理:P – SzRaPnEL 2013-05-08 07:22:29
我按照链接中的要求进行了更改,方向将禁用。和调整大小不会检测到 – 2013-05-08 07:35:11