मैंने अभी वीडियो गेम कोडिंग शुरू कर दी है और मैंने सुना है कि एक जेपीनल पर अपनी सारी ड्राइंग कर रही है और उस पैनल को जेएफआरएएम पर जोड़ना सिर्फ जेएफआरएएम पर ड्राइंग करने से बेहतर है। मैं बस सोच रहा था कि यह बेहतर क्यों है?जेपीनल को बेहतर क्यों जोड़ रहा है?
उत्तर
यह सहित कई कारणों के लिए बेहतर है:
- सबसे घुमाओ घटकों में, कस्टम चित्रकला
paintComponent(Graphics)
विधि अधिभावी द्वारा हासिल की है। शीर्ष-स्तरीय स्विंग कंटेनर (उदा।JFrame
,JApplet
,JWindow
) केवलpaint(Graphics)
है। चित्रकला के लिए सामान्य विधि के परिणामस्वरूप, जो लोग आम तौर पर आम और उच्च-स्तरीय घटकों के बीच इस अंतर को भूल जाते हैं, और इसलिए मूर्ख सलाह देते हैं। ;) - एक
JComponent
एकJFrame
करने के लिए एकJApplet
, या एकJDialog
, या एकJPanel
में एक लेआउट के एक बाधा है, या एकJInternalFrame
, या एक जोड़ा जा सकता है, या ..जब आपको लगता है कि आपका जीयूआई पूरा हो गया है, तो ग्राहक कहता है, "अरे, टूल-बार & में फेंकना अच्छा नहीं होगा, इसे एक एप्लेट के रूप में भी पेश किया जाए?"JComponent
दृष्टिकोण उस पर आसानी से अनुकूलन करता है। - समृद्ध द्वारा समझाया गया (कोड के साथ पूर्ण!), कस्टम घटक को चित्रित करने के लिए आवश्यक समन्वय की गणना करना आसान है, और यदि इसका पसंदीदा आकार है, तो
JFrame
को 'बिल्कुल सही आकार' आकार देने के लिए जीयूआई (pack()
का उपयोग करके) को शामिल करने के लिए। यह विशेष रूप से तब होता है जब अन्य घटक भी जोड़े जाते हैं।
अब, सलाह के साथ दो नाबालिग असहमति की पेशकश की।
यदि संपूर्ण घटक कस्टम पेंट किया गया है, तो को ImageIcon
/JLabel
कॉम्बो के अंदर आसानी से रखना बेहतर हो सकता है। यहां painting to an image का उदाहरण दिया गया है।
जब यह बात आती है इसे अद्यतन करने के लिए समय: एक Graphics
या createGraphics()
एक Graphics2D
- कॉल
getGraphics()
कि ग्राफिक्स उदाहरण के लिए कस्टम चित्र ड्रा - ग्राफिक्स उदाहरण के निपटान
- कॉल
repaint()
पर पर्ची।
पैनल के यूआई प्रतिनिधि को प्राप्त करने के लिए कुछ लाभ है। – trashgod
@trashgod मुझे याद दिलाने के लिए धन्यवाद। हालांकि कुछ चीजें हैं, जिन्हें मैं समझ नहीं पा रहा हूं। 1) ऐसा लगता है कि पैनल यूआई ['JPanel.getUI()'] से प्राप्त किया गया है (http://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html#getUI%28 % 2 9), क्या यह सही है? 2) एक 'जेकंपोनेंट' क्यों नहीं होगा (यूआई के प्रतिनिधि के पास) है? 3) क्या मुझे इन मामलों पर अपना खुद का प्रश्न शुरू करना चाहिए? –
ए 'जेकंपोनेंट' के पास कोई प्रतिनिधि नहीं है, लेकिन यह उप-वर्गों के लिए कुछ बुनियादी आधारभूत संरचना प्रदान करता है। [* एक कस्टम स्विंग घटक कैसे लिखें *] (http://today.java.net/pub/a/today/2007/02/22/how-to-write-custom-swing-component.html) एक है उदाहरण। – trashgod
डबल बफरिंग करने का यह एक आसान तरीका है।
मुझे थोड़ा विस्तार करने दें। वीडियो गेम में, चिकना ग्राफिक्स को फिर से चलाने और प्रदर्शित करने के कारण झिलमिलाहट से बचने के लिए, लोग आमतौर पर डबल बफरिंग का उपयोग करते हैं। वे एक ऑफस्क्रीन सतह बनाते हैं, उस पर सब कुछ खींचते हैं और फिर स्क्रीन पर पूरी ऑफ-स्क्रीन सतह को एक बार में प्रदर्शित करते हैं।
Java2D और स्विंग, यह करने के लिए सबसे आसान तरीका में, बस एक JPanel पर अपने खेल स्प्राइट ड्राइंग करते हैं, और फिर एक JFrame को JPanel जोड़ना है।
दूसरा, जेपीनल पर चीजों को चित्रित करके, आप जेएफआरएम पर गेम लूप में मैन्युअल रूप से पेंट किए बिना अधिक जीयूआई विजेट और अन्य ग्राफिकल ऑब्जेक्ट्स को प्रदर्शित करने की अनुमति देते हैं। उदाहरण के लिए बटन, मेनू, अन्य पैनल, यहां तक कि अन्य प्रतिपादन जेपीनल।
तीसरा, यह आपको अपने गेम के लिए स्वचालित रूप से अनुवादित समन्वय का उपयोग करने की अनुमति देता है। खिड़की की सीमा-चौड़ाई, कार्य पैनल, शीर्षक इत्यादि जैसे खिड़की प्रबंधक विशिष्ट चीजों के बारे में चिंता किए बिना आप सबकुछ ऊपर-बाएं से नीचे दाएं दाएं खींच सकते हैं!
इसके अलावा, यह केवल जावा में खेल प्रोग्रामर्स द्वारा प्रयोग किया जाता सिर्फ एक सम्मेलन नहीं है। एक अलग खेल बोर्ड, रेंडर पैनल या ग्राफिक्स विजेट एक लोकप्रिय मेनलोप जैसे जीयूआई टूलकिट के साथ लाइब्रेरी का उपयोग करते हुए प्रोग्रामिंग गेम काफी लोकप्रिय है। आप जीटीके + में विंडोज फॉर्म में एक फॉर्म फॉर्म और ड्रॉइंग बोर्ड का उपयोग कर सकते हैं।
जेपीनल पर एक छवि खींचना और उसके बाद जेफनेल को जेएफआरएएम में जोड़ना डबल-बफरिंग नहीं करना है। मुझे यकीन है कि आप जेएफआरएएम में डबल-बफर कर सकते हैं। – Richante
@ रिचांटे मैं बहुत अच्छी तरह से जानता हूं कि आप एक जेएफआरएएम में बफर को दोगुना कर सकते हैं, मैंने जो कहा था वह जेपीनल का उपयोग कर रहा था, _easiest_ तरीका है, _2ly_ तरीका जावा 2 डी और स्विंग के साथ डबल-बफरिंग करने का तरीका नहीं है। – ApprenticeHacker
@ रिचांटे भी, डबल-बफरिंग करने का यह तरीका क्यों नहीं है? इसका उपयोग अक्सर उस उद्देश्य के लिए किया जाता है। – ApprenticeHacker
जेएफआरएएम में मेनू, शीर्षक बार और सीमा जैसी चीजें शामिल हैं। इसलिए, जब आप निर्देशांक का संदर्भ लेते हैं तो आपको इनके लिए जिम्मेदार होना पड़ता है। आप फ्रेम में मेनू बार, या कुछ अन्य घटक जोड़ने का भी निर्णय ले सकते हैं। यदि आपकी पेंटिंग सभी जेपीनल में है, तो यह नहीं बदलेगा कि आपको निर्देशांक को संदर्भित करने की आवश्यकता है।
उदाहरण के लिए, कोशिश:
public class Test extends JFrame {
public Test() {
super();
setVisible(true);
setBounds(100, 100, 200, 100);
}
@Override
public void paint(Graphics g) {
g.fillRect(0, 0, 50, 50);
}
public static void main(String[] args) {
new Test();
}
}
और आपको लगता है कि काला वर्ग वर्ग नहीं है देखेंगे! क्योंकि (0, 0) पूरे फ्रेम का ऊपरी बाएं कोने है, दृश्य क्षेत्र के कोने नहीं।
- 1. जेपीनल
- 2. जेपीनल
- 3. जेपीनल
- 4. एक स्ट्रिंग कानूनी में शून्य क्यों जोड़ रहा है?
- 5. जावा में जेपीनल पैडिंग
- 6. Jquery prevObject जोड़ रहा है: सरणी
- 7. जावा स्विंग - जेपीनल को कैसे अक्षम करें?
- 8. एक जेपीनल
- 9. जेमेनूबार को जेपीनल में जोड़ें?
- 10. माउस जेपीनल
- 11. जावा - जेपीनल
- 12. jQuery स्ट्रिंग जोड़ रहा है और
- 13. जल्दी से एक पिन को MKMapView में जोड़ रहा है?
- 14. जावा मौजूदा दस्तावेज़ों में XML दस्तावेज़ों को जोड़ रहा है
- 15. जेएक्सबी माता-पिता को नेमस्पेस जोड़ रहा है लेकिन
- 16. SuspendLayout और ResumeLayout प्रदर्शन को कम करने क्यों जोड़ रहा है?
- 17. जावा में जेपीनल बनाम जेएफआरएम
- 18. क्यों नीचे टेस्ट लूप बेहतर है?
- 19. बेहतर उपयोग कर उपयोग कर रहा है?
- 20. जेएफइल कूसर एक जेपीनल
- 21. जेपीनल ढाल पृष्ठभूमि
- 22. जावा/स्विंग: एक जेपीनल
- 23. siftDown siftUp से बेहतर क्यों है?
- 24. config.assets.precompile विक्रेता/मणि संपत्तियों को जोड़ नहीं रहा
- 25. filter_input() का उपयोग करना बेहतर क्यों है?
- 26. एसवीएन रिपोजिटरी संरचना - यह बेहतर क्यों है?
- 27. EnumChildWindows बच्चों को क्यों छोड़ रहा है?
- 28. फिडलर चल रहा है जबकि डब्ल्यूसीएफ डाटा सेवा बेहतर प्रदर्शन क्यों कर रही है?
- 29. जेपीनल ग्राफिक्स समाशोधन और पुनर्भुगतान?
- 30. प्रोजेक्ट लक्ष्यीकरण का संदर्भ क्यों जोड़ रहा है .NET Framework 4.0 विफल?
आपका स्रोत क्या है? – mre
@mre यह कुछ है जो मैं आमतौर पर अनुशंसा करता हूं (या उसके करीब - मेरा जवाब देखें), लेकिन उस जानकारी पर ओपी के सटीक स्रोत को सुनने में भी दिलचस्पी है। सवाल पूछने वाले व्यक्ति को। यह उस छोटी अतिरिक्त जानकारी के साथ 'अच्छा सवाल' बन जाएगा। –
+1, कुछ जावा प्रश्नों में से एक मुझे जवाब पता है। एक बार [जावा आरपीजी गेम] (https://github.com/intermediate-hacker/Pro_RPG) बनाया, इसे पूरी तरह से आनंद लिया। :) – ApprenticeHacker