区块2D游戏(Tile based Game)标准场景地图由2维数组构成,2维数组的值代表不同的地表类型及精灵。关卡设计人员可以用文本文件来设计不同的关卡。地表类型一般都是简单的等高等宽的几何形状,如矩形或圆等。
选择的理由:
入门游戏,有一定乐趣,关卡足够多
能引入A*寻路,动画
足够的简单,关卡设计已经完成,不需要剧情设计,不需要滚屏
有一个好的原型,能够展开重构,随时可以发布,随时可以告一段落
原始游戏截图:(标准的2D正视图)http://eclipse-games.
MIT授权模式,比GPL宽松,可以进行修改和再发布,应包含原作者的著作权声明和版权声明。
不成功的转换:(x、y弄反了,贴图有些也没有用45度素材)
转换后的地图:
另一套素材:
使用PNG的素材:(注意光影的表现)
公测版的缺省素材,注意,墙都连起来了,还有外墙衬
材质
3d材质的45度投影
遮挡
美工设计,方块菱形不遮挡,标准48*24中点连线菱形,周围全透明:可以和以前一样重绘,在重绘前用一个白菱形清一下底
采用全部重绘解决遮挡问题,先全部清空,再逐一绘制,见TileMap的PaintListener,全部重绘对于这个游戏,在主流PC上是足够了
考虑遮挡,重绘
选择b,足够简单,对美工约束最小,两套图分别为48*32、48*38,可以更自由发挥。重绘时间足够短,全绘一遍40毫秒左右,能达到30FPS效果。
选择c,需要采用剪切和局部绘制顺序,重绘时间为0或16毫秒,速度有质的提高。
A*寻路
比想像中简单,有树的宽度搜索算法概念,理解A*就比较容易了。为了保持A*的通用性,摘了一个算法实现,并且将游戏中的格式转换了一下,而没有做一个定制的A*实现。效率可能会有影响,本游戏体现不出来。
动画
使用Display的timerExec方法。
自动行走过程中再次点击鼠标,将导致又触发一次自动行走
两次行为线程叠加,混乱,将step变量全局化来控制不允许重入。
屏幕坐标转游戏坐标
先减去余数,将屏幕坐标通过定位方块的原点获取到正确的矩形索引,然后判断点与矩形及内菱形的关系来确定菱形索引。
负数坐标的修正?
更完整的算法采用MouseMap,MouseMap最后的颜色查找表回归到自己写的“点与矩形及内菱形的关系”函数进行简化。
键盘控制
,只允许用向上键向前走
第三套就使用方向感,也不容易犯错误,但按键次数太多。
键盘控制方案可在第2、第3套之间选择。
完全的国际化
Retarget action
工具栏先定义占位符,再retarget,在freenote中有GEF帮着做了,在普通RCP中如何实现?见附件一。
抗锯齿
gif图边缘是有锯齿的,png图就好了
全绘制gif图30毫秒,全绘png图40毫秒
PNG带来图像质的飞跃
PNG的阴影效果
PNG的光效果:
两套素材切换,换肤
就是切换时将原有资源dispose掉,再载入新的
地图数据清洗
①冗余的墙
找一个最小包围即可。
多余的墙特征,其东南、东北、西南、西北均为墙或为空(地板不为空)
②墙拐角bug
当小人走过拐角时,因为上边为空,不刷,所以留下一截图。
如果先清白,再与背景不合,简单的方法是这种地方再增加一块墙。
地图特点:
######
## . #
# $@#. #
# $# #
该块特征,空白块,其西南、东南为墙,其南为地板、目标或小人
界面布局调整
调整后为:
增加背景图
实现局部刷新之后,CPU负担比较小,背景图也可以考虑了,以下是一例:
墙拐角的自动处理
见附件云风的字符表格的算法,共有16种情况,以2D角度来划分,分别为
序号
2D位置情况
孤立一块
竖向的末端,如孤立两块竖连的第二块
横向的起点,如孤立两块横连的第一块
矩形的左下角,形如┗
竖向的起点,如孤立两块竖连的第一块
竖连的中间,形如┃
矩形的左上角,形如┏
三通之一,形如┣
横向的末端,如孤立两块横连的第二块
矩形的右下角,形如┛
10
横连的中间,形如━
11
三通之一,形如┻
12
矩形的右上角,形如┓
13
三通之一,形如┫
14
三通之一,形如┳
15
四通,形如╋
墙外围增加一圈地板做修饰