36.游戏背景移动(二)

标签:
android开发java技术 |
分类: libGDX开发教程 |
本文使用的libgdx是0.98版本,可能和最新版有一些不同地方。全文内容仅供参考。
(人物动画、按钮素材)
(TiledMap的地图素材)
上一次我们讲解了如何实现“雷电类”游戏的背景移动,我们是通过游戏滚屏的方式,通过衔接2个不同的图片,最终共实现游戏背景的移动。在不同类型的游戏中,需要有不同的游戏背景滚动方式来实现,那么今天我们就来学习下第二章类型的游戏背景移动,也就是我们所说的“超级玛丽”类的游戏背景移动。
Libgdx游戏引擎(1群):187378034
Libgdx游戏引擎(2群):148848483
Libgdx游戏引擎(3群):
79168470
1.需求分析
今天我们要实现一个超级玛丽的游戏背景移动,这个相对比较简单,在之前的博文中,我就实现过一个《碰撞检测》的超级马里奥和TiledMao地图图块的碰撞的实现,今天相对比较简单。
(1)首先,实现超级马里奥的人物移动的动画。
(2)其次,实现人物移动过程中的游戏背景移动。
(3)最后,实现人物移动的按钮的触屏监听。
2.游戏素材
1.游戏图片。
http://s15/small/940dd50agx6CcOAFfQ28e&690
PS:这个游戏的素材,在之前的博文中都可以下载到,不过这个地图是后来在网上随便找的。毕竟只要是讲解原来,素材就不讲究那么精巧了。
PS:这个游戏的素材,在之前的博文中都可以下载到,不过这个地图是后来在网上随便找的。毕竟只要是讲解原来,素材就不讲究那么精巧了。
3.算法实现
由于咱们这个例子是我的博文《碰撞检测》中的例子,所以这里就不做详细的介绍了,如果有有看不懂的同学,可以去我的博文《碰撞检测》中去详细的了解这个例子的内容,那么这里我就简单的介绍一下,实现我们这个例子的背景移动的部分代码。
由于咱们这个例子是我的博文《碰撞检测》中的例子,所以这里就不做详细的介绍了,如果有有看不懂的同学,可以去我的博文《碰撞检测》中去详细的了解这个例子的内容,那么这里我就简单的介绍一下,实现我们这个例子的背景移动的部分代码。
1.更改马里奥的坐标,这个例子的是之前的,所以要修改y轴移动坐标,这里,要将带有碰撞检测的代码,修改为固定坐标。
如图:
2.更改2个照相机的position位置,2D横版游戏重要是处理stage和tiledmap这个2个相机的观察点和人物移动坐标的关系就好了,这里简单的做一个赋值,但是原理是一样的,这里只是给大家一个简单的思路。
如图:
可以实现,舞台和TiledMap的绘制。
如图:
4.完整代码
1.TiledMapTest类代码。
package com.potato;
importcom.badlogic.gdx.ApplicationListener;
importcom.badlogic.gdx.Gdx;
importcom.badlogic.gdx.graphics.GL10;
importcom.badlogic.gdx.graphics.OrthographicCamera;
importcom.badlogic.gdx.graphics.g2d.tiled.TileAtlas;
importcom.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer;
importcom.badlogic.gdx.graphics.g2d.tiled.TiledLoader;
importcom.badlogic.gdx.graphics.g2d.tiled.TiledMap;
importcom.badlogic.gdx.graphics.g2d.tiled.TiledObject;
importcom.badlogic.gdx.graphics.g2d.tiled.TiledObjectGroup;
importcom.badlogic.gdx.scenes.scene2d.Stage;
publicclass TiledMapTest implements ApplicationListener {
public static TiledMap map;
TileAtlas atlas;
TileMapRenderer render;
OrthographicCamera cam;
Stage stage;
Mario mario;
@Override
public void create() {
map = TiledLoader.createMap(Gdx.files.internal("data/level1.tmx"));
atlas = new TileAtlas(map, Gdx.files.internal("data/"));
render = new TileMapRenderer(map, atlas, 10, 10);
cam = new OrthographicCamera();
cam.setToOrtho(false, 800, 480);
stage = new Stage(480, 320, false);
mario = new Mario(0, 0);
setMario();
stage.addActor(mario);
stage.addActor(mario.buttonL);
stage.addActor(mario.buttonR);
Gdx.input.setInputProcessor(stage);
}
@Override
public void dispose() {
}
public void setMario() {
for (TiledObjectGroup group : map.objectGroups) {
for (TiledObject object : group.objects) {
if ("mario".equals(object.name)) {
mario.x = object.x;
mario.y = render.getMapHeightUnits() - object.y;
}
}
}
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
cam.position.x = mario.x;
stage.getCamera().position.x = mario.x;
import
import
import
import
import
import
import
import
import
import
import
public