如何使用libgdx中文社区编写一个简单的游戏

上一篇介绍游戏雏形的编写,这一篇将完善部分逻辑并添加更多效果。
例子代码在,如有需要请自行在tag中下载对应部分。
完善飞镖逻辑
现在的飞镖可以旋转可以飞行了,但是有一个问题却没有解决。
首先飞镖的速度,如果用户触摸位置很靠近左侧,那么飞镖的速度就很慢了。
其次,如果用户触摸中间位置,默认情况下飞镖应该是朝那个方向飞行,而不是飞到触摸位置就消失了。
这里的处理办法很简单,就是根据用户触摸位置,算出一个X为480的值,这样飞镖就可以飞到最右侧,同时保持相当的速度。
在createProjectile方法中添加
float r = (target.y - image.getY()) / (target.x - image.getX()); //获取斜率
float detY = r * 480; //获取Y的变动量
image.addAction(Actions.moveTo(480 + image.getX(), detY + image.getY(),
2f)); // 设置飞镖的移动
这样基本就解决了问题。
接下来来思考飞镖的数量和相应位置。
首先飞镖的速度一定要得到限制,不然满屏幕飞镖有什么意思。这里限制飞镖的数量为5个。
在touchDown的最开始添加
if (projectiles.getChildren().size &= 5) { //限制飞镖的数量为5个
这样当屏幕上的飞镖数量大于等于5时就不会产生新的飞镖了。
还有就是触摸的位置,如果触摸的位置太靠右的话,会出现飞镖倒飞或者速度过快的问题,所以当触摸位置太靠近左侧的时候就不释放飞镖。
在touchDown方法中添加
if (vector3.x & man.getX() + 5) { //如果触摸太靠近左侧就不响应
这里的5是我随便写的,仅仅表示个意思。测试一下,觉得5还是太小了,最后我改成10了。
更带感的对手
说实话,现在的对手一动不动,只会匀速平移。我们先改进它的外貌吧。
我从获取到如下图片
打包以后放入assets文件夹中。
因为libgdx只有默认Animation类,但是没法办法直接在stage中使用,所以新建一个Scythe类并继承Actor类。
public Scythe(AtlasRegion atlasRegion) {
this.setWidth(titleWidth); //设置高度
this.setHeight(titleHeight); //设置宽度
TextureRegion[][] temp = atlasRegion.split(titleWidth, titleHeight); //分割图块
walkFrames = new TextureRegion[4]; //获取第二行的4帧
for (int i = 0; i & 4; i++) {
walkFrames[i] = temp[1][i];
animation = new Animation(0.1f, walkFrames); //创建动画,帧间隔0.1
因为原图宽200,高192,一共16张图,所以每一块的宽就是50,高48。使用Animation类需要手动提供相关帧,并通过Animation和当前时间获取的帧。
重写draw方法如下
public void draw(SpriteBatch batch, float parentAlpha) {
stateTime += Gdx.graphics.getDeltaTime(); //获取总时间
currentFrame = animation.getKeyFrame(stateTime, true); //获取当前关键帧
batch.draw(currentFrame, this.getX(), this.getY(), this.getWidth(),
this.getHeight()); //绘制
修改TargetGroup中有关region.getRegionHeight()的部分,全部除以4。同时修改Image类Scythe类。
最后完整的Scythe如下
import com.badlogic.gdx.G
import com.badlogic.gdx.graphics.g2d.A
import com.badlogic.gdx.graphics.g2d.SpriteB
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasR
import com.badlogic.gdx.graphics.g2d.TextureR
import com.badlogic.gdx.scenes.scene2d.A
public class Scythe extends Actor {
TextureRegion[] walkF // 保存每一帧
A // 动画类
float stateT // 总时间
TextureRegion currentF // 当前帧
int titleWidth = 50; // 声明块宽度
int titleHeight = 48; // 声明块高度
public Scythe(AtlasRegion atlasRegion) {
this.setWidth(titleWidth); // 设置高度
this.setHeight(titleHeight); // 设置宽度
TextureRegion[][] temp = atlasRegion.split(titleWidth, titleHeight); // 分割图块
walkFrames = new TextureRegion[4]; // 获取第二行的4帧
for (int i = 0; i & 4; i++) {
walkFrames[i] = temp[1][i];
animation = new Animation(0.1f, walkFrames); // 创建动画,帧间隔0.1
public void draw(SpriteBatch batch, float parentAlpha) {
stateTime += Gdx.graphics.getDeltaTime(); // 获取总时间
currentFrame = animation.getKeyFrame(stateTime, true); // 获取当前关键帧
batch.draw(currentFrame, this.getX(), this.getY(), this.getWidth(),
this.getHeight()); // 绘制
效果如下:
我们来试试在给予怪兽血量,即有些怪兽可以承受两次伤害。这里我们将用到比较基本的东西。
首先是血条的位置,一般来看应该在怪兽正上方,以红色显示。
绘制可以用很多种方法,我不怎么习惯mesh那套,所以这里我使用Pixmap类。
先在Sythe类中添加两个变量
int margin = 2; // 血条和人物之间的间隔
int pixHeight = 5; // 血条高度
然后在绘制方法中添加
Pixmap pixmap = new Pixmap(64, 8, Format.RGBA8888); //生成一张64*8的图片
pixmap.setColor(Color.BLACK); //设置颜色为黑色
pixmap.drawRectangle(0, 0, titleWidth, pixHeight); //绘制边框
Texture pixmaptex = new Texture(pixmap); //生成图片
TextureRegion pix = new TextureRegion(pixmaptex, titleWidth, pixHeight); //切割图片
batch.draw(pix, this.getX(), this.getY() + this.titleHeight
+ this.margin); //绘制
这样我们就有了一个黑色的边框了
然后就是血量的填充了,在添加两个变量以记录总血量和当前血量
int maxHp; // 总血量
int currentHp; // 当前血量
绘制血条的代码添加到绘制完黑框的语句后面
pixmap.setColor(Color.RED); // 设置颜色为红色
pixmap.fillRectangle(0, 1, titleWidth * currentHp / maxHp,
pixHeight - 2); // 绘制血条
最后一定要释放掉pixmap
pixmap.dispose();
这是设置总血量为2,当前血量为1的效果
增加了血量以后我们的代码也需要修改了,在主类DartsShaSha中修改相关的逻辑。
为了方便起见我们将游戏的逻辑赋给控制器。
先新建一个IController
blogs.htynkn.
import com.badlogic.gdx.scenes.scene2d.G
import com.badlogic.gdx.scenes.scene2d.S
public abstract class IController extends Group {
public abstract void update(Stage stage);
然后新建TargetController类,重写update方法,在这个方法中我们处理相关逻辑,然后在主类中只需要调用方法就可以。
首先将中已有的代码拷贝过来,然后在Sythe中添加两个方法来处理受到伤害和死亡判断。
public void beAttacked(int damage) {
if (this.currentHp & damage) { // 如果血量大于伤害就扣除响应数值
currentHp = currentHp -
} else if (this.currentHp & 0) { // 如果血量小于伤害但是仍有血量就让血量归零
currentHp = 0;
public Boolean isAlive() {
return this.currentHp & 0;
然后在TargetController中添加update的相关代码
public void update(Stage stage) {
Group projectiles = (Group) stage.getRoot().findActor("projectiles"); // 获取飞镖所在Group
Actor[] projectile = projectiles.getChildren().begin();
Actor[] targets = this.getChildren().begin();
for (int i = 0; i & projectiles.getChildren(). i++) {
Actor actor = projectile[i];
for (int j = 0; j & this.getChildren(). j++) {
Actor target = targets[j];
if (ProjectileFactory.attackAlive(target, actor)) {
Scythe scythe = (Scythe)
scythe.beAttacked(1);
projectiles.removeActor(actor);
if (!scythe.isAlive()) {
this.removeActor(target);
然后在主类中修改相关的实例化代码,在render中调用update方法。
targetController.update(this.stage); //调用update方法,处理怪兽的逻辑
效果如下:
飞镖的杀伤力和手势识别
上面的代码中每一个飞镖的杀伤力是1,每一个怪兽的血量是2。
现在我们来修改一下飞镖的控制,让飞镖也采用控制器来处理。
在这里设定为触摸一下屏幕是发射一般的飞镖,杀伤力为1。而长按以后的杀伤力是2。
libgdx中提供了一个手势识别的接口,实现它就可以了。这里我选择继承GestureAdapter。
public class DartsListener extends GestureAdapter
同时修改飞镖的控制为控制器模式,新建控制器DartsController。
代码如下:
blogs.htynkn.
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasR
import com.badlogic.gdx.math.R
import com.badlogic.gdx.scenes.scene2d.A
import com.badlogic.gdx.scenes.scene2d.S
import com.badlogic.gdx.scenes.scene2d.actions.A
blogs.htynkn.elements.D
public class DartsController extends IController {
public void update(Stage stage) {
// 如果飞镖已经飞到则刪除
Actor[] projectile = this.getChildren().begin();
for (int j = 0; j & this.getChildren(). j++) {
Actor actor = projectile[j];
if (!this.checkAlive(actor)) {
this.removeActor(actor);
public DartsController(AtlasRegion region) {
this.region =
public void AddDarts(Dart dart) {
if (this.getChildren().size &= 5) { //如果飞镖数量大于等于5个就结束
float r = (dart.getTarget().y - dart.getY())
/ (dart.getTarget().x - dart.getX()); // 获取斜率
float detY = r * 480; // 获取Y的变动量
dart.addAction(Actions.moveTo(480 + dart.getX(), detY + dart.getY(), 2f)); // 设置飞镖的移动
this.addActor(dart);
public Boolean attackAlive(Actor target, Actor projectile) {
Rectangle rectangle = new Rectangle(target.getX(), target.getY(),
target.getWidth(), target.getHeight()); // 创建一个矩形
return rectangle.contains(
projectile.getX() + projectile.getWidth() / 2,
projectile.getY() + projectile.getHeight() / 2); // 判断是否在矩阵中,即是否击中
public Boolean checkAlive(Actor projectile) {
if (projectile.getActions().size == 1) {
public Dart createDart() {
return new Dart(region);
其中Dart类代码如下:
blogs.htynkn.
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasR
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.actions.A
import com.badlogic.gdx.scenes.scene2d.ui.I
public class Dart extends Image {
public Dart(AtlasRegion region) {
super(region);
this.setOrigin(getWidth() / 2, getHeight() / 2);
this.addAction(Actions.repeat(50, Actions.rotateBy(360, 0.5f)));
public void setTarget(Vector2 target) {
this.target =
public void setTarget(float x, float y) {
this.target = new Vector2(x, y);
public Vector2 getTarget() {
因为我们的输入接受另外有类DartsListener来处理,所以修改主类的继承如下:
public class DartsShaSha implements ApplicationListener
在multiplexer中添加我们新的手势识别器
GestureDetector gestureDetector = new GestureDetector(
new DartsListener(this.stage));
multiplexer.addProcessor(gestureDetector); // 添加手势识别
目前DartsListener中代码如下
blogs.htynkn.
import com.badlogic.gdx.input.GestureDetector.GestureA
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.A
import com.badlogic.gdx.scenes.scene2d.S
blogs.htynkn.controller.DartsC
blogs.htynkn.elements.D
public class DartsListener extends GestureAdapter {
public DartsListener(Stage stage) {
this.stage =
public boolean touchDown(float x, float y, int pointer, int button) {
DartsController dartsController = (DartsController) stage.getRoot()
.findActor("dartsController");
if (dartsController.getChildren().size &= 5) { // 限制飞镖的数量为5个
Vector3 vector3 = new Vector3(x, y, 0);
stage.getCamera().unproject(vector3); // 坐标转化
Actor man = stage.getRoot().findActor("player");
if (vector3.x & man.getX() + 10) { // 如果触摸太靠近左侧就不响应
Dart dart = dartsController.createDart();
dart.setX(man.getX() + man.getWidth() / 2);
dart.setY(man.getY() + man.getHeight() / 2);
dart.setTarget(vector3.x, vector3.y);
dartsController.AddDarts(dart);
public boolean longPress(float x, float y) {
可能还有其他细节的修改,详细的请参考代码。
目前我们只能算是重构了一下,游戏效果并没有改变。现在来设置飞镖的杀伤力和长按的处理。
在Dart中添加属性
在实例化中添加
power = 1; //默认杀伤力为1
将TargetController中的
scythe.beAttacked(1);
scythe.beAttacked(dart.getPower());
而中的longPress方法基本和touchDown相同,只是增加了
dart.setPower(2); //设置杀伤力为2
dart.setColor(Color.RED); //设置成红色
来思考一下处理流程,用户触摸屏幕,首先会触发tap事件,然后是touchDown,最后才是longPress。
也就是目前我们的游戏长按一下会发出一个普通的飞镖,然后才是我们的红色飞镖。
要处理这个问题,我们添加一个DartsDetector类,继承GestureDetector类。
因为事件的触发顺序是tap-&touchdown-&longpress-&touchup。
所以我们的事件逻辑全部转移到touchup中,如果是longpress事件就发出红色飞镖,如果是touchdown就发出普通飞镖。
由于我们的DartsListener已经不处理任何逻辑了,所以删除其中所有代码。
GestureDetector中的代码如下
blogs.htynkn.
import com.badlogic.gdx.graphics.C
import com.badlogic.gdx.input.GestureD
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.A
import com.badlogic.gdx.scenes.scene2d.S
blogs.htynkn.controller.DartsC
blogs.htynkn.elements.D
public class DartsDetector extends GestureDetector {
public DartsDetector(Stage stage, GestureListener listener) {
super(listener);
this.stage =
public boolean touchUp(float x, float y, int pointer, int button) {
DartsController dartsController = (DartsController) stage.getRoot()
.findActor("dartsController");
if (dartsController.getChildren().size &= 5) { // 限制飞镖的数量为5个
Vector3 vector3 = new Vector3(x, y, 0);
stage.getCamera().unproject(vector3); // 坐标转化
Actor man = stage.getRoot().findActor("player");
if (vector3.x & man.getX() + 10) { // 如果触摸太靠近左侧就不响应
return super.touchUp(x, y, pointer, button);
Dart dart = dartsController.createDart();
dart.setX(man.getX() + man.getWidth() / 2);
dart.setY(man.getY() + man.getHeight() / 2);
dart.setTarget(vector3.x, vector3.y);
if (this.isLongPressed()) { //如果是长按就变成红色飞镖
dart.setPower(2); // 设置杀伤力为2
dart.setColor(Color.RED); // 设置成红色
dartsController.AddDarts(dart);
return super.touchUp(x, y, pointer, button);
效果如下:
这一篇修改了很多细节,可能部分很小但却关键的修改没有在文中标明。比如为Actor设置名称以便通过findActor方法获取。
如果直接复制有问题,可以从git库获取,对应的tag为page2。
下一篇将会添加一些声音效果和资源加载,然后会添加一个统计功能。
阅读(...) 评论()关注微信免费下载
热门推荐最新发帖最新回复
《libGDX游戏开发入门指南》.(吴继征,乐晓波).[iso]@ckook
查看: 3070|回复: 0
shupi.jpg (39.64 KB, 下载次数: 9)
12:52 上传
本书作为libGDX的入门教程,分为5部分。第一部分(第1~2章)为准备篇,介绍libGDX游戏引擎、历史、功能与特点、开发工具等、多平台的环境搭建等。第二部分(第3章),主要介绍libGDX的项目创建与交叉编译,期间还介绍了使用命令行来调试、运行、打包项目。第三部分(第4~5章),这两章为基础篇,主要是讲解一些基础的开发库。第四部分(第6章),主要讲解游戏开发工具,重点讲解了游戏工具的综合运用。第五部分(第7~9章),主要讲解游戏的控件与高级开发内容。书中的每个示例都配合一个实战演练内容,保证读者每学习一个知识点都可以进行相应的练习。
第1章 初识libGDX& & & & 1
1.1 什么是libGDX& & & & 1
1.2 libGDX的历史& & & & 2
1.3 libGDX的特点& & & & 2
1.3.1 强兼容性& & & & 2
1.3.2 高效性& & & & 3
1.3.3 架构的清晰性& & & & 3
1.4 开发工具& & & & 3
1.4.1 粒子编辑器(Particle Editor)& & & & 4
1.4.2 文字生成工具(Hiero Bitmap Font Generator)& & & & 4
1.4.3 图片合并工具(TexturePacker)& & & & 5
1.4.4 项目构建工具(GDX-Setup-UI)& & & & 5
1.5 libGDX的主要功能& & & & 6
1.6 libGDX的应用& & & & 7
1.7 学习资料& & & & 8
1.8 本章小结& & & & 9
第2章 环境搭建& & & & 10
2.1 Windows系统下的开发环境配置& & & & 10
2.1.1 JDK下载及安装& & & & 10
2.1.2 开发工具下载& & & & 13
2.1.3 Eclipse插件配置& & & & 21
2.1.4 开发库下载& & & & 25
2.1.5 Gradle开发库配置& & & & 28
2.2 Mac OS系统下的开发环境搭建& & & & 31
2.2.1 开发工具下载& & & & 31
2.2.2 Gradle开发库配置& & & & 32
2.3 Windows系统环境变量配置& & & & 35
2.3.1 Python环境变量配置& & & & 35
2.3.2 Gradle环境变量配置& & & & 37
2.3.3 安卓环境变量配置& & & & 39
2.4 Mac OS系统环境变量配置& & & & 40
2.4.1 Python环境变量配置& & & & 40
2.4.2 Gradle环境变量配置& & & & 41
2.4.3 安卓环境变量配置& & & & 42
2.5 本章小结& & & & 43
第3章 Hello,libGDX!& & & & 44
3.1 libGDX项目的创建、导入及运行& & & & 44
3.2 使用Gradle命令调试项目& & & & 52
3.2.1 Desktop项目调试& & & & 53
3.2.2 Html项目调试& & & & 54
3.2.3 Android项目调试& & & & 56
3.2.4 iOS项目调试& & & & 59
3.3 libGDX多平台工程详解& & & & 64
3.3.1 Core工程目录解析& & & & 64
3.3.2 Android工程目录解析& & & & 65
3.3.3 Desktop工程目录解析& & & & 66
3.3.4 Html工程目录解析& & & & 66
3.3.5 iOS工程目录解析& & & & 67
3.3.6 多平台配置文件详解& & & & 68
3.4 本章小结& & & & 69
第4章 基础开发库& & & & 70
4.1 开发文档介绍& & & & 71
4.1.1 在线查看API文档& & & & 71
4.1.2 离线查看API文档& & & & 72
4.1.3 常用开发包介绍& & & & 73
4.1.4 官方Wiki& & & & 77
4.2 游戏生命周期& & & & 78
4.2.1 ApplicationListener接口& & & & 78
4.2.2 ApplicationAdapter类& & & & 82
4.3 纹理类& & & & 83
4.3.1 纹理类的构造方法& & & & 83
4.3.2 纹理类的常用方法& & & & 84
4.3.3 实战演练& & & & 85
4.4 精灵画笔类& & & & 87
4.4.1 SpriteBatch类的构造方法& & & & 87
4.4.2 SpriteBatch类的常用方法& & & & 88
4.4.3 实战演练& & & & 89
4.5 Pixmap类& & & & 91
4.5.1 Pixmap类的构造方法& & & & 91
4.5.2 Pixmap类的常用方法& & & & 92
4.5.3 实战演练& & & & 93
4.6 纹理区域类& & & & 95
4.6.1 TextureRegion类的构造方法& & & & 95
4.6.2 TextureRegion类的构造方法详解& & & & 96
4.6.3 TextureRegion类的常用方法& & & & 97
4.6.4 实战演练& & & & 97
4.7 精灵类& & & & 99
4.7.1 Sprite类的构造方法& & & & 99
4.7.2 Sprite类的常用方法& & & & 100
4.7.3 实战演练& & & & 101
4.8 本章小结& & & & 103
第5章 核心开发库& & & & 104
5.1 演员类& & & & 104
5.1.1 演员类的构造方法& & & & 105
5.1.2 演员类的常用方法& & & & 105
5.1.3 实战演练& & & & 108
5.2 舞台类& & & & 110
5.2.1 舞台类的构造方法& & & & 111
5.2.2 舞台类的常用方法& & & & 111
5.2.3 实战演练& & & & 113
5.3 Viewport类& & & & 116
5.3.1 Viewport类的构造方法& & & & 117
5.3.2 Viewport类的常用方法& & & & 118
5.3.3 实战演练& & & & 120
5.4 动作类& & & & 124
5.4.1 动作特效类& & & & 124
5.4.2 动作控制类& & & & 125
5.4.3 实战演练& & & & 126
5.5 动画类& & & & 131
5.5.1 动画类的构造方法& & & & 131
5.5.2 动画类的常用方法& & & & 131
5.5.3 实战演练& & & & 133
5.6 综合示例& & & & 135
5.7 本章小结& & & & 142
第6章 游戏开发工具& & & & 143
6.1 文字处理& & & & 143
6.1.1 Hiero工具用法& & & & 143
6.1.2 BitmapFont类& & & & 146
6.1.3 BitmapFont类的构造方法& & & & 146
6.1.4 BitmapFont类的常用方法& & & & 147
6.1.5 实战演练& & & & 148
6.2 图片合成工具& & & & 153
6.2.1 图片合成工具用法& & & & 153
6.2.2 TextureAtlas类& & & & 157
6.2.3 TextureAtlas类的构造方法& & & & 158
6.2.4 TextureAtlas类的常用方法& & & & 158
6.2.5 实战演练& & & & 160
6.3 粒子编辑器& & & & 163
6.3.1 粒子编辑器的使用方法& & & & 164
6.3.2 ParticleEffect类& & & & 168
6.3.3 ParticleEffect类的构造方法& & & & 168
6.3.4 ParticleEffect类的常用方法& & & & 168
6.3.5 实战演练& & & & 169
6.4 地图编辑器& & & & 173
6.4.1 游戏图层详解& & & & 174
6.4.2 地图编辑器的使用方法& & & & 174
6.4.3 TiledMap类& & & & 177
6.4.4 TiledMap类的常用方法& & & & 177
6.4.5 OrthogonalTiledMapRenderer类& & & & 178
6.4.6 OrthogonalTiledMapRenderer类的构造方法& & & & 178
6.4.7 OrthogonalTiledMapRenderer类的常用方法& & & & 179
6.4.8 实战演练& & & & 180
6.5 本章小结& & & & 181
第7章 常用系统控件& & & & 182
7.1 Skin类& & & & 182
7.1.1 JSON配置文件& & & & 182
7.1.2 Skin类的构造方法& & & & 184
7.1.3 Skin类的常用方法& & & & 185
7.1.4 实战演练& & & & 186
7.2 Button类& & & & 188
7.2.1 Button类的构造方法& & & & 188
7.2.2 Button类的常用方法& & & & 189
7.2.3 ButtonStyle类的成员变量& & & & 189
7.2.4 ButtonStyle类的构造方法& & & & 190
7.2.5 实战演练& & & & 190
7.3 Label类& & & & 194
7.3.1 Label类的构造方法& & & & 194
7.3.2 Label类的常用方法& & & & 195
7.3.3 标签样式类& & & & 196
7.3.4 实战演练& & & & 196
7.4 Image类& & & & 199
7.4.1 Image类的构造方法& & & & 199
7.4.2 Image类的常用方法& & & & 200
7.4.3 实战演练& & & & 201
7.5 CheckBox类& & & & 203
7.5.1 CheckBox类的构造方法& & & & 204
7.5.2 CheckBox类的常用方法& & & & 205
7.5.3 CheckBoxStyle类& & & & 205
7.5.4 CheckBoxStyle类的构造方法& & & & 206
7.5.5 实战演练& & & & 206
7.6 ProgressBar类& & & & 210
7.6.1 ProgressBar类的构造方法& & & & 211
7.6.2 ProgressBar类的常用方法& & & & 211
7.6.3 ProgressBarStyle类& & & & 212
7.6.4 ProgressBarStyle类的构造方法& & & & 213
7.6.5 实战演练& & & & 213
7.7 Slider类& & & & 218
7.7.1 Slider类的构造方法& & & & 218
7.7.2 Slider类的常用方法& & & & 219
7.7.3 SliderStyle类& & & & 219
7.7.4 SliderStyle类的构造方法& & & & 220
7.7.5 实战演练& & & & 220
7.8 TextField类& & & & 223
7.8.1 TextField类的构造方法& & & & 223
7.8.2 TextField类的常用方法& & & & 223
7.8.3 TextFieldStyle类& & & & 225
7.8.4 TextFieldStyle类的构造方法& & & & 225
7.8.5 实战演练& & & & 226
7.9 TouchPad类& & & & 229
7.9.1 TouchPad类的构造方法& & & & 229
7.9.2 TouchPad类的常用方法& & & & 229
7.9.3 TouchPadStyle类& & & & 230
7.9.4 TouchPadStyle类的构造方法& & & & 231
7.9.5 实战演练& & & & 231
7.10 ScrollPane类& & & & 235
7.10.1 ScrollPane类的构造方法& & & & 235
7.10.2 ScrollPane类的常用方法& & & & 236
7.10.3 ScrollPaneStyle类& & & & 237
7.10.4 ScrollPaneStyle类的构造方法& & & & 238
7.10.5 实战演练& & & & 239
7.11 List类& & & & 242
7.11.1 List类的构造方法& & & & 242
7.11.2 List类的常用方法& & & & 242
7.11.3 ListStyle类& & & & 243
7.11.4 ListStyle类的构造方法& & & & 243
7.11.5 实战演练& & & & 244
7.12 SelectBox类& & & & 246
7.12.1 SelectBox类的构造方法& & & & 246
7.12.2 SelectBox类的常用方法& & & & 247
7.12.3 SelectBoxStyle类& & & & 248
7.12.4 SelectBoxStyle类的构造方法& & & & 249
7.12.5 实战演练& & & & 249
7.13 SplitPane类& & & & 252
7.13.1 SplitPane类的构造方法& & & & 252
7.13.2 SplitPane类的常用方法& & & & 253
7.13.3 SplitPaneStyle类& & & & 254
7.13.4 SplitPaneStyle类的构造方法& & & & 254
7.13.5 实战演练& & & & 255
7.14 Tree类& & & & 257
7.14.1 Node类& & & & 257
7.14.2 Tree类的构造方法& & & & 259
7.14.3 Tree类的常用方法& & & & 259
7.14.4 TreeStyle类& & & & 260
7.14.5 实战演练& & & & 261
7.15 Window类& & & & 264
7.15.1 Window类的构造方法& & & & 264
7.15.2 Window类的常用方法& & & & 264
7.15.3 WindowStyle类& & & & 265
7.15.4 WindowStyle类的构造方法& & & & 265
7.15.5 实战演练& & & & 266
7.16 综合示例& & & & 271
7.17 本章小结& & & & 279
第8章 高级开发库& & & & 280
8.1 AssetManager类& & & & 280
8.1.1 AssetManager类的构造方法& & & & 280
8.1.2 AssetManager类的常用方法& & & & 281
8.1.3 实战演练& & & & 282
8.2 Screen类& & & & 286
8.2.1 Game类& & & & 287
8.2.2 Screen类的构造方法& & & & 287
8.2.3 Screen类的常用方法& & & & 288
8.2.4 实战演练& & & & 288
8.3 音频类& & & & 295
8.3.1 Music类& & & & 296
8.3.2 Sound类& & & & 297
8.3.3 实战演练& & & & 298
8.4 Mesh类& & & & 304
8.4.1 VertexAttribute类& & & & 305
8.4.2 VertexAttribute类的构造方法& & & & 306
8.4.3 VertexAttribute类的常用方法& & & & 306
8.4.4 Mesh类的构造方法& & & & 307
8.4.5 Mesh类的常用方法& & & & 307
8.4.6 GLSL语言& & & & 308
8.4.7 实战演练& & & & 309
8.5 Camera类& & & & 313
8.5.1 Camera类的成员变量& & & & 314
8.5.2 Camera类的常用方法& & & & 314
8.5.3 照相机原理& & & & 315
8.5.4 OrthographicCamera类& & & & 316
8.5.5 实战演练1& & & & 317
8.5.6 PerspectiveCamera类& & & & 320
8.5.7 实战演练2& & & & 321
8.6 Rectangle类& & & & 324
8.6.1 Rectangle类的构造方法& & & & 325
8.6.2 Rectangle类的常用方法& & & & 325
8.6.3 重点方法详解& & & & 326
8.6.4 实战演练& & & & 327
8.7 Net类& & & & 331
8.7.1 Net类的常用方法& & & & 331
8.7.2 HttpRequest类& & & & 332
8.7.3 HttpResponseListener类& & & & 333
8.7.4 实战演练& & & & 333
8.8 碰撞检测& & & & 337
8.8.1 MapLayers类& & & & 337
8.8.2 MapLayer类& & & & 338
8.8.3 MapObjects类& & & & 339
8.8.4 MapObject类& & & & 339
8.8.5 TiledMapTileLayer类& & & & 340
8.8.6 Cell类& & & & 341
8.8.7 实战演练& & & & 342
8.9 本章小结& & & & 346
第9章 游戏实战演练& & & & 347
9.1 游戏框架搭建& & & & 347
9.2 构建物理世界& & & & 352
9.3 刚体碰撞监听器& & & & 356
9.4 输入监听& & & & 360
9.5 传感器& & & & 362
9.6 游戏地图& & & & 365
9.7 游戏资源加载& & & & 370
9.8 自定义精灵类& & & & 372
9.9 添加星星& & & & 376
9.10 添加火焰& & & & 379
9.11 多精灵碰撞& & & & 383
9.12 木板切换& & & & 386
9.13 多相机调整& & & & 390
9.14 游戏背景& & & & 392
9.15 主场景处理& & & & 394
9.16 死亡与通关& & & & 399
9.17 音效添加& & & & 401
9.18 项目打包& & & & 403
9.18.1 PC端项目打包& & & & 403
9.18.2 安卓项目打包& & & & 405
9.19 本章小结& & & & 407
游客,本付费内容需要支付 2酷币 才能浏览&&
【拿出手机】-&【解锁】-&【打开】-&【扫描左侧&-的二维码】-&【关注稀酷客的微信】-&【发送帖子的tid号】-&【获得密匙】-&【将密匙填到下面的框框中】-&【提交】-&【高速下载】&&&&&&
对着微信输入:&6401&&
返回密匙&:&
~~~还没有人打赏~~~
width:100%">
Powered by}

我要回帖

更多关于 libgdx中文社区 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信