ios - فلاش برو أس 3.0 الهواء لدائرة الرقابة الداخلية، حدث التوجيه لا يعمل




actionscript-3 air (2)

أنا تطوير التطبيق مع التوجه الافتراضي تعيين إلى صورة في فلاش الهواء لإعدادات دائرة الرقابة الداخلية. واتجاه السيارات هو خارج.

ومع ذلك بعد إضافة موفيليب معينة أريد أن يكشف إذا تغير التوجه ثم تغيير موقفها لعرض أفقي أو عمودي.

المشكلة هي أنه لن يتم إرسال StageOrientationEvent.ORIENTATION_CHANGE إذا قمت بتعطيل التوجه التلقائي. وحتى لو تم تمكينه، فإن المستمع إرسال فقط عندما يتغير التوجه إلى رأسا على عقب أو الافتراضي (وليس المناظر الطبيعية)

package  
{  

    import flash.display.MovieClip;  
    import flash.events.MouseEvent;  
    import flash.display.Stage;  
    import flash.events.StageOrientationEvent;  
    import flash.display.StageOrientation;  
    import flash.events.Event;  
    public class NoteBook extends MovieClip  
    {  
        public var type: String = new String();  
        public var deviceHeight: Number = new Number();  
        private var nbp: NoteBookPic;  

        public function NoteBook(DeviceHeight: Number = 720)  
        {  
            nbp = new NoteBookPic();  
            this.addChild(nbp);  

            nbp.deviderPic.visible = false;  
            this.deviceHeight = DeviceHeight;  

            this.x = 0;  
            this.y = deviceHeight / 2;  
            this.scaleY = (deviceHeight / 720) * .65;  
            this.scaleX = this.scaleY;  

            this.addEventListener(MouseEvent.CLICK, clicked);  
            this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);  
        }  
        public function exit()  
        {  
            this.removeEventListener(MouseEvent.CLICK, clicked);  
            this.stage.removeEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orient);  
            this.parent.removeChild(this);  
        }  
        private function clicked(e: MouseEvent)  
        {  

        }  
        private function addedToStage(e: Event)  
        {  
            this.removeEventListener(Event.ADDED_TO_STAGE, addedToStage);  
            this.stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orient);  
        }  
        private function orient(e: StageOrientationEvent)  
        {  
            trace(e.beforeOrientation, e.afterOrientation)  
        }  
    }  

}  

تحديث:

قرأت للتو في أكتيونسكريبت 3.0 مرجع ل Adobe® Flash® منصة أن ستاجورينتاتيونيفنتس يتم إرسالها فقط لدوران الجهاز عندما أوتوريينتاتيون صحيح؛ ولكن كما ذكرت أعلاه حتى لو تم تمكينه، فإن المستمع ترسل فقط عندما يتغير التوجه إلى رأسا على عقب أو الافتراضي (وليس المناظر الطبيعية). والتي في حالتي مشكلة كما بلدي التطبيق يجب أن يكون التطبيق عمودي إلا أن موفيكليب جدا عندما على مرحلتي. وعندما يكون على خشبة المسرح أريد أن يتفاعل مع أي تغييرات التوجه، صورتين واثنين من المناظر الطبيعية.


إذا كنت قفل التطبيق الخاص بك إلى الجانبالصورةالصورة ثم سوف تتلقى فقط التوجهات التي تلبي هذا الجانب، لذلك يجب أن لا تحصل من أي وقت مضى على اتجاه أفقي.

لتلقي أحداث التوجيه هذه، ستحتاج إلى تغيير تهيئة التطبيق لتعيين سبيسيفيكاتيو إلى أي:

<aspectRatio>any</aspectRatio>
<autoOrients>true</autoOrients>

كنت تستخدم StageOrientationEvent.ORIENTATION_CHANGE الذي هو الصحيح. لم أكن أذهب من خلال التعليمات البرمجية الخاصة بك لأنني لا أرى الأشياء الرئيسية. وفيما يلي مثال رمز المفتاح.

شيء واحد غير تقليدي هو أن Capabilities.screenResolutionX و Capabilities.screenResolutionY سوف تعطيك أبعاد الشاشة لكنها لا تتغير مع دوران الجهاز. لذلك عليك أن تتبع اتجاه الشاشة وتعيين عرض وارتفاع نفسك.

var bStagePortrait: Boolean;

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orientationChanged);

if (stage.orientation == StageOrientation.DEFAULT || stage.orientation == StageOrientation.UPSIDE_DOWN) {
    bStagePortrait = true;
} else if (stage.orientation == StageOrientation.ROTATED_LEFT || stage.orientation == StageOrientation.ROTATED_RIGHT) {
    bStagePortrait = false;
}

//  set width and height based on current rotation (Capabilities.screenResolutionX and Y do not change with device rotation)
function fSetScreenDimensions(): void {
    if (bStagePortrait) {
        iWidth = Capabilities.screenResolutionX;
        iHeight = Capabilities.screenResolutionY;
    } else {
        iWidth = Capabilities.screenResolutionY;
        iHeight = Capabilities.screenResolutionX;
    }
}

private function orientationChanged(e: StageOrientationEvent): void {
switch (e.afterOrientation) {
    case StageOrientation.DEFAULT:
        bStagePortrait = true;
        break;
    case StageOrientation.ROTATED_RIGHT:
        bStagePortrait = false;
        break;
    case StageOrientation.ROTATED_LEFT:
        bStagePortrait = false;
        break;
    case StageOrientation.UPSIDE_DOWN:
        bStagePortrait = true;
        break;
    }
}