ठीक है, मुझे लगता है कि आप, निम्नलिखित 'समाधान' है, जो काम नहीं करेगा के लिए नहीं देख रहे हैं के रूप में सभी फ्रेम अभी भी खेला जाएगा:
stage.frameRate = new_frame_rate;
एकमात्र समाधान सिर्फ फ्रेम को छोड़ करने के लिए है अपने enterFrame कॉलबैक में:
// Defined elsewhere.
var current_frame:Number = 0;
var frame_skip_factor:uint; // Skip one frame every 'x' frames.
var is_frame_skip_active:Boolean;
function on_enter_frame(event:Event):void
{
if (is_frame_skip_active && current_frame++ % frame_skip_factor == 0) { return; }
// Game logic/rendering code...
}
(यह सोचते हैं, सर्वोत्तम प्रथाओं के अनुसार, आप एक ही कॉलबैक में केंद्रीकृत खेल तर्क/एनीमेशन है), लेकिन जब किसी भी अतुल्यकालिक कॉलबैक चलाए जा रहे हैं कि दौड़ की स्थिति/जटिलताओं उपस्थित हो सकता है।
रनटाइम स्तर पर फ़्रेम को वास्तव में छोड़ने का कोई तरीका नहीं है; यह एवीएम के अनुबंध का हिस्सा है - कोई फ्रेम छोड़ा नहीं गया है, सभी कोड भाग गए हैं, इससे कोई फर्क नहीं पड़ता। यदि प्रदर्शन एक मुद्दा है, तो आप असीमित कोड निष्पादन का प्रयास कर सकते हैं। ऐसा करने के कुछ तरीके हैं:
1) पिक्सेल बेंडर को कुछ कंप्यूटिंग ऑफ़लोड करें, ताकि इसे असीमित रूप से और/या समानांतर में संसाधित किया जा सके (http://www.adobe.com/devnet/flex/ लेख/flashbuilder4_pixelbender.html)
2) एकाधिक फ्रेमों पर लंबे संचालन के निष्पादन को फैलाएं (एक राज्य की बचत और राज्य बहाल करने की आवश्यकता है, एक ला स्मृति चिन्ह पैटर्न)। विवरण (और एक महान पढ़ा गया) यहां: http://www.senocular.com/flash/tutorials/asyncoperations/
किसी भी मामले में, मैं (प्रथम और सबसे प्रमुख) फ्लैश बिल्डर प्रोफाइलर या स्टैट्स क्लास (श्री डोब) जैसे टूल के साथ प्रदर्शन बाधा को निश्चित रूप से पहचानने की अनुशंसा करता हूं।
ब्लिटिंग समाधान हो सकता है (एनीमेशन के प्रत्येक फ्रेम के लिए टाइल के साथ एक स्प्राइटशीट बनाएं)। लेकिन किसी भी मामले में, मुझे लगता है कि आपको क्या करना होगा सबक्लास मूवीक्लिप है और प्ले(), स्टॉप(), और gotoAndplay() विधियों को ओवरराइड करें।
public class MyMovieClip extends MovieClip
{
override public function play():void
{
addFrameSkipListener();
super.play();
}
override public function gotoAndPlay(frame:Object, scene:String = null):void
{
addFrameSkipListener();
super.gotoAndPlay(frame, scene);
}
// ....
}
कहाँ फ्रेम श्रोता को छोड़ वर्तमान फ्रेम दर फ्रेम या समय के अनुसार फ्रेम को छोड़ देगा, यदि आवश्यक हो: अपने वर्ग कुछ इस तरह दिखना चाहिए। स्वाभाविक रूप से, जब एनीमेशन समाप्त हो गया है तो आपको फ्रेमस्कीपलिस्टर को भी हटाने की आवश्यकता होगी।
जबकि मूवीक्लिप ओवरराइड समाधान पेपर पर जो भी आप चाहते हैं, वह कर सकता है, यदि आपके पास बहुत सारी ऑब्जेक्ट्स हैं, तो यह वास्तव में प्रदर्शन को कम कर सकता है क्योंकि अतिरिक्त ENTER_FRAME श्रोताओं कुछ ओवरहेड जोड़ देंगे।
"मेरे गेम में स्क्रीन पर 600+ जटिल मूवीक्लिप्स हैं, जो केवल 100 एएस 3 कक्षा से जुड़े हुए हैं जिन पर इसका प्रत्यक्ष नियंत्रण हो सकता है।" क्या आपकी समस्या है कि आप चरण में जोड़े जाने के बाद ऑब्जेक्ट्स के संदर्भ नहीं पा सकते हैं, या gotoAndStop() कलाकारों द्वारा निर्धारित टाइमलाइन कोड को बाधित कर देगा? यदि आप एक्स फ्रेम को छोड़ने और टाइमलाइन कोड की अखंडता को बनाए रखने की आवश्यकता है (इस एटीएम का परीक्षण नहीं किया है, लेकिन आपके वर्कफ़्लो के बारे में भी पर्याप्त नहीं है, तो आप शायद अधिक समय बीत चुके हैं, और gotoAndplay (currentframe + x) निश्चित रूप से एक तरफ या दूसरे के लिए कहने के लिए) –