我開始在LibGDX中編寫遊戲,僅僅是開始。我已經加載了一個基本的瓷磚地圖,一個玩家精靈,並且可以移動角色並且屏幕(相機)滾動 - 完美。LibGDX Android遊戲 - 在滾動屏幕上顯示固定文本(即分數)
我在屏幕右下角有一個左右兩個覆蓋的紋理,左右箭頭用作控制角色的遊戲手柄。我將這些與玩家位置相關聯,這些位置始終固定在屏幕中央。目前很酷....如下:
/////////////////////////////////////////////////////////////////
private void renderJoypad(float deltaTime)
{
batch.draw(Assets.leftJoypad, blockman.position.x-14, 1, 3, 3);
batch.draw(Assets.rightJoypad, blockman.position.x-9, 1, 3, 3);
}
我現在試圖把玩家的分數放在屏幕的左上角。得分由Bitmap字體組成,如下所示。
font = new BitmapFont(Gdx.files.internal("fonts/minecrafter.fnt"),Gdx.files.internal("fonts/minecrafter.png"),false);
font.setScale(0.02f);
在我的render()方法我CAM調用一些其他的方法來更新,像 leftJoypad等的位置,如renderJoypad()。我也打電話給我的繪製字體方法來更新分數的位置,但是,當我滾動它時,它全是生澀的,有時它顯示的字符少於應該有的字符。
public void drawScore(float deltaTime)
{
font.draw(batch, "00000", blockman.position.x, 10);
}
我相信,我需要把比分(以及任何其他屏幕上的文字,HUD等)到一個階段,但我不知道如何得到它與我現有的代碼工作。
我的表演方法如下:
public void show()
{
//load assets class to get images etc
Assets Assets = new Assets();
//start logging Framerate
Gdx.app.log(GameScreen.LOG, "Creating game");
fpsLogger = new FPSLogger();
//set the stage - bazinga
Gdx.input.setInputProcessor(stage);
//stage.setCamera(camera);
//stage.setViewport(480, 360, false);
batch = new SpriteBatch();
//load the Joypad buttons
loadJoypad();
//background image
loadBackground();
//sounds
jumpSound = Gdx.audio.newSound(Gdx.files.internal("sounds/slime_jump.mp3"));
//LOAD block man here
// load the map, set the unit scale to 1/16 (1 unit == 16 pixels)
loadMap();
//draw the score
font = new BitmapFont(Gdx.files.internal("fonts/minecrafter.fnt"),Gdx.files.internal("fonts/minecrafter.png"),false);
font.setScale(0.02f);
// create an orthographic camera, shows us 30x20 units of the world
camera = new OrthographicCamera();
camera.setToOrtho(false, 30, 20);
camera.update();
// create the Blockman we want to move around the world
blockman = new Blockman();
blockman.position.set(25, 8);
}
和我的渲染()方法如下:
public void render(float delta)
{
// get the delta time
float deltaTime = Gdx.graphics.getDeltaTime();
stage.act(deltaTime);
stage.draw();
// clear the screen
Gdx.gl.glClearColor(0.3f, 0.3f, 0.3f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
renderBackground(deltaTime);
batch = renderer.getSpriteBatch();
//updateBlockman(deltaTime);
blockman.update(deltaTime);
// let the camera follow the blockMan, x-axis only
camera.position.x = blockman.position.x;
camera.update();
// set the tile map rendere view based on what the
// camera sees and render the map
renderer.setView(camera);
renderer.render();
//start the main sprite batch
batch.begin();
// render the blockMan
renderBlockman(deltaTime);
renderJoypad(deltaTime);
drawScore(deltaTime);
batch.end();
fpsLogger.log();
}
我試圖改變的事情,用相對於Spritebatch等工作方式並且似乎無法按照我的要求工作。
任何人都可以建議我怎樣才能獲得舞臺和演員的工作,或第二個相機或東西,以幫助我在角落實現固定的比分顯示。
我是否需要使用場景2D或其他內容 - aahhh!我的頭正在爆炸....
我期待着,並提前謝謝你。
問候
詹姆斯
哇,謝謝你。我將它設置爲font.setUseIntegerPositions(false);正如你所建議的那樣,它完美運作。我無法相信。你是否知道它在設置爲真時的實際情況,導致它出錯 - 只是爲了進一步理解。我非常感謝,非常感謝。 James –
當它設置爲true時,它強制字體被繪製爲整數座標。如果你正在繪製像素,這很好,但是如果你的視口縮放到30x20那麼結果可能會有點奇怪。 –
發揮得很好。我一天都沒有看到任何東西。 setuseIntegerPositions至少起作用:我的世界比例爲0-3,這使得字體非常難看...... – RichieHH