大型企业网站优化,手机网站解析,wordpress 关联文章,建立网站站点的步骤上一讲#xff0c;我们已经实现了点击play进入游戏界面但仅仅是个黑屏 今天#xff0c;我们就试着编写代码让它出现游戏的一些简单场景。还是在上一讲的代码基础上#xff0c;我们创建两个类#xff1a;World 和 WorldRenderer 1.Word类#xff1a; 12345678910111213141… 上一讲我们已经实现了点击play进入游戏界面但仅仅是个黑屏 今天我们就试着编写代码让它出现游戏的一些简单场景。还是在上一讲的代码基础上我们创建两个类World 和 WorldRenderer 1.Word类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package com.zhf.mylibgdx; /** * 统一管理世界中各个部分 * author ZHF * */ public class World { /**世界监听器接口**/ public interface WorldListener { //跳跃 public void jump (); //高跳 public void highJump (); //碰撞 public void hit (); //收集金币 public void coin (); } //宽和高 public static final float WORLD_WIDTH 10; public static final float WORLD_HEIGHT 15 * 20; //状态 public static final int WORLD_STATE_RUNNING 0; //运行 public static final int WORLD_STATE_NEXT_LEVEL 1; //下一关 public static final int WORLD_STATE_GAME_OVER 2; //游戏结束 //世界监听器 public WorldListener listener; public World(WorldListener listener) { this.listener listener; } } 2.WorldRenderer类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 package com.zhf.mylibgdx; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; /** * 用来把每个对象关联相应的图片资源同时控制相机实现动画。 * author ZHF * */ public class WorldRenderer { //宽和高 static final float FRUSTUM_WIDTH 10; static final float FRUSTUM_HEIGHT 15; World world; //世界 OrthographicCamera cam; //相机 SpriteBatch batch; //用于绘画 TextureRegion background; //背景图片 public WorldRenderer(SpriteBatch batch, World world) { this.world world; //OrthographicCamera 被定义成 宽度为10高度为15同样的也把相机对准中心点。 this.cam new OrthographicCamera(FRUSTUM_WIDTH, FRUSTUM_HEIGHT); //它指定了和屏幕一样大小的 OrthographicCamera 并把相机对准屏幕的中心。 this.cam.position.set(FRUSTUM_WIDTH / 2, FRUSTUM_HEIGHT / 2, 0); this.batch batch; } /**渲染**/ public void render () { cam.update(); //它的作用都是通过把映射矩阵绑定给SpritBatch告诉SpritBatch怎么去绘制图形 batch.setProjectionMatrix(cam.combined); //渲染背景 renderBackground(); //渲染游戏中各种元素Bob,跳板松鼠弹簧。。下一讲中会具体讲到 // renderObjects(); } /**渲染背景**/ public void renderBackground () { batch.disableBlending(); batch.begin(); //绘制背景 batch.draw(Assets.backgroundRegion, cam.position.x - FRUSTUM_WIDTH / 2, cam.position.y - FRUSTUM_HEIGHT / 2, FRUSTUM_WIDTH, FRUSTUM_HEIGHT); batch.end(); } } 接下来就是在GameScreen中调用这两个类完成框架的连接搭建。 声明 1 2 3 4 //游戏场景 World world; WorldRenderer renderer; WorldListener worldListener; 实例化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 //实例化场景 worldListener new WorldListener() { Override public void jump () { // Assets.playSound(Assets.jumpSound); } Override public void highJump () { // Assets.playSound(Assets.highJumpSound); } Override public void hit () { // Assets.playSound(Assets.hitSound); } Override public void coin () { // Assets.playSound(Assets.coinSound); } }; world new World(worldListener); renderer new WorldRenderer(batcher, world); 调用在GameScreen的draw()方法中调用 1 2 //绘制游戏主场景 renderer.render(); 运行一下代码,发现我们的黑屏没有了 这里我需要再啰嗦几句相机的掌握是比较抽象的WorldRenderer 中 OrthographicCamera的定义就的得先说说游戏是怎么进行的为什么要把 WorldRender中的OrthographicCamera 定义10 *15实际上就是把屏幕320*480 映射成每个单位为32像素。这是因为游戏中的素材基本都是基于32像素为单位构建同时屏幕的分辨率也可以被分解成以32像素为单位。 游戏中我们的主角Bob会不断进行跳跃但是他的最高点始终不会超过屏幕的中点他停留在最高点的过程中会通过移动所有的物体来造成他看上去好像在往上跳实际上他一直停留在屏幕中点的高度。同时我们需要为每一关定义一个长度也就是需要‘跳’多高才能到达城堡顺利通关。并且要准备好整一关的过程中哪里应该出现什么物体然后根据Bob到达的高度不停的切换这些物体。 想象一下有一段被垂直放置的胶卷这就是我们的一个关卡也就是一个World它准备好了一个关卡的长度并且设置好了所有的物体。而我们的Bob和WorldRender中的OrthographicCamera 一开始被放置在胶卷的底部Bob开始不断的跳跃当超过屏幕中点的高度时则OrthographicCamera 会被往上移动并且所有进入OrthographicCamera 的物体都会被绘制。直到到达最高点或Bob死亡。 所以 WorldRender中的OrthographicCamera 被设置成 10 *15 。 并且而在World类中定义了两个变量 public static final float WORLD_WIDTH 10; public static final float WORLD_HEIGHT 15 * 20; 同样的关卡的宽带也被定义为10个单位与WorldRender中的一致因为我们不需要在X方向进行移动而高度定义成15*20 这就是一关的长度也就是Bob要跳的高度。 从上面的分析可以得出分别设置两个不同 OrthographicCamera 就是因为不同场景的需求。并且 在WorldRender中的OrthographicCamera 其实也可以被设置成 320*480 只是为了简便才把单位设为32像素变成 10*15。 所以不管是哪个OrthographicCamera它提供的只是一个映射信息而这个映射的信息真正的使用者是SpriteBatch它会根据映射信息的不同来决定究竟要把图片绘制在什么位置上以及该不该绘制这些元素。 即使GameScreen和WorldRender使用的是同一个SpriteBatch只要在恰当的时候绑定相应的投影矩阵两者是互不影响的。 后面说了好多全是文字大家先理解着在下一讲中我们将加入各种对象Bob、跳板弹簧、松鼠、金币、城堡以及源码是如何定义他们的。 源码下载http://down.51cto.com/data/895165 本文转自zhf651555765 51CTO博客原文链接http://blog.51cto.com/smallwoniu/1263323如需转载请自行联系原作者