LWJGL

2013-10-04 7 views
5

के साथ स्क्रीन पर टेक्स्ट लिखें, मैं अपने खेल के लिए स्क्रीन पर टेक्स्ट लिखना चाहता हूं, जैसे एफपीएस, आइटम और सामान के लिए यादृच्छिक पाठ। मैं उस पाठ को कैसे लिख सकता हूं?LWJGL

क्या यह मूल गेम कक्षा के बिना संभव है? क्या इस g.drawString("Hello World", 100, 100); की तरह कोई आदेश नहीं है?

+0

एलडब्ल्यूजेजीएल ओपनजीएल के आसपास वास्तव में काफी पतला आवरण है - यदि आप इस तरह की चीजों को और अधिक करना चाहते हैं तो मैं जेमोनकी की तरह कुछ सुझाव दूंगा जो एक दृश्यग्राफ एपीआई प्रदान करता है। – berry120

+2

क्या आप कह रहे हैं कि यदि मैं टेक्स्ट लिखना चाहता हूं तो गेम इंजन में बेहतर कदम है? – Israelg99

+0

आप कहते हैं कि आप एक साधारण 'drawString()' प्रकार विधि की तलाश में हैं, जिसका अर्थ है कि आप सादगी चाहते हैं - JMonkey इस संबंध में चीजों को सरल बना देगा (और कई अन्य)। – berry120

उत्तर

4

अद्यतन: यह उत्तर अब पुराना है, और एलडब्ल्यूजेजीएल के नवीनतम संस्करणों के साथ बिल्कुल भी काम नहीं करता है। जब तक मैं इस जवाब पूरी तरह से अद्यतन करते हैं, मैं सुझाव है कि आप यहाँ देखो: http://www.java-gaming.org/topics/lwjgl-stb-bindings/36153/view.html


आप ट्रू टाइप फोंट Slick-util पुस्तकालय में सुविधा का उपयोग कर सकते हैं।

आसान, सिर्फ इस तरह फ़ॉन्ट बनाने है एक आम फ़ॉन्ट का उपयोग करना:

TrueTypeFont font; 
Font awtFont = new Font("Times New Roman", Font.BOLD, 24); //name, style (PLAIN, BOLD, or ITALIC), size 
font = new TrueTypeFont(awtFont, false); //base Font, anti-aliasing true/false 

आप एक .ttf फ़ाइल से फ़ॉन्ट लोड करना चाहते हैं, तो यह एक छोटे से अधिक मुश्किल है:

try { 
    InputStream inputStream = ResourceLoader.getResourceAsStream("myfont.ttf"); 

    Font awtFont = Font.createFont(Font.TRUETYPE_FONT, inputStream); 
    awtFont = awtFont.deriveFont(24f); // set font size 
    font = new TrueTypeFont(awtFont, false); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

सफलतापूर्वक TrueTypeFont बनाने के बाद, आप इसे इस तरह आकर्षित कर सकते हैं:

font.drawString(100, 50, "ABC123", Color.yellow); //x, y, string to draw, color 

अधिक जानकारी के लिए, आप TrueTypeFont और java.awt.Font के लिए प्रलेखन देख सकते हैं, और Slick-Util tutorial मुझे इनमें से अधिकतर कोड प्राप्त हुए हैं।

+0

क्या आप लिंक अपडेट कर सकते हैं? वे पहले से ही समाप्त हो चुके हैं। पहले ही, आपका बहुत धन्यवाद। – IchHabsDrauf

+0

@IchHabsDrauf मुझे बताने के लिए धन्यवाद; जब मैं कर सकता हूं तो मैं इसे प्राप्त करूंगा। –

+0

मैंने आपके दोनों सुझावों की कोशिश की और उनमें से कोई भी मेरे लिए काम नहीं किया। पहला व्यक्ति खिड़की में निर्दिष्ट स्थान पर सिर्फ एक पीले रंग की छपाई मुद्रित कर रहा था। मैंने अपने प्रोजेक्ट पैनल से कंसोलस.एटीएफ को अपने प्रोजेक्ट फ़ोल्डर में एक निर्देशिका में लोड करके दूसरे विकल्प की कोशिश की और इनपुटस्ट्रीम का इस्तेमाल आपके उदाहरण की तरह किया लेकिन यह काम नहीं किया। यह अभी भी सिर्फ एक पीला रेक खींचा। मुझे क्या करना चाहिए? – IchHabsDrauf

1

आवश्यक आकार के BufferedImage बनाने का प्रयास करें। फिर इसके ग्राफिक्स प्राप्त करें और एक स्ट्रिंग खींचें। फिर इसे ByteBuffer पर बदलें और इसे OpenGL में प्रस्तुत करें।

String text = "ABCD"; 
int s = 256; //Take whatever size suits you. 
BufferedImage b = new BufferedImage(s, s, BufferedImage.TYPE_4BYTE_ABGR); 
Graphics2D g = b.createGraphics(); 
g.drawString(text, 0, 0); 

int co = b.getColorModel().getNumComponents(); 

byte[] data = new byte[co * s * s]; 
b.getRaster().getDataElements(0, 0, s, s, data); 

ByteBuffer pixels = BufferUtils.createByteBuffer(data.length); 
pixels.put(data); 
pixels.rewind(); 

अब pixels आवश्यक छवि डेटा आप आकर्षित करने के लिए आवश्यकता होती है। बाइट बफर खींचने के लिए GL11.glTexImage2D() फ़ंक्शन का उपयोग करें।

+0

क्या आप कृपया बता सकते हैं कि हम इस मामले में 'glTexImage2D() 'का उपयोग कैसे कर सकते हैं? – IchHabsDrauf

+0

क्या आप कृपया बता सकते हैं कि हम इस मामले में 'glTexImage2D() 'का उपयोग कैसे कर सकते हैं? – IchHabsDrauf

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