我们知道,游戏程序最主要是就是游戏循环,通俗点来说,就是主线程会不断循环控制游戏的各种状态,并告知绘图线程需要绘制那些图片。
本文,我们用最简单的文字游戏来做一个简单的游戏循环与控制的例子。
最终效果
最简单的文字游戏的玩法就是点击屏幕,然后推进故事,本文的案例将会相应鼠标点击事件,并且做一个简单的场景切换,效果如下所示。
场景类
从上面的例子可以看出,文字游戏最重要的元素就是场景,其中场景包括背景图,人物图以及人物的对话。
控制器控制的最小单元就是场景,场景的定义如下所示
@Data
@NoArgsConstructor
public class MiniScene {
// 背景和人物
private Image bg;
private Image role;
private TextAnimEntity textentity;
public MiniScene(String bg_src, String role_src, TextAnimEntity textentity){
this.bg = new Image(bg_src);
this.role = new Image(role_src);
this.textentity = textentity;
}
}
可以看出,定义非常简单,其中TextAnimEntity就是上篇文章定义的对话类。
@Data
@NoArgsConstructor
@AllArgsConstructor
// 文字动画类,主要实现的功能是一个字一个字浮现一段话
public class TextAnimEntity {
// 这个属性是说话的人
private String name;
// 这个属性是说的话
private String text;
// 人物的头像
private Image image;
// 背景图片
private Image bgImage;
private int width = 100;
private int height = 100;
// 指针,指向下一个要显示的字
private int textIdx;
// 定义一个延时计数器,只有计数器到达一定值的时候才将指针前移
private int clock;
private int clock_max;
// 是否完全显示标志位
private boolean finish;
public TextAnimEntity(String image, String bg_