أيهما أكثر فعالية، تدمج FLV أو تجميع FLV إلى SWF وتحميله بشكل حيوي؟

StackOverflow https://stackoverflow.com/questions/1517589

سؤال

لقد أخذت مؤخرا مهمة شاقة إلى حد ما لإنشاء فيديو موسيقي تفاعلي لشبح شبح شعبي. أحضرت في وقت متأخر من المشروع ومواجه ملف تأليف عملاق (حوالي 5000+ إطارات). كان المبرمج السابق (الذي فعل كل شيء في AS2) جزءا لا يتجزأ في الأساس لمدة سنتين ونصف في الوقت المحدد في الوقت الحالي، وسيضيف نقاط الإطار في بعض النقاط في مقاطع التفاعل مع وظائف Click Click الأساسية التي من شأنها أن تؤدي إلى هذه المقاطع لتشغيل مقاطع أخرى مع بعض عناصر الفلاش وبعض عناصر الفيديو.

(الإصدار النهائي الذي أنشأته يمكن أن ينظر إليه هنا http://www.gwghostmagic.com.);

كونه غريب أنيق قررت إعادة بناء كل شيء في AS3، خندق الخط الزمني تماما والتحميل في عناصر التشغيل في وقت التشغيل بحيث بدلا من 5000 إطارات كان لدي إطار واحد وإضافته الإجراءات التي تمت إضافتها حدثا. لتشغيل التفاعل عند تحميل .swf محملة من إطارات معينة. من موقف المبرمجين، جعل كل شيء أكثر وضوحا وأسهل لمعالجة إجراءات معينة. كانت المشكلة، والشيء الذي يركض مثل حماقة.

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

في البداية قررت بناء وتنفذ من البث .flv ولكن مزامنة الإجراءات إلى .flv كان مستحيلا لأن .flv كان يعمل عند 23.975 إطارا في الثانية بينما كان فيلم فلاش الخاص بي يعمل في 24 إطارا في الثانية. للأسف لقد أجبرت على ترجمة .SWF مع FLV Embedded. ثم تم تحميل Wswf في .WF الرئيسية التي تحتوي على جميع الوظائف ومقاطع إضافية تلعب وفقا لموضع إطار .SWF المحمل.

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

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

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

المحلول

أعتقد أن وجود الحدث يؤدي إلى تشغيل كل إطار بدلا من إثارة الإجراءات التي تحسيم أحيانا لفرق الأداء. نأمل أن تتمكن من تقليل كمية التعليمات البرمجية والشرطية التي تم تشغيلها في معالج الأحداث.

إليكم فكرة أنني لم أختبرها:

var dispatch:Object = {
  f1:   function () {textBubble.text = "This is Rush Hour 2";},
  f61:  function () {textBubble.text = "";},
  f111: function () {textBubble.text = "This scene has 50 takes; "
                     +"Jackie Chan said \"Square Madison\" each time.";},
  f171: function () {textBubble.text = "";}
};
addEventListener(Event.ENTER_FRAME, function (e:event) {
  if (dispatch["f"+e.target.currentFrame] is Function) {
        dispatch["f"+e.target.currentFrame]();
  }
});

هذا يستخدم موضوع كصفيف نقابي كما هو موضح في مستندات حية.

نصائح أخرى

ربما تكون صحيحة - تشغيل 200+ خطوط من التعليمات البرمجية على كل إطار يبطئك. بدلا من قائمة ضخمة من العبارات، قم بتقسيم وظائف الإطار الخاص بك وأعلى فقط استدعاء تلك التي تحتاجها - وهذا هو توسيع على فكرة Dlamblin - وبهذه الطريقة تقوم بتشغيل أصغر كمية من التعليمات البرمجية اللازمة لكل إطار:

function doThisOnFrame20():void
{
    //do stuff...
}

function doThisOnFrame50():void
{
    //do stuff...
}

var frameFunctions:Array = new Array();
frameFunctions[20] = doThisOnFrame20;
frameFunctions[50] = doThisOnFrame50;

function enterFrameListener(event:Event):void
{
    if(frameFunctions[swfWithFLV.currentFrame] is Function)
    {
        frameFunctions[swfWithFLV.currentFrame]();
    }
}

addEventListener(Event.ENTER_FRAME,enterFrameListener);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top