मुझे अलग-अलग स्क्रीन पर एक ही आकार में अपने खेल पर पाठ दिखाने में समस्या हो रही है, और मैंने एक सरल परीक्षण किया।
इस परीक्षण में स्क्रीन पर एक पाठ फिटिंग दिखाना शामिल है, मैं चाहता हूं कि पाठ का स्क्रीन से और DPI से एक ही आकार स्वतंत्र हो।
मुझे यह और यह उत्तर मिला है कि मुझे लगता है कि मुझे अपनी समस्या का समाधान करना चाहिए लेकिन नहीं। डेस्कटॉप में आकार ठीक है, लेकिन मेरे फोन में बहुत बड़ा है।
यह मेरे Nexus 4 पर परिणाम है: (768x1280, 2.0 घनत्व)
और यह मेरी मैकबुक पर परिणाम है: (480x800, 0.6875 घनत्व)
मैं ओपन सैंस कंडेंस्ड (गूगल फोंट के लिए लिंक का उपयोग कर रहा हूं )
जैसा कि आप देख सकते हैं डेस्कटॉप अच्छा लग रहा है, लेकिन फोन पर इतना बड़ा है।
यहाँ मेरे परीक्षण का कोड:
public class TextTest extends ApplicationAdapter
{
private static final String TAG = TextTest.class.getName();
private static final String TEXT = "Tap the screen to start";
private OrthographicCamera camera;
private Viewport viewport;
private SpriteBatch batch;
private BitmapFont font;
@Override
public void create ()
{
Gdx.app.log(TAG, "Screen size: "+Gdx.graphics.getWidth()+"x"+Gdx.graphics.getHeight());
Gdx.app.log(TAG, "Density: "+Gdx.graphics.getDensity());
camera = new OrthographicCamera();
viewport = new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getWidth(), camera);
batch = new SpriteBatch();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/OpenSans-CondLight.ttf"));
font = createFont(generator, 64);
generator.dispose();
}
private BitmapFont createFont(FreeTypeFontGenerator generator, float dp)
{
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
int fontSize = (int)(dp * Gdx.graphics.getDensity());
parameter.size = fontSize;
Gdx.app.log(TAG, "Font size: "+fontSize+"px");
return generator.generateFont(parameter);
}
@Override
public void render ()
{
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
int w = -(int)(font.getBounds(TEXT).width / 2);
batch.setProjectionMatrix(camera.combined);
batch.begin();
font.setColor(Color.BLACK);
font.draw(batch, TEXT, w, 0);
batch.end();
}
@Override
public void resize(int width, int height)
{
viewport.update(width, height);
}
@Override
public void dispose()
{
font.dispose();
batch.dispose();
}
}
मैं इसे ठीक करने का एक साफ तरीका खोजने की कोशिश कर रहा हूं। मैं क्या गलत कर रहा हूँ? कैमरा है व्यूपोर्ट?
अपडेट करें:
मैं जो चाहता हूं, उसी मार्जिन को अनुपात में रखना है, स्वतंत्र रूप से स्क्रीन आकार या रिज़ॉल्यूशन के लिए। यह छवि बताती है कि मेरा क्या मतलब है।