2012-09-17 9 views
26

मुझे बहुत परेशानी हो रही है गुग्लिंग के साथ सरल 2 डी टेक्स्ट कैसे आकर्षित करें।मैं Libgdx/Java का उपयोग करके टेक्स्ट कैसे आकर्षित कर सकता हूं?

SpriteBatch spriteBatch; 
BitmapFont font; 
CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 

कोड नमस्ते विश्व स्ट्रिंग आकर्षित करता है, तथापि, यह मेरे अन्य सभी चित्र खराब करता: यहाँ कोड है कि मैं एक साथ रख दिया अब तक है। वे वहां हैं, केवल क्रूरता से विचलित, और आगे बढ़ते हैं और यह सब कुछ। मैंने बयान के लगभग हर सबसेट के आसपास Gdx.gl11.glPushMatrix() और Gdx.gl11.glPopMatrix() को आजमाया है।

मैं, font.draw() कॉल करने के लिए नीचे विकृत चित्र संकुचित कर लिया है कि अगर बाहर ले जाया गया है, सब कुछ ठीक काम करता है (लेकिन निश्चित रूप से वहाँ तो कोई पाठ है)।

उत्तर

12

जब मैं बिटमैप फ़ॉन्ट यह इस तरह था बनाया:

font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false); 

कुछ फ़ॉन्ट फ़ाइल (जबकि एक फ़ॉन्ट डाउनलोड करने अगर जाँच कृपया .fnt फ़ाइल और .png फ़ाइल उसी के लिए शामिल है) को डाउनलोड करके इस कोशिश

+0

@Asgeir जवाब स्वीकार करने के लिए भूल नहीं है, तो आप पाया यह उपयोगी – alex

+4

यह कोई फर्क नहीं पड़ता है। इसे 'नया बिटमैपफॉन्ट()' के साथ स्थापित करना डिफ़ॉल्ट एम्बेडेड फ़ॉन्ट का उपयोग करेगा। –

+1

और बिटमैपफॉन्ट अकेले प्रस्तुत नहीं करता है। BitmapFont यह कॉन्फ़िगरेशन है कि यह टेक्स्ट को कैसे प्रस्तुत करता है। बैच डाउनलोड फोंट से BitmapFont और एक स्ट्रिंग (पाठ आकर्षित करने के लिए) – Zoe

2

कोशिश कई batch.begin() और batch.end() कॉल करने के लिए:

CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 
spriteBatch.begin(); 
//draw your other sprites here 
spriteBatch.draw(...); 
spriteBatch.end(); 

या सिर्फ SpriteBatch

का एक अलग उदाहरण का उपयोग
+0

यह काम नहीं करता। –

2

एक .fnt फ़ाइल बनाने के लिए, लिबरजीएक्स की वेबसाइट द्वारा प्रदान की गई हिरो का उपयोग करें।

फ़ॉन्ट 150 का आकार सेट करें, यह .fnt फ़ाइल और .png फ़ाइल बनाएगा। अपनी संपत्ति फ़ोल्डर में दोनों फाइलों की प्रतिलिपि बनाएँ।

BitmapFont font; 

फॉन्ट लोड करने के लिए: (में विधि बनाने)

font = new BitmapFont(Gdx.files.internal("data/rayanfont.fnt"), false); 
//rayanfont is the font name 

प्रस्तुत करना करने के लिए:

फॉन्ट की घोषणा करने के लिए

batch.begin(); 
font.setScale(.2f); 
font.draw(batch, "hello", x,y); 
batch.end(); 

यह सुचारू रूप से काम करेंगे।

+0

क्या आपका मतलब 'सेटस्केल' नहीं है? – Cilan

19

मुझे टेक्स्ट ड्राइंग के लिए अलग बैच बनाने का अधिक कारण नहीं दिख रहा है। का उपयोग करते हुए gdxVersion = '1.4.1' (एंड्रॉयड स्टूडियो में Gradle के साथ बनाया गया) है कि कोड पाठ ड्रॉ सफलतापूर्वक:

BitmapFont font = new BitmapFont(); //or use alex answer to use custom font 

public void render(float dt) 
    { 
    batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI 

    batch.begin(); 

    //draw background, objects, etc. 
    for(View view: views) 
    { 
     view.draw(batch, dt); 
    } 

    font.draw(batch, "Hello World!", 10, 10); 

    batch.end(); 
    } 

ध्यान दें, कि यहाँ आप खेल में आकर्षित दुनिया का समन्वय करता है, इसलिए यदि अपने चरित्र चालें (प्लेटफ़ॉर्मर में, के लिए उदाहरण), पाठ से भी आगे बढ़ेगा। आप पाठ को देखने के लिए, कि यह स्क्रीन, लेबल/TextField की तरह कुछ या यह किस प्रकार अलग यूआई चौखटे में कहा जाता है, की तुलना में मैं स्टेज (और पाठ के लिए TextArea) का उपयोग करने की सलाह देते हैं, उपयोग के बारे में उदाहरण के लिए देखें पर तय हो जाएगा चाहते हैं यहाँ स्टेज: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

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

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