Libgdx এ পর্দার রেজোলিউশনের সাথে ফন্টের আকার মেলাতে সমস্যা


10

আমার গেমটিতে বিভিন্ন স্ক্রিনে একই আকারে পাঠ্য দেখাতে আমার সমস্যা হচ্ছে এবং আমি একটি সাধারণ পরীক্ষা করেছি।

এই পরীক্ষায় স্ক্রিনে কোনও পাঠ্য ফিটিং প্রদর্শিত হয়, আমি চাই যে স্ক্রিন থেকে এবং ডিপিআই থেকে পাঠ্য স্বাধীনভাবে একই আকারের হোক।

আমি এই এবং এই উত্তরটি পেয়েছি যা আমার মনে হয় আমার সমস্যার সমাধান করা উচিত তবে তা করা উচিত নয়। ডেস্কটপে আকার ঠিক আছে তবে আমার ফোনে অনেক বড়।

এটি আমার নেক্সাস 4 এ ফলাফল: (768x1280, 2.0 ঘনত্ব)

নেক্সাস 4 গণনা ঘনত্ব

এবং এটি আমার ম্যাকবুকের ফলাফল: (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();
    }
}

আমি এটি ঠিক করার একটি পরিষ্কার উপায় সন্ধান করার চেষ্টা করছি। আমি কি ভুল করছি? ক্যামেরা কি? ভিউপোর্ট?

হালনাগাদ:

আমি যা চাই তা হ'ল স্ক্রিনের আকার বা রেজোলিউশনের স্বতন্ত্রভাবে একই মার্জিনটি অনুপাতের মধ্যে রাখা। এই চিত্রটি আমার অর্থ কি তা বোঝায়।

এখানে চিত্র বর্ণনা লিখুন


আপনি কি শারীরিক আকারটি একই অবস্থায় থাকতে চান (কম্পিউটারে 2 সেন্টিমিটার পাঠ্য = মোবাইলে 2 সেন্টিমিটার টেকটিট) বা পাঠ্যটি ডিসপ্লেতে ফিট করে?
ইজিন

আপনি এখানে কী জিজ্ঞাসা করছেন তা আমি পুরোপুরি নিশ্চিত নই। আপনার পোস্ট করা লিঙ্কগুলি এই প্রশ্নের উত্তর বলে মনে হচ্ছে। আপনাকে ডিসপ্লে আকার এবং ডিপিআই সম্পর্কে সচেতন হতে হবে। আপনার প্রশ্নটি বিস্তারিতভাবে বর্ণনা করুন, যাতে এটির সঠিক উত্তর দেওয়া যায়।
কাতু

আমি ইহা চেস্টা করব. আমি যা চাই তা হ'ল পাঠ্যের একই অনুপাতটি বিভিন্ন পর্দার আকার বা রেজোলিউশনের মধ্যে রাখা। আমি বলতে চাইছি কোনও সিনেমার পর্দায় স্পষ্টতই বড় আকারের সেমি থাকবে তবে অনুপাতে একই মার্জিন থাকবে। সুতরাং, @ ইজিন যা বলেছেন ঠিক তা নয়। আমি একটি চিত্র সহ পোস্টটি আপডেট করেছি যা আমার অর্থ বোঝায়।
আইয়াকী বেদোয়া

উত্তর:


15

আপনি একই পাঠ্যসূচী / স্ক্রীন আকার অনুপাত রাখতে চান বলে মনে হচ্ছে। মূলত আপনি যা করেন তা হ'ল একটি রেজোলিউশনে বিকাশ করা এবং এটি স্কেল 1.0 হতে দিন। তারপরে আপনি নতুন স্ক্রিনের প্রস্থটিকে পুরানো প্রস্থ দ্বারা ভাগ করবেন এবং এটিই আপনার স্কেল ফ্যাক্টর।

উদাহরণ স্বরূপ. ফন্ট সাইজ 16 সহ 2560x1440 এ বিকাশ করছে এবং 1920x1080 চলছে।

হরফ আকার হবে: 1920 * 16/2560 = 12

আমি আমার ইন্টারফেস লাইব্রেরিতে একই কাজ করি এবং এটি পুরোপুরি কার্যকর হয়।


ধন্যবাদ @ ইজিন, আমার যা প্রয়োজন ছিল তা পুরোপুরি কার্যকর হয়। তারপরে আমি যুক্ত উত্তরগুলি একই প্রকৃত আকারটি দেখানোর জন্য?
আইয়াকি বেদোয়া

এটি ডিভাইসটি দিয়ে স্কেলিং সম্পর্কেও রয়েছে। কিন্তু এখানে ফন্টটি উপলব্ধ রেজোলিউশনের জন্য আরও বড় হয় এবং সেখানে ফন্টটি ডিপিআই-র উপর নির্ভরশীল। একটি 28 "2560x1440 মনিটরে 5" 1920x1080 ফোনের চেয়ে আলাদা ডিপিআই রয়েছে। আপনি যে পদ্ধতিটি চান তা সর্বদা একটি নির্দিষ্ট অংশ পূরণ করবে এবং একটি ডিপিআই সচেতন পদ্ধতি হ'ল ফন্টের আকার পরিবর্তন করবে যাতে তারা পাঠযোগ্য হয় এবং মনে রাখবেন যে আরও কাজের জায়গা থাকতে পারে।
ইজিন

ধন্যবাদ! এটা কাজ করেছে!!
প্যারাম্পালপি

2
@ কেভিনক্ষ্মিথ এটি কারণ আপনি পূর্ণসংখ্যা বিভাগ করছেন, কারণ 'অ্যান্ড্রয়েডের কিছু সংস্করণ' সঠিকভাবে গণনা করছে না।
মাইকেলহাউস

1
@ আশরাফসায়িদ-আহমদ যখন আপনার পাঠ্যটি স্ক্রিনের প্রস্থ পিক্সেলের একটি নির্দিষ্ট শতাংশ হতে হবে তখন ডিপিআই কোনও বিষয় নয়।
ইজিন

2

ডন, টি কোনও কাজ না করে কেবল হরফের স্কেল সেট করে এবং এটি সমস্ত ধরণের ডিভাইসের জন্য কাজ করবে

 font.setScale( .9f,.9f);

এই সমাধানটি দেওয়ার জন্য সর্বোত্তম অবস্থানের প্রসঙ্গটি দেওয়ার জন্য আপনি কি এই উত্তরটিতে তার কোডটিতে যুক্ত করতে পারেন, এটি ভবিষ্যতের ব্যবহারকারীদের আপনার উত্তরটি দ্রুত বুঝতে সহায়তা করে।
টম 'ব্লু' পিডক

এই কোডটি ব্যবহার করুন যেখানে আপনি তার কোডের মতো আপনার বিটম্যাপ ফন্টটি তৈরি করেন যেখানে তিনি বিটম্যাপ ফন্টটি তৈরি করেছিলেন ফন্ট = ক্রিয়েটফন্ট (জেনারেটর, 64) লিখে; সুতরাং কেবল font.setScale (.9f, .9f) লাইনটি লিখুন; এর নীচে
সুধির সিংহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.