2011-11-20 14 views
5

तो संस्करण 10.1 के बाद फ़्लैश प्लेयर में एक नई "सुविधा" रही है, जो एप्लिकेशन विंडो को देखने के बाहर होने पर खिलाड़ी के फ़्रेमेट को 2 एफपीएस तक कम कर देता है। यह प्रदर्शन के लिए अच्छी खबर है, लेकिन यह टाइमर क्लास जैसे कुछ कार्यक्षमता तोड़ सकती है।फ्लेक्स वेब एप्लिकेशन: खिड़की अदृश्य होने पर फ़्रेमेट ड्रॉप को रोकें

मेरे पास एक ऐसा एप्लिकेशन है जो उलटी गिनती प्रदर्शित करने के लिए टाइमर का उपयोग करता है। एप्लिकेशन की प्रकृति को देखते हुए, टाइमर को इसकी उलटी गिनती पूरी करने की आवश्यकता होती है, भले ही उपयोगकर्ता इसे देखने के लिए न हो। कल्पना करें कि आपको कार्य करने के लिए उपयोगकर्ता को केवल 10 सेकंड देने की आवश्यकता है। यदि उपयोगकर्ता काउंटर के माध्यम से विंडो को आधा रास्ते कम करता है, तो वे जितना समय चाहें उतना समय ले सकते हैं और जब भी वे विंडो पर वापस आते हैं तो 5 सेकंड शेष होते हैं। यह स्पष्ट रूप से नए फ़्लैश खिलाड़ियों से नहीं बचा जा सकता है।

वायु अनुप्रयोगों में पृष्ठभूमि फ़्रेमरेट संपत्ति है जो इस व्यवहार को रोकने के लिए सेट की जा सकती है, लेकिन यह विंडोएडप्लिकेशंस क्लास का हिस्सा है, इसलिए ऐसा लगता है कि यह किसी वेब एप्लिकेशन में उपलब्ध नहीं है। क्या खिड़की दिखाई नहीं दे रही है, भले ही कोई स्थिर फ्रेम दर रखने का कोई तरीका जानता हो? धन्यवाद

+0

+1 एआईआर ऐप में संपत्ति के बारे में टिप्पणी जोड़ने के लिए +1। मैं अनजान था कि अस्तित्व में था। मैं भी आश्चर्यचकित हूं कि ब्राउज़र में ऐसा करने का एक तरीका था। – JeffryHouser

+0

अरे श्री जय, क्या आपने संभावित सुधारों का प्रयास किया? – Ryan

+0

अभी तक नहीं, क्षमा करें। मैं बेहद व्यस्त हूं लेकिन जैसे ही मैंने इसे आजमाया है, मैं उसे जो पोस्ट करता हूं उसे पोस्ट करूंगा।मैंने कुछ त्वरित परीक्षण चलाए और मुझे देरी की नकल करने में कठिनाई हुई, जिससे मुझे विश्वास होता है कि शायद मैं टाइमर को प्रभावित करने वाली फ्रेमरेट ड्रॉप के बारे में गलत था। किसी भी तरह से मैं इसका परीक्षण करने की कोशिश करूंगा हालांकि मुझे यकीन नहीं है कि विंडो आउट व्यू के साथ फ़्रेमेट को कैसे मापें (टाइमर प्रभावित नहीं होने पर)। मैंने सोचा कि बक्षीस उच्चतम स्कोर के साथ उत्तर में स्वचालित रूप से दिया जाएगा, लेकिन अगर ऐसा नहीं है तो मैं आपका उत्तर स्वीकार कर सकता हूं क्योंकि आप जवाब देने वाले पहले व्यक्ति थे। – JayPea

उत्तर

1

एम्बेडेड एसएफएफ़ के अपारदर्शी के डब्ल्यूएमओडी पैरामीटर को फ़्रेमेट थ्रॉटलिंग को रोक देगा।

ब्रायन

0

मैं अपने आप को करने की कोशिश की नहीं है, लेकिन हो सकता है आप फ़्रेमरेट onDeactivate के लिए मजबूर करने की कोशिश कर सकते हैं:

stage.addEventListener(Event.DEACTIVATE, onDeactivate); 

function onDeactivate (e:Event):void 
{ 
    //eg myFrameRate=24 
    stage.frameRate = myFrameRate; 
} 

मुझे पता है कि अगर यह काम करता है।

+0

में लागू किया है धन्यवाद, मैंने नहीं किया है इसका परीक्षण करने का मौका था, लेकिन जैसे ही मैं करता हूं मैं बक्षीस का पुरस्कार दूंगा। यदि दोनों काम करते हैं, तो मैं इसे ब्रायन को दूंगा क्योंकि उसने पहले जवाब दिया था। – JayPea

+0

@JayPea: बक्षीस के लिए कोई समस्या नहीं ;-) – AsTheWormTurns

0

परीक्षण के साथ:

private var numer:int = 0; 
private var prevNumer:int = 0; 
private var timer:Timer = new Timer(1000, 0) 

[...]

var tf:TextField = new TextField(); 
addChild (tf); 
addEventListener (Event.ENTER_FRAME, onEnterFrame) 
timer.addEventListener (TimerEvent.TIMER, onTimer) 
timer.start() 
function onTimer (e:TimerEvent):void 
{ tf.appendText (' ' + (numer - prevNumer)); prevNumer = numer;} 
function onEnterFrame (e:Event):void { numer++ } 

स्पष्ट रूप से पता चलता है कि जब आप फ़्लैश देखते हैं, tf आपका एफपीएस के बराबर संख्या जोड़ देता है। यदि टाइमर एफपीएस के साथ एक साथ बदल जाएगा, तो विंडो को कम करने पर आपको कोई फर्क नहीं पड़ता। लेकिन, वापस आकर आप 2 2 2 2 2 देखते हैं, यानी, एफपीएस 2 से गिर गया।

AsTheWormTurns द्वारा निष्पादन समाधान पर काम नहीं करता है। घटना निकाल दी गई है, लेकिन एफपीएस नहीं बदला है। wmode = श्री ब्रायन बिशप द्वारा अपारदर्शी समाधान काम नहीं करता है भी

कुछ कोशिश करने के लिए स्पष्ट: एफपीएस स्थापित करने के लिए परिवर्तन onEnterFrame समारोह:

function onEnterFrame (e:Event):void { numer++; stage.frameRate = 30 } 

जाहिर है आप एफपीएस निर्धारित नहीं कर सकते जब तक फ्लैश दिखाई नहीं देता है! ठीक है, आप एफपीएस निर्धारित नहीं कर सकते जब तक कि आप करने के लिए 1.

आपकी समस्या को वर्कअराउंड यह सेट सरल है, बस एक और टाइमर इस से ऊपर के समान है, लेकिन साथ अतिरिक्त सशर्त:

function onTimer (e:TimerEvent):void { 
if (numer - prevNumer == 2) adjustOriginalTimer(); 
tf.appendText (' ' + (numer - prevNumer)); prevNumer = numer; 
} 

ई: आप कर सकते हैं इसके बारे में यहां पढ़ें: http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html