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,如需转载请自行联系原作者

相关文章
|
4月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
1月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
48 1
java制作游戏,如何使用libgdx,入门级别教学
|
5月前
|
Java 编译器 测试技术
Java基础16-Java注解简介和最佳实践(二)
Java基础16-Java注解简介和最佳实践(二)
46 4
|
1月前
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
29 3
|
5月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
55 0
|
5月前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
38 0
|
3月前
|
并行计算 Java 程序员
Java中的Lambda表达式和函数式编程简介
【8月更文挑战第1天】Lambda表达式,在Java 8中引入,为Java程序员提供了一种简洁、灵活的编写代码的方式。本文将通过实例介绍Lambda表达式及其在函数式编程中的应用,并展示如何利用这些特性简化代码和提高开发效率。
29 2
|
4月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
62 6
|
5月前
|
安全 Java 开发者
Java基础16-Java注解简介和最佳实践(一)
Java基础16-Java注解简介和最佳实践(一)
57 5
|
5月前
|
IDE Java 项目管理
Java入门——Intellij IDEA简介、使用IDEA开发程序、IDEA常用快捷键、IDEA其他操作
Java入门——Intellij IDEA简介、使用IDEA开发程序、IDEA常用快捷键、IDEA其他操作
79 3