Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲引擎libgdx使用教程10:雙舞台

Android游戲引擎libgdx使用教程10:雙舞台

日期:2016/3/16 11:01:09      編輯:Android游戲開發

       游戲屏幕最常見的就是一個變化較少的背景加上一系列和用戶交互的角色和部件。為了方便管理你還可以為背景建個Group方便管理。

       但是有時候寫的時候沒有想到這個問題,或者是背景不是單純的一個圖片什麼的,背景和角色還有一些混合邏輯分布在兩個Stage裡。我重寫太麻煩,想想反正都是SpritBatch繪制出來的,用雙舞台大不了多個攝像頭。馬上試試還真行。

       先看看Stage的draw方法:

Java代碼
  1. /** Renders the stage */   
  2. public void draw () {   
  3. camera.update();   
  4. if (!root.visible) return;   
  5. batch.setProjectionMatrix(camera.combined);   
  6. batch.begin();   
  7. root.draw(batch, 1);   
  8. batch.end();   
  9. }  

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

       代碼如下:

Java代碼
  1. package com.cnblogs.htynkn.game;  
  2.   
  3. import com.badlogic.gdx.ApplicationListener;   
  4. import com.badlogic.gdx.Gdx;   
  5. import com.badlogic.gdx.InputProcessor;   
  6. import com.badlogic.gdx.graphics.GL10;   
  7. import com.badlogic.gdx.graphics.Texture;   
  8. import com.badlogic.gdx.graphics.g2d.TextureRegion;   
  9. import com.badlogic.gdx.scenes.scene2d.Stage;   
  10. import com.badlogic.gdx.scenes.scene2d.ui.Image;  
  11.   
  12. public class JavaGame implements ApplicationListener {  
  13.   
  14. Stage stage1;   
  15. Stage stage2;   
  16. float width;   
  17. float height;  
  18.   
  19. @Override   
  20. public void create() {   
  21. width = Gdx.graphics.getWidth();   
  22. height = Gdx.graphics.getHeight();   
  23. stage1 = new Stage(width, height, true);   
  24. stage2 = new Stage(width, height, true,stage1.getSpriteBatch());   
  25. Image image = new Image(new TextureRegion(new Texture(Gdx.files   
  26. .internal("img/sky.jpg")), 50, 50, 480, 320));   
  27. stage1.addActor(image);   
  28. Image image2 = new Image(new TextureRegion(new Texture(Gdx.files   
  29. .internal("img/baihu.png")), 217, 157));   
  30. image2.x=(width-image2.width)/2;   
  31. image2.y=(height-image2.height)/2;   
  32. stage2.addActor(image2);   
  33. }  
  34.   
  35. @Override   
  36. public void dispose() {   
  37. // TODO Auto-generated method stub  
  38.   
  39. }  
  40.   
  41. @Override   
  42. public void pause() {   
  43. // TODO Auto-generated method stub  
  44.   
  45. }  
  46.   
  47. @Override   
  48. public void render() {   
  49. Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);   
  50. stage1.act(Gdx.graphics.getDeltaTime());   
  51. stage2.act(Gdx.graphics.getDeltaTime());   
  52. stage1.draw();   
  53. stage2.draw();   
  54. }  
  55.   
  56. @Override   
  57. public void resize(int width, int height) {   
  58. // TODO Auto-generated method stub  
  59.   
  60. }  
  61.   
  62. @Override   
  63. public void resume() {   
  64. // TODO Auto-generated method stub  
  65.   
  66. }   
  67. }  

       效果:

Android游戲引擎libgdx使用教程10:雙舞台

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

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

Android游戲引擎libgdx使用教程10:雙舞台

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

Java代碼
  1. Gdx.input.setInputProcessor(stage1);   
  2. Gdx.input.setInputProcessor(stage2);  

       應該這樣做:

Java代碼
  1. InputMultiplexer inputMultiplexer=new InputMultiplexer();   
  2. inputMultiplexer.addProcessor(stage1);   
  3. inputMultiplexer.addProcessor(stage2);  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved