سؤال

لقد واجهت مشكلة في محاولة redispatch. أحداث الفأر في ActionScript 3، والتي من أصرح بها بشكل لا يصدق قليلا عنه. لقد ضاقتها إلى MouseEvent.clone() طريقة الظهور، حسنا، مكسورة تماما. معالج الأحداث التالية:

    private function handleMouseMove( evt : MouseEvent ) : void
    {
        trace("mousemove", evt.stageX, evt.stageY);
        var newEvt : MouseEvent = evt.clone() as MouseEvent;
        trace("mousemoveclone", newEvt.stageX, newEvt.stageY);
    } 

النتائج في الإخراج التالي، INFINITUM:

mousemove 167 206 
mousemoveclone 0 0

هذا يطابق ما كان الرمز الذي قمت بإعادة تخفيضه في Mousevent لتلقيه، وبالتالي فرضياتي لوظيفة الاستنساخ المكسورة.

هذا يتناقض بشكل مباشر لما يشير إليه الوثائق المرتبطة يجب أن يحدث، إلا إذا فاتني شيئا ما. أنا بخسارة بأكملها حول ما فعلته (أو لم أفعل) التي قد تتسبب في هذا السلوك. هل نسيت الرجال AS3 حقا قراءة مستنداتهم الخاصة Event.clone()?

يمكنني العمل حول هذا بدلا من ذلك باستخدام كائنات الوظيفة لحالة الاستخدام المحددة الخاصة بي، لكنني أفضل عدم ذلك. أيه أفكار؟

يحرر: يتم استنساخ أعضاء المحليين والمهليين بشكل صحيح، والذي يبدوني، مما يجعلني أكثر من الخسارة فيما يتعلق بما يجري هنا.

هل كانت مفيدة؟

المحلول

هذا خطأ معروف. يمكنك رؤية تقرير الخطأ هنا: http://bugs.adobe.com/jira/browse/fp-343.

كل شيء آخر يجب أن تحصل على استنساخ. يمكنك دائما فقط تعيين StageX و StageDy يدويا حتى يتم إصلاح الخطأ.

نصائح أخرى

أدرك أن هذا الموضوع هو 7 أشهر نائمة، ولكن فقط لتحديث هذا قليلا - وهذا لا يزال نشطا في FP10 و Flex4. يحدث أيضا إذا قمت بإعادة رسم الحدث. بمعنى آخر:

private function mouseListener( e:MouseEvent ):void
{
    dispatchEvent( e );
}

يبدو أن المكالمة () التي تم إرسالها () ما يعادل استنساخ ()، لذلك يتم تعيين StageX و Stagey على 0

هذا سؤال قديم جدا، لكنه كان ما جاء عندما غاضب عن حل، وما هو هنا ليس شاملا بما فيه الكفاية.

السبب في أن هذا لم يكن "ثابت" لأنه يعمل كما هو المقصود. يتم احتساب قيم المرحلة والمرشعة عند استدعاء Getter، باستخدام هدف الحدث للقيام بتحويل LocalToglobal. هذا ضروري بحيث تظل الأرقام صحيحة حتى إذا كان الكائن الهدف قد تغير موضع أو مقياس أو دوران منذ إرسال الحدث.

خياران الخاص بك إذا كنت بحاجة فعلا إلى إعادة رسم الفأرة باستخدام قيم المرحلة والمرشدة الصحيحة هي:

  1. قم بإنشاء فئة فرعية مخصصة من MouseEvent التي تتجاوز StageX و Stown Studers. يمكنك إما تخزين الهدف الأصلي والقيام بحساب LocalToglobal بنفسك أو يمكنك تخزين القيم الثابتة للمرحلة المرشحة وسوستوعية باستخدام القيم الموجودة موجودة عند استنساخ الحدث الأصلي.

  2. قم بتوسيع Sprite وإضافة المرسل الخاص بك إلى المرحلة حتى سيعمل الأسهم MouseVent بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top