动作类游戏设计思想
特点:
游戏动画
用户可控制动画
设计的原则
1、游戏逻辑和显示分开
2、游戏循环
3、所有的动画中的物体(贴图)通过坐标控制位置
Swing
贴图可分层
第一层 地表(草地、河流等)
第二层 物品
第四层 敌人
第三层 玩家
第四层 前景
第五层 文字
每一层就是一个对象数组
人物对象数组
class 人物对象{
当前x坐标
当前y坐标
目标x坐标
目标y坐标
名称
图片来源
行走
跑动
攻击
}
class 灰熊 extends 敌人对象{
血量
override
攻击(){ .... }
}
刷新怪物
对象数组中新增一个对象
显示逻辑:
通过一个游戏循环,游戏循环每进行一次
就对每层的对象数组进行遍历,并增加、删除图片控件,或修改图片控件的位置
游戏控制
修改对象数组中的内容
人物行走,修改人物对象的坐标
选择敌人,swing事件的机制
攻击,修改人物对象的图片来源
行走动画:
鼠标点击怪物后,修改玩家人物对象的目标坐标值。
在游戏循环中,根据当前坐标显示图片位置,显示完了之后,再修改当前坐标,使其与目标坐标更接近
原理是:游戏循环每进行一次,修改图片坐标
攻击动画(爆炸、死亡倒地……):
原理是:游戏循环每进行n次,修改图片的来源(一系列运动相关的套图)
俄罗斯方块:
Class Gird{
x坐标
y坐标
bool 是否有图
}
程序初始化的时候,通过一个二重循环生成一个二维的Grid数组,以及每个元素的坐标
游戏控制:
生成一个方块
将特定组合的Grid数组元素 是否有图属性 修改为true
方块往下掉
将true下面的……
二维的Grid数组有两个
一个是Fall,负责往下掉的动画,掉到下面有阻挡时,将Fall里面的“是否有图”为 true的Grid放到pool里面去,同时再上面随机生成一个新的图形
另一个是Pool,负责消除,如果有新的图形被赋值进来,就判断是否有某行的Grid“是否有图”属性全为true,如果是,则将其赋值为false,并上上面的所有行的“是否有图”属性全为true的属性,全往下移动一格
图形换方向:
响应键盘事件,修改Fall中的图形的方向
游戏动画:
通过一个游戏循环,不停的去按照坐标绘制fall和pool这两个数组。
每显示一次,fall中的图形就往下掉一格
提升难度,加快游戏循环,游戏循环越来,下落速度就越快
游戏循环一定要使用多线程实现,也可以用模拟多线程(Java中的计时器)。
如果使用一个线程,循环没结束时,程序会处于假死状态。