在此博客文章中,我们将涵盖两个主要主题。 在Eclipse中设置libGDX项目,并在libGDX中创建示例。 该博客文章将假定您已经安装了Eclipse并安装了Java Development Kit 7或更高版本。
设置一个libGDX项目
要在Eclipse中创建一个libGDX项目,您首先需要做一些事情。 对于Eclipse,您需要下载并安装Android SDK和Eclipse插件的Android开发工具。 虽然如果您不打算部署到android,这些是可选的。 您需要的最后一件事是可以从libGDX网站下载的libGDX设置应用程序。 设置应用程序是一个jar文件,可让您选择和自定义项目。

当您打开设置应用程序时,您将看到文本框,用于输入游戏名称,程序包层次结构和主类。 然后,您将需要选择项目文件夹的创建位置。 如果您想让游戏与Android兼容,则需要输入先前下载的Android SDK的路径。 接下来,您可以选择要在其上部署该游戏的平台。 请记住,IOS选项需要使用Apple开发人员帐户和Mac才能正常使用。 您也可以通过选中所需的框来选择要将哪些扩展添加到libGDX项目中。 您也可以通过单击“显示第三方扩展”按钮来选择第三方扩展。 然后选择“高级”并检查Eclipse项目。 最后按“生成”。
空项目概述

打开Eclipse并将生成的项目导入到您的工作区中。 使用选项“导入Gradle项目”。导入完成后,您将在项目浏览器中至少看到三个文件夹。 一个就是您为项目命名的名称。 该文件夹包含与Gradle相关的内容,在我们的示例中,我们不会碰到该文件夹。 下一个文件夹是-core文件夹。 该文件夹包含您的主要游戏类,在该文件夹中,您将为该示例添加所有代码。 根据您选择部署到的平台,每个选择的平台都会有文件夹。 例如:“ projectname-desktop或projectname-android”

选择-core文件夹,然后在其中打开java类。 这是您的主要游戏类,默认情况下,您会在其中看到三种方法。 在create方法中,我们将初始化变量。 每次屏幕刷新时,都会调用render方法,因为render方法是我们的游戏逻辑。 最后,dispose方法是程序在关闭时将检查需要从内存中擦除的对象列表的位置。
原始资料示例
在您的主要游戏类中,删除类括号内的所有现有代码(保留类,导入和打包行),然后将此示例代码复制并粘贴到您的主要游戏类中。
私有静态最终int FRAME_COLS = 8,FRAME_ROWS = 1;
私有静态最终整数JUMP_HEIGHT = 20;
Animation walkRightAnimation;
Animation walkLeftAnimation;
Animation waveAnimation;
TextureRegion idleFrame;
TextureRegion jumpFrame;
float stateTime;
纹理img;
SpriteBatch批处理;
雪碧
int canJump = 0;
浮子重力= -2;
int jumpCounter = 0;
@Override
公共无效创建(){
//将纹理(图像文件)加载到内存中
img =新的Texture(Gdx.files.internal(“ coolguy.png”));
//创建一个新的精灵批处理,并根据我们的静态变量将其拆分为帧
批处理=新的SpriteBatch();
TextureRegion [] [] tmp = TextureRegion.split(img,
img.getWidth()/ FRAME_COLS,
img.getHeight()/ FRAME_ROWS);
//创建一个纹理区域,该区域是img纹理上区域的数组,此纹理区域具有两个框架,并且这些框架的大小取自tmp纹理区域
TextureRegion [] idleFrames = new TextureRegion [1];
idleFrames [0] = tmp [0] [0];
TextureRegion [] walkRightFrames = new TextureRegion [2];
walkRightFrames [0] = tmp [0] [1];
walkRightFrames [1] = tmp [0] [2];
TextureRegion [] walkLeftFrames = new TextureRegion [2];
walkLeftFrames [0] = tmp [0] [3];
walkLeftFrames [1] = tmp [0] [4];
TextureRegion [] jumpFrames = new TextureRegion [1];
jumpFrames [0] = tmp [0] [5];
TextureRegion [] waveFrames = new TextureRegion [2];
waveFrames [0] = tmp [0] [6];
waveFrames [1] = tmp [0] [7];
//创建动画并分配一组帧以及每个帧之间的时间
walkRightAnimation =新的Animation (0.25f,walkRightFrames);
walkLeftAnimation =新的Animation (0.25f,walkLeftFrames);
waveAnimation =新的Animation (0.25f,waveFrames);
idleFrame = idleFrames [0];
jumpFrame = jumpFrames [0];
//浮点值很重要!
stateTime = 0f;
sprite =新的Sprite(idleFrame);
sprite.setPosition(50,50);
}
@Override
公共无效的渲染(){
if(Gdx.input.isKeyPressed(Input.Keys.UP))
{
sprite.setRegion(waveAnimation.getKeyFrame(stateTime,true));
}
if(Gdx.input.isKeyPressed(Input.Keys.LEFT))
{
sprite.setRegion(walkRightAnimation.getKeyFrame(stateTime,true));
sprite.translateX(-5f);
}
if(Gdx.input.isKeyPressed(Input.Keys.RIGHT))
{
sprite.setRegion(walkLeftAnimation.getKeyFrame(stateTime,true));
sprite.translateX(5f);
}
if(Gdx.input.isKeyPressed(Input.Keys.SPACE))
{
sprite.setRegion(jumpFrame);
if(jumpCounter == 0 && canJump == 0)
{
canJump = 1;
重力= 8;
}
否则(canJump == 1 && jumpCounter> = JUMP_HEIGHT)
{
canJump = 1;
重力= -2;
}
}
if(!Gdx.input.isKeyPressed(Input.Keys.SPACE))
{
重力= -2;
}
if(!Gdx.input.isKeyPressed(Input.Keys.ANY_KEY))
{
sprite.setRegion(idleFrame);
}
if(canJump == 1)jumpCounter ++;
sprite.translateY(gravity);
if(sprite.getY()<0)
{
jumpCounter = 0;
canJump = 0;
sprite.setY(0);
}
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stateTime + = Gdx.graphics.getDeltaTime();
batch.begin();
batch.draw(sprite,sprite.getX(),sprite.getY(),200,180); //在(50,50)处绘制当前帧
batch.end();
}
@Override
公共无效处置(){
batch.dispose();
img.dispose();
}
现在,将此图片另存为coolguy.png,并将其复制并粘贴到-desktop文件夹的资产文件夹中。

通过导航到-desktop Java类,右键单击该类并选择“运行方式”>“ java应用程序”,进行测试以确保此方法有效。 该示例应该开始,并且您应该在屏幕上看到一个火柴人,移动箭头键并按下空格键将使他左右移动并跳跃。

那么在此示例中幕后发生了什么? 在这里,我将简要介绍此示例中使用的libGDX的一些概念。
轮询
这是我在示例中使用的读取用户输入的方法。 每次调用render方法时,应用程序都会检查输入设备(键盘)的当前状态。 如果按下某个键,它将执行与该场景相关的特定代码。 在大多数情况下,此方法都可以正常工作,尽管如果有人快速快速地上下推按键,则此方法可能无法记录所有按键。
轮询的替代方法是事件处理,它允许按时间顺序输入来自可靠可靠的输入设备的信息,并且在性能上要好一些。
座标
libGDX的不同部分使用不同种类的坐标网格。 在此示例中,我使用屏幕坐标指定火柴人的位置。 在此坐标系中,0,0位于屏幕的左下角。 libGDX中使用的坐标系统的另一个示例是在处理鼠标或触摸(android / IOS)输入时使用的触摸坐标。 在此坐标系中,0,0位于屏幕的左上角。
三角洲时间
游戏编程术语中的增量时间是自上次渲染调用以来的时间。 在此示例中,我使用它来帮助动画以恒定的帧速率播放。 增量时间通常用于帮助计算游戏对象的移动,以使它们的移动与计算机的处理速度(计算机可以调用渲染方法的速度)无关。
我希望这有助于您更好地了解libGDX项目的结构。 谢谢阅读。