《魔塔》实现思路

要实现魔塔,首先是将图片做成tmx画出来。
tmx的图片分为好几层。每一层有不同的作用,主要的有瓦片层、对象层和固态层。

可以通过函数直接获取层上的每一个对象。

步骤

第一步自然是显示,将该显示的层都显示出来。
疑问:对象层的楼梯是如何显示的?

第二步则是英雄的移动。
分为移动触发、移动前检测、英雄移动或者其他事件的触发。

第三步则是精灵等对象的反应。
分为触发和动作。

游戏主流程

以英雄作为主要的事件触发者。也以英雄的行动作为游戏主进程。

触发英雄移动

得到英雄的下一个位置p,检查该层p处是否有对象,以结果为依据将指令传给英雄和对象。

动作执行完成之前无法再次触发英雄的移动

如果给触发定义一个优先级会怎样?
主动触发的只有按键,其他都是被动触发。只要被动触发之前没有时间重叠区域

英雄

getNextTileCoord(方位)
{
return 当前位置+位移;
}

getMoveBy(方位)
{
return 位移;
}

英雄有三种动作Move,kill和getItem

英雄提供信息表明自己的动作是否已经处理完。

敌人、物品、门

执行动画,销毁

如何销毁一个对象?
在碰撞检测的时候,是通过遍历图层的每一个节点来进行的。

用一个全局的类来保存地图信息,在碰撞检测后传入待销毁对象的位置即可。

传送门

执行操作

MapMgr

单例类,保存每个层的对象信息

构造的时候传入父节点以便添加

removeTileAt()//删除某个位置的对象,不包括地面层对象 和固体对象层

ActionMgr |行动管理类

根据不同的层给出不同的行动

如何进行碰撞检测?

通过获取精灵的位置,以及精灵的速度,来将其与固态层进行比较。

得到英雄的下一个位置p,检查该层p处是否有对象,以结果为依据将指令传给英雄和对象。

将逻辑抽象成数据与代码分离。

地图数据的存储是否都使用CCTMXTiledMap对象?

CCTMXTiledMap对象只负责初始的读取,对于地图数据的读写操作需要自己进行管理。

瓦片层与对象层的区别在哪里?


具体类设计


5、Hero | 英雄类

成员:
bWorking

函数:

getNextTileCoord(方位)
{
return 当前位置+位移;
}

getMoveBy(方位)
{
return 位移;
}

英雄有三种动作Move,kill和getItem


4、MapMgr | 地图管理

implements Singleton //单例类,保存每个层的对象信息

init(CCNode *parent);//构造的时候传入父节点以便添加

removeTileAt()//删除某个位置的对象,不包括地面层对象 和固体对象层

getLayer(enLayer);


ActionMgr |行动管理类

根据不同的层给出不同的行动

takeAction(enLayer)


3、ControlLayer | 菜单层

管理关闭和英雄移动的方位按键
实现Touch功能


GameLayer | 游戏层

控制游戏的运行,管理所有游戏相关的节点。

onTouch(enDirection);//触发英雄移动

- CollisionHandle();//得到英雄的下一个位置p,检查该层p处是否有对象,以结果为依据将指令传给英雄和对象。

动作执行完成之前无法再次触发英雄的移动

GameLayer 还要负责自己的移动,在确定英雄需要移动后,根据条件判断是英雄移动还是图层移动。


2、GameScene | 游戏场景

管理GameLayer 与MenuLayer的交互。

检测英雄是否还在行动,并合理阻止Touch事件。


1、全局常数

enum enLayer
{
……
}

enum enDirection
{
……
}


还需要一个管理地图移动的 //TODO

对地图的移动本质上是对英雄


先处理零散的,对其他类没有依赖的类对象。

你可能感兴趣的:(实现)