LibGdx学习过程(四)输入控制/Stage/Screen的概念
输入控制
游戏是一个交互式的开发过程,在我们展示内容给用户的过程中我们也需要获取用户的输入来继续游戏的进程并完成相应的变化。
那么在变化的过程中不可避免的会出现一个问题:多个游戏组件对于同一个事件拥有监听,那么这个时候会不会出现一些预期之外的问题呢?
比如在游戏初始界面点击屏幕将会开始游戏,在游戏中点击界面将会暂停游戏,如果两个游戏组件同时可以获取用户输入那么游戏的运行将会出现错误,所以我们需要引入输入控制。
类InputMultiplexer实现了InputProcessor接口,完成了很多对于输入控制的封装。
InputMultiplexer inputMultiplexer;
inputMultiplexer = new InputMultiplexer(InputProcessor inpiutProcessor);
Gdx.input.setInputProcessor(inputMultiplexer);
我们可以采用这种方式来设置哪一个InputProcessor可以获得用户输入,当然我们还有更方便的方式
Gdx.input.setInputProcessor(stage);
stage也就是我们舞台,我们可以直接将用户输入设置到某一个舞台上,之允许当前stage获取用户输入。
接下来我们说说stage。
舞台(stage)和屏幕(screen)
在之前我们说过batch,我们需要一张画板才能够在上面开始我们的游戏渲染工作。Stage内部就封装了batch的功能,batch能够完成的工作它能够更好的完成,batch完不成的工作它也能完成。
stage的内部是各个游戏元素,stage更大一级的元素则是screen。
每一个游戏都会拥有诸如开始/主游戏/设置等等界面,我们在设计的过程中就可以进行相应的划分。
比如一个游戏拥有
- 开始Screen
- 主游戏Screen
- 结算Screen
在此之外呢主游戏Screen中又包含着游戏Stage和设置Stage,Stage下又包含了各种各样的游戏元素。
多说无益,让我们看代码
package com.mygdx.game.screen;
import com.badlogic.gdx.Screen;
public class BaseScreen implements Screen {
@Override
public void show() {
}
@Override
public void render(float delta) {
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
}
我们创建了一个BaseScreen来作为screen的基类,它实现了Screen接口,那么Screen接口所具备的方法都起到什么作用呢?
首先show()方法的作用类似于之前我们所说过的create()方法,在该方法内我们可以对于screen中变量进行初始化,对于游戏逻辑进行适应的编写,这个方法会在当前screen被设置到主屏幕时调用
render方法与之前讲到的主类中的render方法所起到的作用完全一致,主要负责游戏的渲染,它会在一定的帧率中不断的调用render函数。
resize函数的主要是当游戏发生某些改动时可能屏幕并不能正确的显示我们想要的比例,此时需要它来进行重设。
当我们的程序中断和重新连接的时候需要用到pause函数和resume函数,它们的主要任务是当程序中断时暂停并保存,当程序重连时恢复数据。
dispose函数同上,负责资源的释放。
说过了screen我们再来说说stage。
与screen不同stage不需要我们去实现或者重写太多的东西,我们可以直接创建Stage实例来使用它。
Stage stage;
Game game;
stage = new Stage(new StretchViewport(
game.getWorldWidth(),
game.getWorldHeight()
));
stage的创建需要传入一个视口,视口的大小可以直接使用父容器的大小或者你也可以自己根据需求去定义它的大小。
stage提供了很多使用的函数,比较常用的比如:
act方法,负责绘制逻辑的搭建。
draw方法,负责具体的游戏界面绘制。
以上两方法拥有各自的默认编写,但实际开发往往需要进行重写以符合业务要求。
touchDown方法,触屏监听。
keyDown方法,键盘监听。
mouseMoved方法,鼠标监听。
以上等等方法用于监听来自各个输入设备的用户输入信息。
addActor方法,添加演员到舞台。
addAction方法,添加动作到舞台。
以上方法用于添加游戏元素到舞台中,那么actor和action又分别有什么样的作用呢?下节继续…