2012-11-09 10 views
7

यह मेरे लिबडक्स गेम में मेरे स्तर पर मेरी वर्तमान प्रस्तुत विधि है। मैं अपने स्तर के शीर्ष दाएं कोने पर बिटमैपफॉन्ट खींचने की कोशिश कर रहा हूं लेकिन मुझे जो कुछ मिल रहा है वह सफेद बक्से का एक गुच्छा है।libgdx में किसी चरण पर बिटमैपफॉन्ट कैसे आकर्षित करें?

@Override 
    public void render(
      float delta) { 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

     this.getBatch().begin(); 

      //myScore.getCurrent() returns a String with the current Score 
     font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500); 
     stage.act(Gdx.graphics.getDeltaTime()); 
     stage.draw(); 
     this.getBatch().end(); 
     } 

मैं एक अभिनेता के कुछ प्रकार में स्कोर फ़ॉन्ट जोड़ने और फिर चाहते हैं एक scene.addActor (myScore) है, लेकिन मुझे लगता है कि कैसे करना है पता नहीं है। मैंने मुख्य गेम क्लास बनाने के लिए स्टीगर्ट के ट्यूटोरियल का पालन किया जो उस स्तर से विस्तारित सारणी स्तर में दृश्य, फ़ॉन्ट को तत्काल करता है।

अभी तक, मैं किसी भी कस्टम फ़ॉन्ट का उपयोग नहीं कर रहा हूं, बस खाली नया बिटमैपफॉन्ट(); डिफ़ॉल्ट एरियल फ़ॉन्ट का उपयोग करने के लिए। बाद में मैं अपने स्वयं के फैंसी फ़ॉन्ट का उपयोग करना चाहता हूं।

उत्तर

12

drive.draw के बाद font.draw को स्थानांतरित करने का प्रयास करें। एक अभिनेता के लिए यह जोड़ना बहुत आसान हो सकता है, बस एक नया वर्ग बना सकते हैं और अभिनेता का विस्तार की तरह इस तरह के

import com.badlogic.gdx.graphics.g2d.BitmapFont; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.scenes.scene2d.Actor; 

public class Text extends Actor { 

    BitmapFont font; 
    Score myScore;  //I assumed you have some object 
         //that you use to access score. 
         //Remember to pass this in! 
    public Text(Score myScore){ 
     font = new BitmapFont(); 
      font.setColor(0.5f,0.4f,0,1); //Brown is an underated Colour 
    } 


    @Override 
    public void draw(SpriteBatch batch, float parentAlpha) { 
     font.draw(batch, "Score: 0" + myScore.getCurrent(), 0, 0); 
     //Also remember that an actor uses local coordinates for drawing within 
     //itself! 
    } 

    @Override 
    public Actor hit(float x, float y) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

आशा इस मदद करता है!

संपादित करें 1: इसके अलावा बस सुनिश्चित करें कि कि मुद्दा नहीं है बनाने के लिए System.out.println(myScore.getCurrentScore()); प्रयास करें। तुम बस यह एक नाव या किसी पूर्णांक वापस जाने के लिए प्राप्त कर सकते हैं और जब आप "Score:"+ थोड़ा प्रयास करना चाहिए यह एक स्ट्रिंग ही

+1

धन्यवाद! यह चाल चल सकता है, लेकिन मुझे एक ** ** ** नामक एक बहुत ही बढ़िया उपयोगिता मिली जो कि मुझे वही ज़रूरत है जो मुझे चाहिए। मैंने लेबल को अब मेरे स्कोर के रूप में बढ़ाया और इसे नियमित अभिनेता के रूप में मंच में जोड़ा। एक जादू की तरह काम करता है। –

3

ठीक है, इस मामले में, आप this.getBatch().end पहले कॉल करने के लिए आवश्यकता हो सकती है में बदल जाएगा। इस तरह:

mSpriteBatch.begin(); 
mStage.draw(); 
mSpriteBatch.end(); 
//Here to draw a BitmapFont 
mSpriteBatch.begin(); 
mBitmapFont.draw(mSpriteBatch,"FPS",10,30); 
mSpriteBatch.end(); 

मुझे नहीं पता क्यों, लेकिन यह मेरे लिए काम करता है।

-2

यदि आप स्कीन 2 डी का उपयोग मंच और अभिनेताओं का उपयोग करने का प्रयास कर रहे हैं। लंबे कोड लिखने की कोई आवश्यकता नहीं है, एमटीएक्स प्लगइन की जांच करें जो उपयोग में बहुत आसान है। आप एक भयानक उपयोगकर्ता अनुभव

http://moribitotechx.blogspot.co.uk/

1

मैं ड्राइंग चरण शुरू करने से पहले बैच बंद करके सफेद बक्से के साथ इसी तरह की समस्या का समाधान कर लिया बना सकते हैं। ऐसा इसलिए है क्योंकि stage.draw() एक और बैच शुरू करता है और पिछले बैच को अंत() के साथ समाप्त नहीं करता है। ।

तो वर्तमान उदाहरण में मैं मंच निकालने से पहले this.getBatch() अंत() कदम होगा:

... 
    font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500); 
    this.getBatch().end(); 
    stage.act(Gdx.graphics.getDeltaTime()); 
    stage.draw(); 
    } 
संबंधित मुद्दे