八,游戏世界的渲染
2015-11-04 00:17
691 查看
游戏界面的UI和游戏世界的精灵并不是一起渲染的,可以简单理解为UI是一个相机,而这个相机给游戏世界不停的拍照并显示在界面上,而相机显示器上的一些按钮就组成了UI。游戏在这里就完成了一个整体的把握了,接下来的文章会主要介绍这其中用到的技术。
package com.hj.lee.game; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.StretchViewport; import com.badlogic.gdx.utils.viewport.Viewport; import com.hj.lee.game.assets.Constants; import com.hj.lee.game.bodyobjects.Bullet; import com.hj.lee.game.bodyobjects.DynamicPlatform; import com.hj.lee.game.bodyobjects.Enemy; import com.hj.lee.game.bodyobjects.WorldObstacle; /** * @author lee *遊戲世界的渲染類 */ public class WorldRenderer implements Disposable { public static final String TAG = WorldRenderer.class.getName(); // viewport static final float VIEWPORT_WORLD_WIDTH = Constants.CAMERA_WIDTH; static final float VIEWPORT_WORLD_HEIGHT = Constants.CAMERA_HEIGHT; // member SpriteBatch batch; WorldController world; public OrthographicCamera camera; public Viewport viewport; // box2d debug renderer Box2DDebugRenderer debugRenderer; // shape renderer ShapeRenderer shapeRenderer; public WorldRenderer(WorldController world) { this.world = world; batch = new SpriteBatch(); camera = new OrthographicCamera(); viewport = new StretchViewport(VIEWPORT_WORLD_WIDTH, VIEWPORT_WORLD_HEIGHT, camera); viewport.setScreenSize(Constants.SCREEN_PIXEL_WIDTH, Constants.SCREEN_PIXEL_HEIGHT); viewport.apply(); camera.position.set(viewport.getWorldWidth() / 2, viewport.getWorldHeight() / 2, 0); // camera.position.set(0, 0, 0); camera.update(); // debug renderer debugRenderer = new Box2DDebugRenderer(); debugRenderer.setDrawAABBs(true); shapeRenderer = new ShapeRenderer(); } public void render() { world.polygonRegionBuilder.render(camera); renderWorldObstacleEdge(); if (Constants.isGameMapRender) { world.gameMap.render(camera); } batch.begin(); batch.setProjectionMatrix(camera.combined); batch.enableBlending(); for (DynamicPlatform dp : world.dynamicPlatforms) { dp.render(batch); } for (Bullet b : world.bullets) { b.render(batch); } for (Enemy e : world.enemies) { e.render(batch); } world.mario.render(batch); batch.end(); if (world.isDebug) { world.raycast.render(camera, shapeRenderer); } // debugRenderer.render(world.world, camera.combined); } //渲染剛體邊緣線 public void renderWorldObstacleEdge() { for (WorldObstacle wo : world.worldObstacles) { wo.renderEdge(camera, shapeRenderer); } } @Override public void dispose() { // TODO Auto-generated method stub batch.dispose(); shapeRenderer.dispose(); debugRenderer.dispose(); } }
相关文章推荐
- GUI - Web前端开发框架
- 评价ui设计作品好坏的八个标准(界面/交互设计研究)
- 我是运营,我没有假期
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- 为Yahoo! UI Extensions Grid增加内置的可编辑器
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏
- C++实现基于控制台界面的吃豆子游戏
- Cocos2d-x UI开发之文本类使用实例
- winform异型不规则界面设计的实现方法
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
- 纯javascript实现的小游戏《Flappy Pig》实例
- UI Events 用户界面事件