Java游戏引擎libgdx的简介

简介:

1 前言

    最近想做点小应用,但界面方面是非常不在行,自然想借助游戏引擎来处理这部分工作。本打算在flex中找一个比较好的,但找到pushbutton的时候发现官方主页留下的只有goodbye的页面,留言的意思就是现在大家都去玩mobile了,他们放弃了这个引擎的开发。看到这里心一凉,感觉还是做mobile的应用更有前途,之后又去找了一下android开发的图像引擎,反复比较后感觉libgdx貌似不错,今天研究了一天感觉非常棒,相信借助它能做出不错的应用。

2 什么是libgdx

    这个类库是由badlogic开发,封装了opengl es和box2d的引擎,能够让应用在windows、linux、android上运行。另外值得称道的是作者对这个类库维护的非常频繁,相信后期发展会更快。还有一个不得不提的,这个作者就是开发Rokon的人,但目前他全力在做libgdx,Rokon已经两年没更新了。

    作者自称这是一个框架,而不是一个引擎,因为他只封装了底层的东西,上层有些组件还需要自己开发。但我个人感觉封装的程度挺好的,常用的都有了,整个框架非常简洁,源码很容易读。

    官方地址:http://code.google.com/p/libgdx/

3 学习之旅

3.1 环境搭建

    由于是纯java环境,搭建起来和普通工程一样,官方给的介绍也是无比详细,这里不再赘述。project setup地址:http://code.google.com/p/libgdx/wiki/ProjectSetup

3.2 其他准备工作

    千万别忽略这一部分,这些工作对日后的学习开发非常有帮助。

    注:以下安装是libgdx0.9.3版本的时候需要这么弄,目前0.9.8版本直接去下载libgdx的工程,这些工具包都附带了,比之前方便多了。

    1. (重要)下载libgdx的源码及其相关test、demo,由于是开源的,可以轻松获取到这些宝贵资源,源码清晰易读。svn地址:http://libgdx.googlecode.com/svn/trunk/,git地址:https://github.com/oxygene/libgdx.git

    2. (重要)下载gdx的依赖工程tablelayout,svn地址:http://table-layout.googlecode.com/svn/trunk

    3. TiledMap地图编辑工具,主页地址:http://www.mapeditor.org/

    4. Texture Pack GUI纹理打包生成工具,主页地址:http://code.google.com/p/libgdx-texturepacker-gui/

    5. Hiero字库编辑工具,下载地址:http://code.google.com/p/libgdx/downloads/detail?name=hiero.jar&can=2&q=

    6. 如果是想在android上开发,还需要下载eclipse的adt插件和android sdk。

3.3 基本概念

    由于自己之前从来没做过类似的东西,有些东西没有多少概念,对学习速度造成了不小的影响,花了一整天才做出个能控制人物走动的demo...

    texture(纹理):一个图片从原始格式解码并上传到GPU就被称为纹理。为了绘制texture,常常使用几何来描述,通过几何对应的顶点来描述纹理。比如要描述一个矩形,可以通过描述每个顶点来描述矩形。要绘图时,首先要绑定纹理,然后传递一个几何描述给OpenGL进行绘制。而绘图的大小和位置由几何描述和OpenGL的viewport的设置共同决定。
(摘自:http://www.cnblogs.com/htynkn/archive/2011/11/10/libgdx_2.html

    actor(表演者):这个东西的概念和flash中的元件是很类似的,就是一个对象,可以对其定义属性方法,做一些特定的控制。

    stage(舞台):就是让actor进行活动的地方,这里面主要包含三个元素,一是actor,当然舞台上可以有很多actor,二是Camera,他可以将舞台的画面放缩、旋转,三是SpriteBatch,这个不太好形容,他就是把要绘制的内容批量送给GPU来绘制,并同时收集下一个画面要绘制的信息。

    各元素的关系:最上层的容器是Application,它就是控制整个应用是在android还是windows上运行的;第二层的Game是用来管理多个Screen的代理类,可以保持一个是显示的,其他隐藏;场景下有着若干舞台,舞台之中是演员。舞台中一个actor又可以包括多个actor,这个actor就是group,下图这个意思没画出来。

    应用的生命周期

 3.4  功能简析 

    这个系统设计真的很容易看懂,从类库角度大概说一下。要深入学习的话,应该把opengl和box2d的原理再仔细看看。

assets:资源管理的类,主要负责加载相关工作。

audio:音频管理类,主要有Music和Sound,区别是Music是按流方式加载,适合大文件,Sound是直接全部加载,适合反复播放。

files:文件操作封装的工具类。

graphics:主要是对opengl的封装,实现了绘图相关的工作,比如Texture、Camera、Color、Mesh、TiledMap、NinePatch。

input:界面输入的事件,其中对于android有手势事件,比如长按、拖拽。

math:主要是图形计算,比如矩阵、向量、矩形之类的操作。

physics.box2d:box2d的封装类,还没仔细看,能实现物理效果,比如重力、反弹(box2d就是物理引擎,这是必然的功能...)。

scene2d:这个是二维图像控制的核心类,Actor、Stage、Interpolator(插值,用于控制动画播放速度)等重要的控制都在这里面。主要有三个功能,一是Action动画,控制Actor来移动、旋转、缩放之类的,二是Interpolator来控制动画播放,可以加速、减速,三是ui组件,但目前实现的比较少,有常见的Button、Image、CheckBox、Label、ScrollPane等。

3.5 第一个demo

    对整体东西有了了解,当然要动手做个demo才能有更好的理解 。我做了一个特别简单的demo,就是点击小人前后位置,小人可以在地图上前后行走。由于附件限制大小,所以把libs下的gdx.jar和gdx-backend-jogl.jar给去掉了,需要运行请自行添加。

    注意,附件在博客的最下面,找不到就对当前页面搜索“基于libgdx的demo

3.6 让demo以applet运行

    由于眼下要做的一个东西是必须放到网页中的,自然要研究一下如何以applet方式运行。官方给了一篇介绍(见参考资料4)比较详细,但是自己动手做的时候发现了一些问题,简单补充一下。

    1. 用官方介绍做完所有的工作,但是我本地依然运行不起来。我是把程序当作一个正常的web程序运行的,所有的jar都是放在lib下(就是那个blog里面所指的applet目录)。
    2. 打开java console,就是你java安装目录的jre/bin/ConsolePanel,windows下会自动在右下的任务栏里面有图标,打开控制台就能方便的查看报错。建议把Advanced里面的debugging参数全部打开,能看到详细的运行过程。
    3. 发现找不到相应的jar,下载路径直接是根目录,应该是index.html页面中声明codebase路径的问题,把jar直接拷贝到web工程的根目录下就可以运行了,当然实际运行要调整到一个合适的目录。
    4. 比较奇怪的是自己的程序对于客户端没有安装环境的并没有提示,这可以让其到http://java.sun.com/applets/jdk/1.4/index.html页面去随便访问一个applet demo,这个可以正常运行,再回来看自己的页面就可以了。
    5. 另外,对于官方所说在linux下运行需要调整的问题,我看了一下,就是不能用openjdk的环境。但是发现firefox比较奇怪,偏要自动加载openjdk的icetea,最后所在ubuntu下chrome跑起来的。

4 总结

    我真有一种找到金矿的感觉,libgdx对于java开发人员来说太容易上手了,做一些桌面和手机应用来说真的是非常方便,也将其转化成为applet来放到网页中。这个类库开发也很积极,相信不久就会成为java桌面应用开发人员的必备利器。



本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/803094,如需转载请自行联系原作者

相关文章
|
2月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
91 24
|
2月前
|
人工智能 Java
java中static关键字简介
`static`关键字用于修饰类的成员变量和方法,使其属于类而非对象。静态成员可通过类名直接访问,无需实例化对象。静态方法只能访问静态成员,不能直接访问非静态成员或使用`this`关键字。此外,静态代码块在类首次加载时执行且仅执行一次,适用于初始化操作。
103 0
|
6月前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
311 29
JVM简介—1.Java内存区域
|
6月前
|
Java Linux API
课时3:Java简介(Java主要特点)
本文介绍了Java的主要特点及其运行机制。Java结合了编译型和解释型语言的优点,通过Java虚拟机(JVM)实现跨平台移植,简化了不同操作系统间的开发流程。Java的特点包括可移植性、简单易用、支持多线程编程、自动垃圾收集和面向对象编程。随着硬件技术的发展,Java的性能问题已大大改善,成为行业标准之一,广泛应用于各种商用平台开发。
229 1
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
158 1
|
6月前
|
开发框架 移动开发 Java
课时2:Java简介(Java发展概述)
课时2:Java简介(Java发展概述) 摘要: 1. Java基础知识:介绍Java作为编程语言及其思想。 2. Java的发展历史:从1991年GREEN项目到1995年正式推出,历经网景公司、HotJava浏览器等关键节点。 3. Java的版本信息:涵盖从JDK 1.0到JDK 1.8的主要版本及特性,如Lambda表达式和模块化支持。
101 0
|
6月前
|
存储 Java C语言
课时11:Java数据类型简介
本文介绍了Java中的数据类型划分,主要分为基本数据类型和引用数据类型。基本数据类型包括数值型(整型、浮点型)、布尔型和字符型,每种类型有固定的默认值和存储范围。引用数据类型涉及内存使用,如数组、类和接口,默认值为Null。文中还提供了不同类型的选择原则,帮助开发者在实际编程中合理选用数据类型。
|
6月前
|
Oracle Java Unix
课时1:认识Java(Java发展简介)
课时1:认识Java(Java发展简介)。主讲人李兴华介绍了Java的起源、发展历程及其广泛应用。Java由Sun公司开发,最初为嵌入式系统设计,后演变为三大方向:Java SE、Java ME和Java EE。尽管面临版权争议等挑战,Java仍是最流行的编程语言之一,广泛应用于大型企业及互联网平台开发。
|
8月前
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
129 9
|
9月前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
157 2
Java 中的 String Pool 简介

热门文章

最新文章