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。
下载好之后解压文件,就像这样:
2)自动生产开发工程
包中自带的gdx-setup-ui可以用来自动生成项目工程,免去了繁琐的初始化配置过程。
终端进入到解压后的文件夹,运行
java -jar gdx-setup-ui.jar
利用工具创建工程,参数如下:
注意左下角要选定Generate the desktop project,方便开发调试。
中间的libGDX要是绿色的才能生成项目,红色的话点击文件夹小图标定位到之前下载好的zip文件。
最后点击偶下角的Open the generation screen->launch
在当前文件夹下面会生产三个对应的目录,如图:
3)导入工程
在eclipse中首先导入游戏工程和desktop工程。
File->import
选中刚才创建好的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中的代码。
各自的运行结果如下:
项目解析
为了初始化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() { } }
生命周期如下:
几个重要的方法:
create() : 当应用程序创建时,此方法被调用一次。
resize(int width,int,height): 每次游戏屏幕重置并且不是暂停状态的时候调用此方法。在create()后调用一次。参数是屏幕被重置后的新狂读和高度。
render(): 每次渲染发生时游戏循环调用此方法。游戏更新发生在绘制之前。意思就是说先处理逻辑再处理绘制。
pause(): 在应用destroyed()前调用此方法。在android中Home键按下或者重新进入程序时调用。这是一个保存游戏状态的好地方,在android中的resume不一定会调用。
resuem(): 这个方法爱尽在android中调用,当应用获得焦点时,桌面应用中将不会调用此方法。
dispose(): 当应用destroyed时,调用此方法,在pause()之后。
转载于:https://blog.51cto.com/8672742/1368485