2011-05-27 11 views
6

मैं वास्तव में एक पुराने पुराने डिवाइस के लिए वास्तव में पुराना एडब्ल्यूटी गेम पोर्ट कर रहा हूं।एडब्ल्यूटी फास्ट ग्राफिक्स और थ्रेड सुरक्षा

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

मैंने इंजन थ्रेड को ऑफ़-स्क्रीन बफर पर खींचकर काम करने में कामयाब रहा है और उसके बाद यूआई थ्रेड समय-समय पर डिस्प्ले घटक पर रेपेंट() को कॉल करता है और बफर को बफर करने वाले डिस्प्ले घटक स्क्रीन, लेकिन प्रदर्शन बेकार है --- आश्चर्यजनक नहीं है सभी संदर्भ स्विच और डबल बफरिंग।

मैं वास्तव में एक विशेष रूप से ज्ञात एडब्ल्यूटी प्रोग्रामर नहीं हूं; यह पर्याप्त रूप से घृणास्पद है कि मैंने इसे अभी तक टाला है। लेकिन यह समस्या --- एक इंजन धागा स्क्रीन पर आकर्षित करना चाहता है --- एक आम होना चाहिए। क्या किसी को किसी भी सभ्य रणनीतियों (और अधिमानतः उदाहरण कोड!) के बारे में पता है, यह कैसे सुरक्षित तरीके से ऐसा करने के लिए है जो सिस्टम के जितना संभव हो उतना प्रदर्शन निचोड़ता है?

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

यह सब पीबीपी 1.1.2 पर है --- हाँ, यह न तो भरा है जावा और न ही ईमानदार मिडपी ...

+0

समय-समय पर कितनी बार होता है? – user314104

उत्तर

1

game canvas का उपयोग करने से मदद मिल सकती है। यह गेम लूप में पेंटिंग करने की इजाजत देता है, इसलिए आपको डबल बफरिंग की आवश्यकता नहीं होगी। एक और अधिक कच्चे दृष्टिकोण paintImmediately() का उपयोग करना है। यह गुई को पुनर्जीवित करने के लिए मजबूर करेगा।

//Gui 
public void update(/*may want to pass the shapes to paint*/) 
{ 
    paintImmediately(this.getGrphics()); // assuming 'this' is a jpanel 
} 


//Game loop 
public void gameLoop() 
{ 
    // collision detection etc 
    gui.update(); 
} 
+0

धन्यवाद, लेकिन मैं पूरी तरह से यह कहना भूल गया कि मैं पीबीपी 1.1.2 पर काम कर रहा हूं। इसलिए मुझे उन उपयोगी चीजों में से कोई भी नहीं मिला है। (जब तक GameCanvas को किसी पीबीपी सिस्टम पर बोल्ड नहीं किया जा सकता है? यह बिल्कुल वैसा ही दिखता है जो मैं चाहता हूं।) –

+0

यदि आप पेंट का उपयोग करते हैं तो तुरंत (ग्राफिक्स guiGraphics) इसे भी काम करना चाहिए। मैं एक उदाहरण बनाउंगा। – Kevin

+0

मुझे यह कहने से नफरत है, लेकिन पेंट तुरंत जेकंपोनेंट पर एक विधि है, और पीबीपी में स्विंग नहीं है ... हाँ, केवल स्टॉक एडब्ल्यूटी है। मैंने तुमसे कहा था कि यह घृणित था! –