Android游戏引擎libgdx使用教程10:双舞台

游戏屏幕最常见的就是一个变化较少的背景加上一系列和用户交互的角色和部件。为了方便管理你还可以为背景建个Group方便管理。

创新互联成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、App定制开发手机网站制作设计、微信网站制作、软件开发、西云机房等实行标准化操作,让客户可以直观的预知到从创新互联可以获得的服务效果。

但是有时候写的时候没有想到这个问题,或者是背景不是单纯的一个图片什么的,背景和角色还有一些混合逻辑分布在两个Stage里。我重写太麻烦,想想反正都是SpritBatch绘制出来的,用双舞台大不了多个摄像头。马上试试还真行。

先看看Stage的draw方法:

 
 
 
  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)实例化第二个舞台。

代码如下:

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

效果:

如果你对于效率追求比较极致,可以考虑对于SpritBatch的缓冲数进行修改。

还有一个需要注意,背景舞台应该先绘制,其他部件后绘制,不然效果就是下图:

关于舞台的输入控制,不能简单的使用:

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

应该这样做:

 
 
 
  1. InputMultiplexer inputMultiplexer=new InputMultiplexer();    
  2. inputMultiplexer.addProcessor(stage1);    
  3. inputMultiplexer.addProcessor(stage2);   

分享标题:Android游戏引擎libgdx使用教程10:双舞台
URL链接:http://www.shufengxianlan.com/qtweb/news15/38665.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联