Libgdx作者博客:http://www.badlogicgames.com/
Libgdx项目地址:https://github.com/libgdx/libgdx/


关于LibGDX的学习,建议看看Beginning Android Games, 2nd Edition,该书也是由LibGDX作者写的。书中的游戏实例可以看出LibGDX的雏形,便于大家更好的学习和理解LibGDX。Libgdx由audio、files、graphics、math、physics、scenes、utils这些主要类库所组成,它们分别对应了Libgdx中的音频操作,文件读取,2D/3D渲染,Libgdx绘图相关运算,Box2D封装,2D/3D游戏组件,以及Libgdx内置工具类。书中都有这些组件的封装过程。


LibGDX和其他游戏框架基本类似,从高层次来看,游戏可以分为游戏资源和游戏逻辑。

游戏资源包括图像、声音、背景音乐等。游戏逻辑负责转换和跟踪游戏状态。

为了更好的理解,可以参考下图:

212206311.png

第一步初始化游戏:加载相关资源到内存、初始化游戏状态、注册用户输入监听(包括键盘、鼠标,手指触摸等)等。

第二步进入游戏循环逻辑:

(1)根据框架提供的循环,实现对应方法,根据DeltaTime和用户输入等不断的更新游戏状态。

(2)根据状态渲染游戏画面。

LigGDX的Gdx类拥有Application, Graphics, Audio, FilesInput类实例的引用。 分别用于处理应用程序基本信息、图像、音视频、文件和用户输入。

LibGDX对于程序内部循环定义如下:

public interface ApplicationListener {

 public void create ();

 public void resize (int width, int height);

 public void render ();

 public void pause ();

 public void resume ();

 public void dispose ();

}

我们需要做的就是实现这些接口方法。

这些方法对应的程序运行状态图如下:

221831984.png

在Libgdx中,与游戏显示相关度最高的包总共有两个,一个是graphics包,其中包含着Libgdx为进行OpenGL渲染所提供的功能实现,而另一个,就是下面介绍的scenes包,这里包含着Libgdx所提供的可以直接使用到游戏中的游戏组件,共分scenes2d以及scenes3d两大部分(3D部分暂无内容)。其中2D部分的核心在于Actor类,Libgdx所有2D组件使用都围绕着Actor展开。

对于Libgdx中游戏组件使用的简单关系说明:

AndroidApplication (Activity的子类,只有启动类继承了AndroidApplication并执行才能启动Libgdx类库)
|
ApplicationListener (仅可在初始化时注入ApplicationListener,此后除非替换Activity否则无法切换ApplicationListener) - Game (ApplicationListener的libgdx抽象实现,其中Screen可切换)

|
Screen (基本函数与ApplicationListener近乎一致,唯一差别在于可以通过Game类用setScreen函数进行切换,如不使用Game类则可无视它的存在)
|
Stage (游戏场景用类,用以管理添加其中的具体Actor,管理Actor的手段在于内置的Group类)
|
Group (本身为Actor的具体实现,能够处理注入其中的Actor,也能以递归方式管理注入其中的其它Group)
|
Actor (游戏用演员或者说角色,与Action类组合使用时可以产生不同种类的“动画行为”,Action部分的具体实现基本与Cocos2D一致)
|
Image、Button、Label等 (细分Actor的具体实现,以重载方式响应事件,除Group外相互间不能组合叠加,事件能否传递取决于上级组件是否设置了相关监听)