Android游戏开发十日通(2)-搭建libgdx游戏引擎
2013-04-22 14:29
447 查看
libgdx简介
libgdx是一个跨平台的2D/3D的游戏开发框架,它由Java/C/C++语言编写而成。它基于Apache License, Version 2.0协议,对商业使用和非商业使用均免费。libgdx兼容Windows、Linux、Max OS X、Java Applet、Javascript/WebGL与Android[4](1.5版本+)平台。对于Android平台的支持在Android阵营和相关市场日益扩大的情况下libgdx的使用者越来越多。另外,基于MonoTouch,可以实现IOS兼容。
官方网站:http://libgdx.badlogicgames.com/
搭建开发环境
操作系统:Opensuse12.2开始前请确保配置好android开发环境。jdk最好用1.6的,官网说1.7会有bug。
1)下载libgdx-http://libgdx.badlogicgames.com/download.html
选择Release Builds。
![](http://img.my.csdn.net/uploads/201304/21/1366519423_7267.png)
下载好之后解压文件,就像这样:
![](http://img.my.csdn.net/uploads/201304/21/1366519594_7662.png)
2)自动生产开发工程
包中自带的gdx-setup-ui可以用来自动生成项目工程,免去了繁琐的初始化配置过程。
终端进入到解压后的文件夹,运行
java -jar gdx-setup-ui.jar
利用工具创建工程,参数如下:
![](http://img.my.csdn.net/uploads/201304/21/1366519865_5686.png)
注意左下角要选定Generate the desktop project,方便开发调试。
中间的libGDX要是绿色的才能生成项目,红色的话点击文件夹小图标定位到之前下载好的zip文件。
最后点击偶下角的Open the generation screen->launch
![](http://img.my.csdn.net/uploads/201304/21/1366520040_5671.png)
在当前文件夹下面会生产三个对应的目录,如图:
![](http://img.my.csdn.net/uploads/201304/21/1366520176_9370.png)
3)导入工程
在eclipse中首先导入游戏工程和desktop工程。
File->import
![](http://img.my.csdn.net/uploads/201304/21/1366525273_5664.png)
选中刚才创建好的test-gdx-game文件夹->finish。
同样的方法导入test-gdx-game-desktop。
接下来导入android工程。
eclipse下面Ctrl+n - >Android project from exiting project->选中test-gdx-game-android->finish.
三个工程导入完成后,还需要修改一些地方。
由于我们创建项目的时候是同时创建了android版本和desktop版本,gamecode 其实都在test-gdx-game中,而资源文件其实都放在了android项目中asset文件夹中。
直接运行desktop项目会报错,提示找不到资源文件。这里需要在desktop项目中添加一个链接。
右击test-gdx-game-desktop->project -> Properties -> Java Build Path -> Source tab -> Link Source… -> Browse… -> 定位到 test-gdx-game-android project 的assert文件夹,点 Finish。
工程就算建立完成了。
desktop和android都可以直接运行,调用的是test-gdx-game中的代码。
各自的运行结果如下:
![](http://img.my.csdn.net/uploads/201304/21/1366525755_5767.png)
![](http://img.my.csdn.net/uploads/201304/22/1366611412_5377.png)
项目解析
为了初始化Application必须实现ApplicationListener这个接口, 它用来更新游戏状态(即逻辑),渲染出项,暂停游戏,保存状态,释放资源等。它也有一个处理Application 声明周期事件的地方。每个应用,不管后台平台版本都必须实现ApplicationListener 接口。所有平台都会存在并要实现这个接口。
看一下项目代码:
package com.me.testgdxgame; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; public class TestGdxGame implements ApplicationListener { private OrthographicCamera camera; private SpriteBatch batch; private Texture texture; private Sprite sprite; @Override public void create() { float w = Gdx.graphics.getWidth(); float h = Gdx.graphics.getHeight(); camera = new OrthographicCamera(1, h/w); batch = new SpriteBatch(); texture = new Texture(Gdx.files.internal("data/libgdx.png")); texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275); sprite = new Sprite(region); sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth()); sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2); } @Override public void dispose() { batch.dispose(); texture.dispose(); } @Override public void render() { Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(camera.combined); batch.begin(); sprite.draw(batch); batch.end(); } @Override public void resize(int width, int height) { } @Override public void pause() { } @Override public void resume() { } }
生命周期如下:
![](http://img.my.csdn.net/uploads/201304/22/1366611947_7202.png)
几个重要的方法:
create() : 当应用程序创建时,此方法被调用一次。
resize(int width,int,height): 每次游戏屏幕重置并且不是暂停状态的时候调用此方法。在create()后调用一次。参数是屏幕被重置后的新狂读和高度。
render(): 每次渲染发生时游戏循环调用此方法。游戏更新发生在绘制之前。意思就是说先处理逻辑再处理绘制。
pause(): 在应用destroyed()前调用此方法。在android中Home键按下或者重新进入程序时调用。这是一个保存游戏状态的好地方,在android中的resume不一定会调用。
resuem(): 这个方法爱尽在android中调用,当应用获得焦点时,桌面应用中将不会调用此方法。
dispose(): 当应用destroyed时,调用此方法,在pause()之后。
相关文章推荐
- Android游戏开发十日通(2)-搭建libgdx游戏引擎
- 【Android LibGDX游戏引擎开发教程】第02期:LibGDX环境的搭建
- libgdx引擎-android游戏开发(三)
- 【Android LibGDX游戏引擎开发教程】第04期:各个模块的详细介绍
- 【Android LibGDX游戏引擎开发教程】第09期:动画类的使用
- Android游戏引擎libgdx使用教程1:搭建libgdx环境
- libgdx引擎-android游戏开发(一)
- 【Android LibGDX游戏引擎开发教程】第01期:LibGDX的详细介绍
- 【Android LibGDX游戏引擎开发教程】第05期:图形图像的绘制(上)基础类的使用和详解
- Android游戏开发----LibGdx游戏引擎制作微信火焰效果(附源码)
- android游戏开发框架libgdx的使用(一)--环境搭建
- Android游戏框架libgdx笔记(一):开发环境搭建
- android游戏开发框架libgdx的使用(一)--环境搭建
- Android开发_libgdx游戏引擎教程 ApplicationListener,着手第一个程序! (六)
- 【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)
- 【Android LibGDX游戏引擎开发教程】第01期:LibGDX的详细介绍
- Android游戏开发引擎libGDX系列教程(一) -- 初识libGDX
- 【Android LibGDX游戏引擎开发教程】第03期:示例代码详细讲解
- Android游戏开发中使用Libgdx引擎遇到的问题及解决办法汇总
- 【Android LibGDX游戏引擎开发教程】第01期:LibGDX的详细介绍