Pixi.js: تمنع الكائنات غير التفاعلية نقرة النقوش المتحركة التفاعلية (ولم يعد DOM يمنع الماوس فوق اللوحة القماشية بعد الآن)؟

تم إنشاؤها على ٢٦ أبريل ٢٠١٥  ·  23تعليقات  ·  مصدر: pixijs/pixi.js

نأمل أن يكون هذان الشخصان قريبان بدرجة كافية ليناسبما نفس المشكلة. أنا أستخدم pixi v3

أ.) عندما يكون لدي نقوشان متداخلة ، حتى إذا كان الكائن العلوي تفاعليًا = خطأ ، فإن تمرير الماوس على الكائن السفلي (مع تفاعلي = صحيح) يتم حظره بواسطة الكائن الأول المعني.

ب) عند تحريك الماوس فوق بعض عناصر DOM التي أستخدمها في HUD في لعبتنا ، فإن النقوش المتحركة الموجودة أسفلها لا تزال تعمل كما لو تم تحريكها بالفأرة مباشرةً. لم يكن هذا يحدث في الإصدار 2. يحدث هذا مع تمرير الماوس ، ولكن ليس النقر.

كنت أبحث عن رابط cdn لـ v3 حتى أتمكن من محاولة إنشاء jsfiddle لهؤلاء ، لكن لم يحالفني الحظ كثيرًا.

🕷 Bug

التعليق الأكثر فائدة

الحيلة هي تعيين منطقة إصابة فارغة إلى DisplayObject أو DisplayObjectContainer:
mouseDisabledElement.hitArea = جديد PIXI.Rectangle (0، 0، 0، 0) ؛

ال 23 كومينتر

https://rawgit.com/

رائع جدا. يمكنك فقط لصق رابط ملف bin dev هناك وسيمنحك عنوان url يقوم الوكيل بتحميله مباشرة من GitHub.

على سبيل المثال ، يمكنك لصق:

https://github.com/GoodBoyDigital/pixi.js/blob/dev/bin/pixi.js

و اخرج:

https://rawgit.com/GoodBoyDigital/pixi.js/dev/bin/pixi.js

شكرًا ، سأقدم بعض أمثلة jsfiddle اليوم وأنشرها هنا.

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

حالة الأخطاء النظرية (مقتطف الشفرة الزائفة):

var bunny = PIXI.Sprite.fromFrame(building.image); 
bunny.interactive = true;
stage.addChild(bunny);
bunny.hitArea = poly;
bunny.on('mouseover',function(data){
      bunny.brighten
});
bunny.on('mouseout',function(data){
      bunny.unbrighten
});
var g2 = new PIXI.Graphics();
    g2.beginFill(0xC03302);
    g2.drawCircle(0, 0, 100);
    g2.endFill(); 
    var cant_touch_this = new PIXI.Sprite(g2.generateTexture());
    cant_touch_this.position.x = bunny.position.x - 100;
    cant_touch_this.position.y = bunny.sprite.position.y - 100;
stage.addChild(cant_touch_this);

يتداخل العفريتان ، ويتوقف معالجو الأرنب عن العمل مرة واحدة فوق الكائن الثاني.

عندما أفعل شيئًا مشابهًا في jsfiddle (http://jsfiddle.net/h63mLx7b/) فإن الخطأ غير موجود. أحد الاختلافات الأساسية التي أراها هنا ، هو أنني لا أستخدم في الكمان fromImage أو fromFrame ، ولكني أقوم بإنشاء نسيج. لقد جربت هذا في سياق لعبتي (باستخدام 2 إنشاء مواد) ولا يزال الخطأ موجودًا.

الشيء التالي الذي أفكر فيه كاحتمال هو hitArea ، لكن عندما أضفت hitArea إلى jsfiddle ، لم يعيد إنشاء الخطأ. سأستمر في ملء الكود الخاص بي لمعرفة ما إذا كان هناك أي مقتطفات مهمة أخرى فاتني ، ولكن ربما ترى شيئًا مفقودًا؟ هل هناك أي شيء في PIXI يحتوي على السلوك المقصود المتمثل في صنع كائن ما يمنع وقوع الأحداث التي تحته والتي ربما أكون قد أدرجتها عن طريق الخطأ؟

ربما معلومات مفيدة أيضا ، الأرنب لديه

    bunny.pivot.x = 0.5;
    bunny.pivot.y = 1;
    bunny.anchor.x = 0.5;
    bunny.anchor.y = 1;

معلومة أخرى مفيدة: في سياق لعبتي ، يعيد كود jsfiddle إنشاء الخطأ! لذا أعتقد أن السؤال الأخير يصبح ، ما هو الخيار العالمي (أو الخيار على الحاويات نفسها) الذي يمكن أن يخلق هذا؟

wahooooooo لقد اكتشفت ذلك! قد يكون هذا خبرًا أفضل بالنسبة لي أكثر منك رغم ذلك ، بافتراض أن هذا خطأ حقًا وليس سلوكًا مقصودًا.

http://jsfiddle.net/h63mLx7b/1/

عندما توجد العفاريت في حاوية مع تفاعلي = صحيح ، يحدث الخطأ. إذا قمت بتعيين stage.interactive = false ، فسيختفي الخطأ.

تحرير: رابط كمان خاطئ في البداية

تضمين التغريدة مجرد فضول إذا حصلت على فرصة للنظر في هذا

أنا لم أقم بعد ، آسف شادو.

لدي الكثير من أحداث الحياة الجارية الآن ولم يكن لدي الكثير من الوقت للمشروع الجانبي. آمل أن أقوم بتحطيم الأخطاء قريبًا ، لكنني مشغول للغاية الآن :(

لا تقلق يا رجل ، أنا أفهم كيف ستسير الامور :)

مرحبًا يا مختلس النظر - تم إجراء تعديل بسيط على فرع التطوير ، كيف هذا:

http://jsfiddle.net/g3vcfmef/

كل شيء على مايرام الآن!
شكرا :)

أكد العمل على نهايتي أيضًا. اشكرك كثيرا!

في الواقع ، لا يزال الجزء الثاني من سؤالي الأصلي يطرح مشكلة:

ب) عند تمرير الماوس فوق بعض عناصر DOM التي أستخدمها في شاشة عرض المعلومات (HUD) الخاصة باللعبة ، فإن النقوش المتحركة الموجودة أسفلها لا تزال تعمل كما لو تم تحريكها بالماوس أو النقر فوقها مباشرةً. لم يكن هذا يحدث في الإصدار 2. يحدث هذا مع تمرير الماوس ، ولكن ليس النقر.

يتسبب هذا في مشكلة صغيرة ، حيث أنني أحاول النقر فوق أحد عناصر DOM HUD ، ولا تزال اللوحة القماشية أدناه تؤدي إلى نقرة ويحدث معالج الماوس الرئيسي الخاص بي ، وبالتالي إخفاء القائمة على الفور بعد إنشائها / عرضها. لقد حاولت استخدام e.stopPropagation في معالج jquery mouseup ، ولكن دون جدوى.

stage.on('mouseup',function(data){
console.log("Still triggering");
});

$('body').on('mouseup','#battle-menu:not(.attack-island)',function(e){
e.stopPropagation();
});

تتداخل قائمة المعركة مع المرحلة.

آسف لإعادة فتح هذا ، كان يجب أن أعيد قراءة رسالتي الأصلية:

http://jsfiddle.net/prg9jubt/2/

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

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

تمت العودة في 5344062ef4657857ce6a20bea4681e5d66c1c2b2 لـ # 1765. نحن نبحث عن أفضل طريقة لحل هذه المشكلات.

englercj لذا فقط للتأكد من

فقط أريد التأكد من أنني أعرف مكاني / إذا كان بإمكاني الانتقال من هذا الآن للعمل على أشياء أخرى

نعم هذا صحيح.

حسنًا ، شكرًا على التحديث englercj

مثبت! : +1:

أي سيناريو تم إصلاحه؟ إذا كانت الحاوية التفاعلية = true ، وكان باعث الجسيمات يحجب رؤية كائن تفاعلي ، فإن أحداث الماوس لهذا الكائن لا تزال غير مفعلة. من الواضح أنه إذا قمت بضبط الحاوية التفاعلية = خطأ ، فستشتعل الأحداث. ومع ذلك ، أطلب أن تكون الحاوية تفاعلية حتى يمكن سحب الخريطة وتصغيرها. أنا أستخدم أحدث إصدار من التعليمات البرمجية.

الحيلة هي تعيين منطقة إصابة فارغة إلى DisplayObject أو DisplayObjectContainer:
mouseDisabledElement.hitArea = جديد PIXI.Rectangle (0، 0، 0، 0) ؛

تم قفل سلسلة الرسائل هذه تلقائيًا نظرًا لعدم وجود أي نشاط حديث بعد إغلاقه. الرجاء فتح قضية جديدة للأخطاء ذات الصلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات