android遊戲開發架構libgdx的使用(十)—雙舞台

來源:互聯網
上載者:User

遊戲螢幕最常見的就是一個變化較少的背景加上一系列和使用者互動的角色和組件。為了方便管理你還可以為背景建個Group方便管理。

但是有時候寫的時候沒有想到這個問題,或者是背景不是單純的一個圖片什麼的,背景和角色還有一些混合邏輯分布在兩個Stage裡。

我重寫太麻煩,想想反正都是SpritBatch繪製出來的,用雙舞台大不了多個網路攝影機。馬上試試還真行。

先看看Stage的draw方法:

/** Renders the stage */ 
public void draw () {
camera.update();
if (!root.visible) return;
batch.setProjectionMatrix(camera.combined);
batch.begin();
root.draw(batch, 1);
batch.end();
}

 

batch的話兩個舞台可以共用。用Stage(width, height, stretch, batch)執行個體化第二個舞台。

代碼如下:

package com.cnblogs.htynkn.game;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Image;

public class JavaGame implements ApplicationListener {

Stage stage1;
Stage stage2;
float width;
float height;

@Override
public void create() {
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
stage1 = new Stage(width, height, true);
stage2 = new Stage(width, height, true,stage1.getSpriteBatch());
Image image = new Image(new TextureRegion(new Texture(Gdx.files
.internal("img/sky.jpg")), 50, 50, 480, 320));
stage1.addActor(image);
Image image2 = new Image(new TextureRegion(new Texture(Gdx.files
.internal("img/baihu.png")), 217, 157));
image2.x=(width-image2.width)/2;
image2.y=(height-image2.height)/2;
stage2.addActor(image2);
}

@Override
public void dispose() {
// TODO Auto-generated method stub

}

@Override
public void pause() {
// TODO Auto-generated method stub

}

@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
stage1.act(Gdx.graphics.getDeltaTime());
stage2.act(Gdx.graphics.getDeltaTime());
stage1.draw();
stage2.draw();
}

@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub

}

@Override
public void resume() {
// TODO Auto-generated method stub

}
}

效果:

如果你對於效率追求比較極致,可以考慮對於SpritBatch的緩衝數進行修改。

還有一個需要注意,背景舞台應該先繪製,其他組件後繪製,不然效果就是:

關於舞台的輸入控制,不能簡單的使用:

Gdx.input.setInputProcessor(stage1); 
Gdx.input.setInputProcessor(stage2);

應該這樣做:

InputMultiplexer inputMultiplexer=new InputMultiplexer(); 
inputMultiplexer.addProcessor(stage1);
inputMultiplexer.addProcessor(stage2);
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.