Libgdx采用1.6.1版本
我们本次要实现的是一个飞机小行星的desktop游戏,游戏的输入采用键盘输入形式,因此后续如果移植到手机客户端请自行实现相关输入监听的方法。本次仅仅介绍一下libgdx框架内创建一个游戏的整个逻辑及实现过程。希望通过这个系列的笔记可以让你有一个初步的libgdx游戏概念及操作流程。
下面简单介绍一下游戏的整个控制流程。游戏中共计分为4个游戏状态页面,分别为:菜单状态、游戏状态、游戏结束状态、最高分状态。进入游戏后展示菜单状态然后选择进入游戏或者查看最高分系统,或者选择退出游戏。进入游戏后开始展示游戏状态,游戏结束后展示结束状态,这期间可以将最高分数储存至最高分系统,点击屏幕重新进入菜单选择状态。整个界面控制流程如图一。
那么整个控制流程已经了解了,接下来让我们创建这个游戏项目,打开gdx-setup,添加游戏项目名称、游戏包名称、入口类名(MyGdxGame)、路径、SDK路径等信息,勾选你的目标平台(desktop项目为调试平台也是我的目标平台),勾选扩展库中的freetype库(因为以后我们要使用自己导入的ttf字体)。点击Generate等待项目创建完毕。
项目创建完成之后启动eclipse,选择导入—gradle标签导入—选择browes(指向刚刚创建项目的路径)—选择build model将项目构建到eclipse里面。
项目导入完毕后,我们首先配置一下桌面项目的入口类即desktoplauncher.java将其打开。我们添加三个参数:
config.height=400;
config.width=500;//设定窗口的大小为高:400--宽:500
config.resizable=false; //设定窗口大小固定不可拉伸
运行一下项目看到如图二所示项目窗口,其宽为500像素,高为400像素。
接下来,我们需配置出一个获取屏幕宽高的一组参数、一个相机同时使相机投影与屏幕重合。
我们打开创建的core项目的入口MyGdxGame类,添加两个静态参数WIDTH和HEIGHT,同时在create()方法内实例化他们如下:
HEIGHT=Gdx.graphics.getHeight();
WIDTH=Gdx.graphics.getWidth();
此时HEIGHT与WIDTH的值就是我们游戏窗口设置的值(宽500,高400)。这组参数为公用静态,因此可以为以后开发中提供界面大小的参考值。
配置完这两个变量之后我们要配置一个正交相机(OrthographicCamera)同时也在create()方法内实例化他同时传入两个参数设定他的投影范围如下:
cam=new OrthographicCamera(WIDTH,HEIGHT);
此时我们需要注意一个问题,游戏的窗口坐标位置为(0,0)如图三所示:
而相机投影坐标位置为(-250,-200)如图四所示:
我们通过在create()方法内进行如下设置可以使相机的投影范围与游戏屏幕的投影坐标相重合,代码如下:
cam.translate(WIDTH/2, HEIGHT/2);
cam.update(); //相机发生变化时一定要进行更新,否则不会出现效果
OK第一节我们就介绍到这里。谢谢大家的支持!以下是本节代码:
Desktop项目desktoplauncher类:
importcom.badlogic.gdx.backends.lwjgl.LwjglApplication;
importcom.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.mygdx.demo.MyGdxGame;
public class DesktopLauncher {
publicstatic void main (String[] arg) {
LwjglApplicationConfigurationconfig = new LwjglApplicationConfiguration();
config.height=400;
config.width=500;//设定窗口的大小为高:400--宽:500
config.resizable=false; //设定窗口大小固定不可拉伸。
newLwjglApplication(new MyGdxGame(), config);
}
}
Core项目MyGdxGame类:
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
importcom.badlogic.gdx.scenes.scene2d.Actor;
public class MyGdxGame extendsApplicationAdapter {
publicstatic int HEIGHT,WIDTH;
publicstatic OrthographicCamera cam;
@Override
publicvoid create () {
HEIGHT=Gdx.graphics.getHeight();
WIDTH=Gdx.graphics.getWidth();
cam=newOrthographicCamera(WIDTH,HEIGHT);
cam.translate(WIDTH/2,HEIGHT/2);
cam.update(); //相机发生变化时一定要进行更新,否则不会出现效果
}
@Override
publicvoid render () {
Gdx.gl.glClearColor(0.5f,0.5f, 0.5f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
}