《堵车啦》关卡配置设计
一、需要配置的项
1、选择地图
2、设置路径
① 考虑多个终点的情况
② 与哪些路径需要检测碰撞
③ 最多同时允许车量
3、设置红绿灯
① 位置
② 角度
③ 所控制路径
4、设置车类型(不设置按通用设置)
① 汽车编号
② 汽车图片
③ 移动速度
④ 得分(通过,救援成功)
⑤ 怒气相关情况
⑥ 汽车损坏概率
5、设置干扰项
① 目前两种类型:火车、飞机
② 设置干扰项路径,目前只能设置水平或垂直
③ 出现条件、概率和时间间隔
④ 设置速度
⑤ 火车时候,需要判断多节车厢条件
6、关卡相关信息
① 编号
② 关卡名
③ 时间
④ 星级评定(一星、二星、三星)
⑤ 开启条件
⑥ 怒气上限
二、数据格式设计
{ "Info": { "LevelID关卡编号": 5220, "Name关卡名": "关卡一", "TimeLimit时间限制(单位:秒)": "120", "OpeningCondition开启条件": { "Type条件类型": "TotalStar总星级", "Arithmetic判定条件": ">", "Value判定值": 10 }, "RageLimit怒气值上限": "500", "StarCondition1评定一星条件": "1000", "StarCondition2评定二星条件": "2000", "StarCondition3评定三星条件": "3000", "CarSpawnInterval车产生时间间隔(单位:毫秒)": 100, "RescueScore救援成功得分": "200", "IsNewCarWaiting新出的车是否等待": true }, "Map": { "MapName": "Level1", "MapExt": "png", "MapWidth": 640, "MapHeight": 480, "TileWidth": 25, "TileHeight": 25 }, "Cars(该关卡所有车的信息)": [{ "CarName": "RedCar", "CarType汽车类型": 5, "Speed速度": 5, "Acceleration加速": 0.15, "Friction摩擦力": 0.75, "BrokenRate车损坏概率(单位:%)": 20, "BrokenTimerRange车损坏的时间范围": { "MinT": 4500, "MaxT": 7500 }, "AnnoyedRageCount恼怒的怒气值": 4, "AngryRageCount愤怒的怒气值": 7, "VeryAngryRageCount非常愤怒的怒气值": 10, "HappyStateScore开心状态得分": 500, "AnnoyedStateScore恼怒状态得分": 250, "AngryStateScore愤怒状态得分": 100, "VeryAngryStateScore抖动状态得分": 0 }], "Routes": [{ "RouteID路径编号": "", "RouteName路径名": "", "CarNumLimit允许同时最多车量": 3, "CollisionRoute": [], "CarType车类型": [], "StopTiles停车位置(允许多个)": [{ "x": 1, "y": 2 }], "StopTilesOffset停车位置偏移量(与上面对应)": [{ "x": 0, "y": 0 }], "Route路径(算格子,非像素)": [{ "x": 0, "y": 0 }, { "x": 1, "y": 1 }] }], "Lights": [{ "LightID红绿灯编号": "自动生成", "Position位置": { "x": 1, "y": 1 }, "Angle角度": 90, "ControlRoute控制路径": [{ "x路径编号": 1, "y第几个停车点": 1 }] }], "Distracter": [{ "DistracterID编号": 1, "DistracterType类型": "Plane", "Rate出现概率(单位:%)": 100, "Condition出现条件": { "Type条件类型": "Score", "Arithmetic判定条件": ">", "Value判定值": 10000 }, "TimeInterval时间间隔(单位:秒)": 10, "StartPos开始点": { "x": 0, "y": 0 }, "EndPos结束点": { "x": 1, "y": 1 } }, { "DistracterType": "Train", "Rate出现概率(单位:%)": 100, "Condition出现条件": { "Type条件类型": "Score", "Arithmetic判定条件": ">", "Value判定值": 10000 }, "TimeInterval时间间隔(单位:秒)": 10, "StartPos开始点": { "x": 0, "y": 0 }, "EndPos结束点": { "x": 1, "y": 1 }, "WarningTime火车出现前警告时间(单位:毫秒)": 2000, "BoxCardinal火车车厢基数": 20000, "BoxIncrease火车车厢增长值 车厢数计算公式:Math.floor(当前分数 - 基数 / 增长值) + 1(若分数小于基数,车厢数为0)": 10000, "BoxMax火车最大车厢数": 3 }], "Layers": { "LayerBacks": [{ "index": 0, "Type层级类型": "Route", "RouteID路径编号": "" }, { "index": 1, "Type层级类型": "Image", "ImageName图片名": "", "ImageExt图片扩展名": "", "Position图片位置": { "x": 1, "y": 1 } }, { "index": 2, "Type层级类型": "Train火车" }], "LayerFronts": [{ "index": 0, "Type层级类型": "得分UI(固定项,不可新增或删除)" }, { "index": 1, "Type层级类型": "Light", "LightID红绿灯编号": "" }, { "index": 2, "Type层级类型": "Chopper救援飞机" }, { "index": 3, "Type层级类型": "Plane干扰机" }] } }
三、实例
{ "Info": { "LevelID": 1, "Name": "关卡一", "TimeLimit": "120", "OpeningCondition": { "Type": "TotalStar", "Arithmetic": ">", "Value": 10 }, "RageLimit": "500", "StarCondition1": "1000", "StarCondition2": "2000", "StarCondition3": "3000", "CarSpawnInterval": 100, "RescueScore": "200", "IsNewCarWaiting": true }, "Map": { "MapName": "Level1", "MapExt": "png", "MapWidth": 640, "MapHeight": 480, "TileWidth": 25, "TileHeight": 25 }, "Cars": [{ "CarName": "RedCar", "CarType": 0, "Speed": 5, "Acceleration": 0.15, "Friction": 0.75, "BrokenRate": 20, "BrokenTimerRange": { "MinT": 4500, "MaxT": 7500 }, "AnnoyedRageCount": 4, "AngryRageCount": 7, "VeryAngryRageCount": 10, "HappyStateScore": 500, "AnnoyedStateScore": 250, "AngryStateScore": 100, "VeryAngryStateScore": 0 }], "Routes": [{ "RouteID": "1", "RouteName": "East", "CarNumLimit": 5, "CollisionRoute": [], "CarType": [0], "StopTiles": [{ "x": 7, "y": 10 }], "StopTilesOffset": [{ "x": 0, "y": 0 }], "Route": [{ "x": 0, "y": 10 }, { "x": 16, "y": 10 }, { "x": 16, "y": 18 }, { "x": 14, "y": 18 }, { "x": 14, "y": 0 }] }], "Lights": [{ "LightID": "1", "Position": { "x": 17, "y": 10 }, "Angle": 0, "ControlRoute": [{ "x": "1", "y": "0" }] }], "Distracter": [], "Layers": { "LayerBacks": [{ "index": 0, "Type": 1, "ImageName": "BGDecor4", "ImageExt": "png", "Position": { "x": 0, "y": 0 } }, { "index": 1, "Type": 1, "ImageName": "BGDecor3", "ImageExt": "png", "Position": { "x": 0, "y": 0 } }, { "index": 2, "Type": 1, "ImageName": "BGDecor2", "ImageExt": "png", "Position": { "x": 0, "y": 0 } }, { "index": 3, "Type": 1, "ImageName": "BGCenter", "ImageExt": "png", "Position": { "x": 0, "y": 0 } }, { "index": 4, "Type": 0, "RouteID": "1" }, { "index": 5, "Type": 1, "ImageName": "BGDecor1", "ImageExt": "png", "Position": { "x": 0, "y": 0 } }], "LayerFronts": [{ "index": 0, "Type": 3 }, { "index": 1, "Type": 4, "LightID": "1" }] } }
四、注意事项
车
如果车到达下一格子节点,则检查停车点需不需要更新,以及变更行车角度
如果车所在格子节点是最后一格,则跑到终点时要算分并回收车
如果车Go时所在路线路段的是红灯,则置为Stop并在停车点时停下
如果车Stop时,
距离停车点远时,按原来的逻辑加速到最大速度
接近停车点但还未过则减速(通过摩擦力计算)到0,并置为Waiting
如果已过停车点,置为Go
综上所述,
边缘格子禁止设置任何红绿灯
停车点设置时不允许有重复
上一篇:在白鹭中使用P2物理引擎
下一篇:无