1.List工具篇
2.工具篇 Dictionary
3.工具篇 读取Json文件保存数据
4.资源管理ResourceManager
5.界面层级管理 LayerManager
6.界面管理 UIManager
7.事件监听篇 EventBus
8.枚举篇 枚举管理
9.游戏总管 Mir
10游戏入口 Main
11.声音管理器
12首页界面
13.游戏界面
14.01 背景
15.02主角(与游戏界面交互)
16.03添加怪物来袭
17.04添加障碍物
18.05 添加障碍物排列
19.06添加奖励物品
20.07奖励物质排列数据
21.从零开始-Cocos跑酷游戏——游戏结束界面
22.最后的补充
游戏中少不了障碍物添加
操作流程与怪物添加没有差别
只是多了一个障碍物排列的配置
在下一个章节可以看到
配置表
[
{
"ID": 5001,
"name":"DZ",
"path": "DZ",
"attck": 4001
},
{
"ID": 5002,
"name":"barrier1",
"path": "barrier1",
"attck": 4002
}
]
障碍物配置信息数据转换成对象数据
function BarrierCfgVo()
{
this.id;
this.name;
this.path;
this.attck;
}
BarrierCfgVo.prototype.SetValue=function(mData)
{
this.id=mData.ID;
this.name=mData.Name;
this.path=mData.path;
this.attck=mData.attck;
}
module.exports=BarrierCfgVo;
障碍物配置数据保存
var BarrierCfgData=
{
dataList:null,
filePath:null,
init:function()
{
this.dataList=new window.dictionary();
this.filePath=window.Constant.RootPath.CONFIG_ROOT_PATH+"Barrier";
this.dataDic=window.data.ButtleData.dataDiction;
window.cc.loader.loadRes(this.filePath,(function(err,array)
{
if(err)
{
console.log("错误信息:"+err);
return;
}
var arrs=array.json;
for(var i=0;i<arrs.length;i++)
{
var mData=arrs[i];
var mVoData=new window.BarrierCfgVo();
mVoData.SetValue(mData);
this.dataList.add(mVoData.id,mVoData);
}
}).bind(this));
},
GetBarrierCfgData:function()
{
return this.dataList;
}
}
module.exports=BarrierCfgData;
游戏中需要用到的数据对象处理
这里需要提到的一个点是,配置数据跟游戏数据是不一样的
配置数据通过配置读取之后,是一个定值,只能通过配置表来进行修改。
而游戏数据是会在游戏运行中会动态变化的。
function BarrierVoData()
{
this.id;
this.name;
this.BarrierID;
this.posArray;
}
BarrierVoData.prototype.SetValue=function(mData)
{
this.id=mData.id;
this.BarrierID=mData.BarrierID;
this.name=mData.name;
this.posArray=mData.posArray;
}
module.exports=BarrierVoData;
障碍物数据处理与管理
var BarrierData=
{
dataList:null, //
dataAndPefabDic:null, // key 对应的预制体
dataDictiony:null, //数据 对应的对象池
prefab:cc.Prefab,
loadPath:null,
initCount:30,// 初始化个数
count:0,
BarrierCfgData:null,
manager:null,
init:function()
{
this.dataList=new window.List();
this.dataDictiony=new window.dictionary();
this.dataAndPefabDic=new window.dictionary();
this.loadPath=window.Constant.RootPath.Barrier;
this.BarrierCfgData=window.cfg.BarrierCfgData.GetBarrierCfgData();
var len=this.BarrierCfgData.count;
for(var i=0;i<len;i++)
{
var data=this.BarrierCfgData.values[i];
if(data==null)
{
console.log("未取得配置文件索引:"+i);
return;
}
this.LoadPrefab(data);
}
},
//加载预制体
LoadPrefab:function(data)
{
console.log("开始加载预制体");
var path=this.loadPath+data.path;
window.ResourceManager.LoadPrefab(path,function(err, prefab)
{
if(err!=null)
{
console.log("错误信息:"+err);
return;
}
this.dataAndPefabDic.add(data.id,prefab);
}.bind(this));
},
initStarPool:function()
{
var len=this.dataAndPefabDic.count;
for(var k=0;k<len;k++)
{
var pool=new cc.NodePool();
var key=this.dataAndPefabDic.keys[k];
for(var i=0;i<this.initCount;i++)
{
var prefab=this.dataAndPefabDic.get(key);
var objNode=cc.instantiate(prefab);
//添加脚本可以根据key值进行改变,也可以在RewardHandler中判断Key编写不一样的逻辑
objNode.addComponent("BarrierHandler");
pool.put(objNode);
}
this.dataDictiony.add(key,pool);
}
},
GetRewardItemFromPool:function(parent,id,pos,manager)
{
this.manager=manager;
var nodeObj;
var pool=this.dataDictiony.get(id);
if(pool==null)
{
console.log("id:"+id+"对象池为空");
return;
}
if(pool.size()>0)
{
nodeObj=pool.get();
}
else
{
var prefab=this.dataAndPefabDic.get(id);
nodeObj=cc.instantiate(prefab);
nodeObj.addComponent("BarrierHandler");
}
nodeObj.getComponent("BarrierHandler").SetData(id,manager);
nodeObj.setParent(parent);
nodeObj.setPosition(pos);
return nodeObj;
},
RemoveItem:function(objNode)
{
var id=objNode.getComponent("BarrierHandler").id;
this.PutItemToPool(objNode,id);
},
PutItemToPool:function(objNode,id)
{
var pool=this.dataDictiony.get(id);
pool.put(objNode);
},
RemoveAllItem()
{
if(!this.manager)
{
return;
}
var barrierPos1=cc.find("barrierPos",this.manager.ground1);
var barrierPos2=cc.find("barrierPos",this.manager.ground2);
var barrierPos3=cc.find("barrierPos",this.manager.ground3);
this.RemoveChild(barrierPos1);
this.RemoveChild(barrierPos2);
this.RemoveChild(barrierPos3);
},
RemoveChild(parent)
{
var childs=parent.children;
var len=childs.length;
for(var i=len-1;i>=0;i--)
{
this.RemoveItem(childs[i]);
}
}
}
module.exports=BarrierData;
挂载在障碍物上的脚本
cc.Class({
extends: cc.Component,
Data:null,
gameManager:null,
barrierPos:null,
id:0,
onLoad () {
this.initComponent();
},
onDisable()
{
var sprite=this.node.getComponent(cc.Sprite);
var name=sprite.spriteFrame.name
if(name=="DZ2")
{
this.ChangeUIData();
}
},
initComponent()
{
},
SetData(id,gameManager)
{
this.gameManager=gameManager;
var dataList=window.cfg.BarrierCfgData.GetBarrierCfgData();
this.id=id;
var data=dataList.get(id);
this.Data=data;
},
onCollisionEnter:function(other,self)
{
if(other.tag==50)
{
window.data.BarrierData.RemoveItem(this.node);
}
if(this.id==window.Constant.BarrierType.WoodBarrier)
{
return;
}
if(other.tag==1)
{
var playerControll=other.node.getComponent("PlayerControll");
if(playerControll.invincible)
{
console.log("无敌状态");
return;
}
if(playerControll.prePlayerType==window.Constant.PlayerType.SteelBall)
{
console.log("免疫伤害");
this.node.getComponent(cc.Animation).play();
return;
}
window.data.BarrierData.RemoveItem(this.node);
this.gameManager.player.getComponent("PlayerControll").PlayerDie("撞到地上野怪");
}
},
ChangeUIData:function()
{
var path="barrier/DZ1";
var spriteObj=this.node.getComponent(cc.Sprite);
window.ResourceManager.LoadSpriteFrameByName(spriteObj,path);
},
});
游戏二维码
微信平台
4399平台
4399游戏链接:http://www.4399.com/flash/203652.htm