您的位置:首页 > 移动开发 > Android开发

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。



下载好之后解压文件,就像这样:



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()之后。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: