您的位置:首页 > 产品设计 > UI/UE

八,游戏世界的渲染

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息