/=\存图地点

游戏开发日志4月5日

【开发记录】

【一】

  

回到2D后建设建筑物的效果,这里放置建筑物的逻辑和之前所述相同。

  • 重新创建了一个NomalGridProperty作为MapGridProperty的父类

  • 该类只有MapPosition一个参数,MapGrid在此基础上增加了A*寻路,判断该格是否有障碍物等功能。NomalGrid被用来作为一个障碍物的底部,即全图的单位坐标就是一个NomalGrid

  • 在此基础上,考虑到一些功能性的障碍物(如床,非功能性如一些装饰品比如花瓶)需要有操作位,即NPC或者Player对该障碍物的交互需要走到该点进行,可以派生出另一个类OperationGrid。为MapGrid新增参数为isObestacle,即该格必须可以经过,而不能是墙。

【二】

开始制作可操作的障碍物。

  • 修改一下ObestacleInfo的内容

  • 考虑到操作位的情况比较复杂,在存储数据时,量化该障碍物的情况如下表。表格大小为5*5,变更为字符串“1021110211111011111102101”。其中1代表障碍物,2代表操作位,0代表空地。

            1 0 2 1 1
            1 0 2 1 1
            1 1 1 0 1
            1 1 1 1 1
            0 2 1 0 1

  • 现在,所能存储的建筑物形状就是不规则的了。建筑物的grid将不能再用二维数组存储,而改为使用list,分为障碍物与操作位。

  • 判断可否放置建筑物的时候,就需要对障碍物与操作位分别判断。障碍物所处位置需要没有别的操作位或者障碍物,操作位所处位置不能为障碍物。

接下可以尝试制作一个电梯了!

  • 固定电梯在左上角,面前两格为操作位。字符为“211211”,根据这个就做好一个电梯啦

  • 将在后面以电梯为蓝本,继承于ObestacleProperty的可交互障碍物

【三】

修正一下之前A*寻路中存在的错误:Player不能在电梯口上下

  • 首先点击地图时,MapManager获得终点和起点的位置,并在终点绘制一个目标点

  • 如果终点和起点的楼层不一样,那么MapManager首先要求起点所在层给出一个从起点到该层电梯入口的路径交给player

  • 当player到达电梯入口时,要求player交互(未实现)

  • player从电梯出来,此时位于终点层的电梯出口,MapManager要求终点层给出一个从电梯出口到终点的路径交给player

  • player抵达终点,通知MapManager销毁在地图上绘制的目标点

  • 中间如果任一路径无法完成,则MapManager销毁目标点,给出无法抵达的信息

  • MapPosition没有重载等号!!!!不要直接等于!!!不然赋值的是地址!!!!!

  • 明天要在无法寻路的时候给Player头上画一个UI来指示

最后来看一下今天的成果,随机生成一些障碍物,浅灰色是物体,深灰色是操作位



【一些想法】

做个电梯吧!

  • 首先我们希望最好这个公寓里可以有两个电梯来分担客流量。同时电梯的等候排队不应该阻止人员出入公寓门口。那么我们做两个1×1的电梯,核定电梯最多一次能运载6个人,这个数字也是一个方格最多能站下的人数。则电梯门口排队人数不能超过5人。在电梯前单独设置一个等候位,这样两个电梯占地2×2。我们让排队人从(3,2)开始排队,并位每个楼层设置一条走廊。这样单个楼层门口处可容纳的人员量就足够了。

  • 现在开始设计电梯,每个电梯应当记录自己上面的乘客人数,人满就不能继续上人了。有一个数组来维护每层需要下客的人数,让排队等候的人群等到电梯到达以后再上。让等待电梯的人的等候位设置在两个电梯之间,这样哪个电梯先来,就可以先乘坐哪个电梯。

  • 同样在每一层可以呼叫电梯上或者下,全局维护这个呼叫队列,包括当前层的呼叫人数,这个呼叫被置入两个电梯的任务维护队列,电梯总是先向同一个方向运作,即满足当前队列中人的需求。也就是说如果是向上的呼叫,那么向下的电梯不会停,向下的人不会上。直到电梯中单一方向的人全部离开,电梯可以接受相反方向的呼叫。让一个电梯优先向上,一个优先向下。电梯停留直到:电梯中没有人,该层呼叫全部处理,电梯满员。此时电梯门关闭,电梯在当前层待机。

  • 这里就会出现一个抢夺的情况。我们让电梯预标记一些呼叫,表示由该电梯处理。这个预先标记由当前电梯可以去执行的快慢决定,快慢取决于当前电梯上的人员情况。一个电梯一次只标记一层的呼叫。

  • 人员要做的就是到达两个电梯中间,然后发出呼叫,如果中间已经有5个人则在右侧等候,并在每次电梯到达时检查自己可否上电梯或者到达排队位置。

  • 到达后人员出大楼或者进大楼。

评论

© 植物园 | Powered by LOFTER