2009-06-12 13 views
9

मैं एक 2 डी शूटर गेम पर काम करता हूं जिसमें स्क्रीन पर कई चलती वस्तुओं (बुलेट इत्यादि) हैं।फ्लेक्स/फ्लैश/एएस 3 में वीएसआईएनसी?

मैं पूरी स्क्रीन को बफर में प्रस्तुत करने के लिए बिटमैपडेटा.copyPixels (...) का उपयोग करता हूं: बिटमैपडाटा। फिर मैं "बफर" से स्क्रीन पर "कॉपी पिक्सल": बिटमैपडाटा। स्प्राइट का कुछ हिस्सा क्षैतिज स्थानांतरित कर दिया गया: फ़्रेमरेट समस्या यह है कि स्प्राइट के अलावा फाड़ रहे हैं 60.

private var bitmap:Bitmap = new Bitmap(); 
private var buffer:Bitmap = new Bitmap(); 

private function start():void { 
    addChild(bitmap); 
} 

private function onEnterFrame():void { 
    // render into "buffer" 
    // copy "buffer" -> "bitmap" 
} 

है।

ऐसा लगता है कि VSYNC साथ एक पीसी खेल बंद कर दिया।

क्या कोई इस समस्या को हल करता है?

अद्यतन: सवाल प्रदर्शन के बारे में नहीं है, लेकिन के बारे में स्क्रीन फाड़ से छुटकारा पाने के। [!]

अद्यतन: मैं another question बना लिया है और यहां आप दोनों कार्यान्वयन कोशिश कर सकते हैं: फ़्लैश रास्ता या BitmapData + copyPixels() का उपयोग कर

+0

स्क्रीन फायरिंग प्रदर्शन से संबंधित है। अपने फाड़ने को ठीक करने का यही एकमात्र तरीका है। – Kekoa

+3

@ केकोआ मैं सहमत नहीं हो सकता। प्रदर्शन में स्क्रीन फाड़ने के साथ कुछ लेना देना नहीं है, क्योंकि मैं डबल-बफर का उपयोग करता हूं। खराब प्रदर्शन के मामले में मुझे कम एफपीएस मिलेगा लेकिन स्क्रीन फाड़ नहीं होगा। – oshyshko

+0

अन्य सही हैं, यह दृष्टिकोण फ़्लैश प्लेयर के लिए बहुत उपयुक्त नहीं है ... फिर भी, मैं आश्चर्यचकित हूं, यह बिल्कुल काम नहीं करता है ... कुछ प्रश्न: - क्या आपने बिटमैपडेटा को लॉक करने का प्रयास किया है में ड्राइंग? (यदि नहीं, तो यह बहुत मदद कर सकता है!) - क्या आप पारदर्शी बिटमैप्स का उपयोग कर रहे हैं? (सामान्य प्रदर्शन हत्यारा) - क्या आप 'चरण :: अमान्य' का प्रयास करते हैं और प्रतिपादन के बजाय 'Event.RENDER' पर प्रतिपादन करते हैं? greetz back2dos – back2dos

उत्तर

7

मुझे तुम्हारा दर्द महसूस होता है क्योंकि मैं वर्तमान में अपने खेल को विकसित करने वाले खाइयों में हूं। डिफ़ॉल्ट सेटिंग्स पर, फ्लैश रेंडरर आपके द्वारा उत्पादित किए जाने वाले कोड के बावजूद भयानक स्क्रीन फायरिंग/वी-सिंक समस्याएं उत्पन्न करता है।

यही कारण है कि मुझे सबसे सरल, सुरुचिपूर्ण उत्तर मिल गया, जो कि फिर से फैक्टरिंग कोड नहीं था (जो एक बिट की मदद नहीं करता है, समस्या फ्लैश प्लेयर है, कोड नहीं है)।

बस अपनी प्रकाशित सेटिंग्स में हार्डवेयर त्वरण सक्षम करें। दो अलग-अलग विकल्प हैं:

स्तर 1: डायरेक्ट; और स्तर 2: GPU

आधिकारिक दस्तावेज़ीकरण पर इसके बारे में और पढ़ें: Specify publish settings for SWF files, और यह तय करें कि आपके गेम के लिए कौन सा विकल्प सबसे अच्छा है।

लक्ष्य बाजार यहां एक कारक खेलता है, अगर यह गेमर्स के लिए एक गंभीर गेम है, तो आपको संभावित प्रदर्शन समस्याओं के बारे में चिंता करने की आवश्यकता नहीं है, क्योंकि अधिकांश गेमर्स में GPU है।

This article मुझे विशेष रूप से समाधान प्रदान नहीं करता है, लेकिन मुझे सही दिशा में ले जाता है। लेकिन, यदि आपका गेम ब्राउज़र विंडो में होने वाला है, तो आपको सीधे या gpu पर wmode सेटिंग की एक ही तकनीक का उपयोग करना पड़ सकता है।

+0

क्या आपको पता है कि मेटाडेटा टैग विशेषता है जिसके लिए निर्दिष्ट किया जा सकता है? (FlashDevelop के लिए केवल एक ही खेल, एफएलए के बिना)। लाइनों के साथ कुछ: [SWF (hardwareAcc = "gpu")] क्या यह मौजूद है? – bigp

+0

मुझे पता है कि एकमात्र अन्य पैरामीटर wmode है, जिसे आपकी फ्लैश फ़ाइल एम्बेड करने वाली HTML फ़ाइल में सेट किया जा सकता है। मुझे यकीन है कि ऐसा कुछ होना चाहिए जो फ्लैश आईडीई के बिना इसे प्राप्त कर सके। –

+0

निष्कर्ष क्या है? यह वास्तव में एक फ्लैश प्लेयर की समस्या है और हम इसे सुधारने के लिए कुछ भी नहीं कर सकते हैं? –

-4

पहली बात आप क्या करना चाहते हो सकता है फ़्लैश प्लेयर के इलाज को रोकने है जैसे यह डॉस है। फ्लैश प्लेयर एक बेहद अनुकूलित 2 डी गेम इंजन है जैसा कि यह है और मैं वास्तव में समझ नहीं पा रहा हूं कि आप व्हील को फिर से शुरू करने की कोशिश क्यों कर रहे हैं ताकि आप बिटमैप स्लाइस को कॉपी कर सकें। बेशक आपके पास प्रदर्शन के मुद्दे होंगे।

फ़्लैश प्लेयर आप किसी भी खड़ी या क्षैतिज खाली करने के लिए सिंक क्योंकि फ़्लैश प्लेयर बस इस के किसी भी अवधारणा नहीं है नहीं देता।

मुझे व्यक्तिगत रूप से लगता है कि अगर आप 'चिकनी' एनीमेशन चाहते हैं तो आपको उस पर पुनर्विचार करना चाहिए। फ़्लैश प्लेयर निश्चित रूप से इस में सक्षम है, आप बस गलत दृष्टिकोण की कोशिश कर रहे हैं।

+2

अजीब चीज, स्मृति में बाइट्स (बिटमैप्स) के चक्स कॉपी करना गणित के साथ इसे प्रस्तुत करने के बजाय कंप्यूटर के लिए आसान होना चाहिए गणना। Flash में "cacheAsBitmap" मौजूद क्यों एक कारण होना चाहिए। साथ ही, इसे जांचें: http://aralbalkan.com/759 – oshyshko

+0

आपकी स्प्राइट्स (डिस्प्ले ऑब्जेक्ट्स) को वेक्टर होने की आवश्यकता नहीं है। फ्लैश प्लेयर को इससे निपटने के लिए अनुकूलित किया गया है। जब आप बिटमैप के साथ एक्शनस्क्रिप्ट में फिर से शुरू करना शुरू करते हैं तो फ्लैश प्लेयर पहले से ही बहुत अच्छा करता है और इसके लिए अनुकूलित किया जाता है, तो आप बस बिंदु खो रहे हैं। मुझे लगता है कि आपको टिनिक यूरो ब्लॉग के अधिक पढ़ना चाहिए: http://www.kaourantin.net – Luke

+2

@ ल्यूक: अगर आपका मूल दृष्टिकोण गलत कहने के बजाय व्यावहारिक विकल्प सुझाता है तो आपका उत्तर अधिक उपयोगी होगा। 2 डी गेम बनाने के संदर्भ में बिटमैप्स और कॉपी टॉपीक्सल्स के उपयोग का सुझाव देने वाले कई स्रोत ऑनलाइन हैं, इसलिए यह मूल पोस्टर नहीं है जो पुनर्विचार कर रहा है। – Kylotan

-5

BitmapData के लिए चीजों को बचाने मत करो, कि मार डालेगा, बिल्कुल अपने अनुप्रयोग मार डालते हैं। बिटमैप डेटा बहुत प्रदर्शन नहीं करता है।

फ्लैश में अपने सभी खेल तत्वों, Sprites के रूप में (या MovieClips यदि आप चाहिए), फिर काम कैसे फ्लैश एक सदिश एनीमेशन मंच के रूप में काम करने के लिए, के लिए था। इसे 2 डी बिटमैप ग्राफिक्स के लिए कभी अनुकूलित नहीं किया गया था। 2 डी वेक्टर ग्राफिक्स अच्छी तरह से काम करते हैं, और यहां तक ​​कि यदि आप बिटमैप्स आयात करते हैं तो वे चारों ओर बेहतर चलने के लिए काम करेंगे, फिर वे बिटमैपडाटा ऑब्जेक्ट में प्रस्तुत किए जाएंगे।

+0

अगर मैं बफरिंग के साथ छोड़ दूंगा और मूल फ्लैश स्प्राइट्स (अभी भी बिटमैप्स) के रूप में बिटमैप्स जोड़ दूंगा, तो क्या यह वीएसवाईएनसी समस्या को हल करेगा? – oshyshko

+0

नहीं, यह नहीं होगा। लेकिन यह आपके पास वर्तमान में जो कुछ है उससे कहीं बेहतर दिखाई देगा। जैसा कि मैंने आपके प्रश्न के उत्तर में कहा था, फ्लैश प्लेयर में बनाम की कोई अवधारणा नहीं है। जब आप एफपीएस को 60 पर सेट करते हैं (जो बेतुका है लेकिन यह बिंदु के बगल में है) तो फ्लैश प्लेयर 60 एफपीएस उत्पन्न करने की कोशिश करेगा। हकीकत में यह लगभग कभी इसे पूरा नहीं करेगा। – Luke

+1

मुझे पता चला है कि निश्चित रूप से आपको प्रदर्शन सुधार के लिए बिटमैपडाटा का उपयोग करना चाहिए। –

संबंधित मुद्दे