Обнаружение изменения ориентации с помощью прослушивателя событий
Я работаю над мобильным проектом ActionScript, я использую скворец с AS3, я пытаюсь добавить прослушиватель событий, чтобы обнаружить событие ORIENTATION_CHANGE в классе скворец, но он не обнаружит изменения, если я добавлю прослушиватель событий в класс AS3 (основной класс) обнаружит и вызовет скворец снова.
Основной класс 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
никогда не обнаружит изменение ориентации, может быть, потому что я обнаружил вспышку внутри скворец.. любая помощь
2 ответа
Ответ: в моем коде есть ошибка, проблема в этой функции:
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);
Потому что "сцена", которую вы использовали, - это сцена Старлинга.