android游戏开发框架libgdx的使用(十)—双舞台

转自:http://www.apkbus.com/forum.php?mod=viewthread&tid=19768&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline

 

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

但是有时候写的时候没有想到这个问题,或者是背景不是单纯的一个图片什么的,背景和角色还有一些混合逻辑分布在两个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. }
复制代码
效果: 201201091349589666.jpg
2012-1-17 21:40 上传
下载附件(41.94 KB)

如果你对于效率追求比较极致,可以考虑对于SpritBatch的缓冲数进行修改。还有一个需要注意,背景舞台应该先绘制,其他部件后绘制,不然效果就是下图: 201201091350032235.jpg
2012-1-17 21:40 上传
下载附件(29.58 KB)



关于舞台的输入控制,不能简单的使用:
  1. Gdx.input.setInputProcessor(stage1);
  2. Gdx.input.setInputProcessor(stage2);
复制代码
应该这样做:
  1. InputMultiplexer inputMultiplexer=new InputMultiplexer();
  2. inputMultiplexer.addProcessor(stage1);
  3. inputMultiplexer.addProcessor(stage2);
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值