跳到主要内容

今天继续完善飞机大战项目,今天的工作量如下:

  • Loading界面添加进度条控件ProgressBar
  • 实现飞机自动发射子弹。
  • 实现敌人随机生成并移动。

进度条

在资源读取时,我们希望有个进度条实时显示资源加载进度,刚好cc.resources.loadDir()有一个函数重载,支持我们设置进度:

// Loading.js
cc.resources.loadDir('./',
function (finish, total, item) {
if (this.progressBar && this.progressBar.progress < finish / total) {
this.progressBar.progress = finish / total;
}
}.bind(this),
function (err, assets) {
if (err) {
console.log('[Scene Load]:项目资源加载错误');
return;
}

let resMgr = ResourceManager.getInstance();
let dataMgr = DataManager.getInstance();
for (let asset of assets) {
if (asset instanceof cc.SpriteFrame) {
resMgr.arrSpriteFrame.push(asset);
} else if (asset instanceof cc.JsonAsset) {
dataMgr.arrLevelData = asset.json;
}
}
});

在第一个函数中,可以使用已加载的资源数finish和资源总数total算出已加载资源的百分比,并且只在百分比高于进度条进度时进行更新。同时注意为了使用Loading.js中的this,需要使用.bind()传参。

飞机自动发射子弹

和小鸟项目的思路差不多,首先制造一个子弹的预制体,然后在游戏场景中添加子弹管理者bulletMgr,编写相应脚本,生成子弹并让它自己移动(执行子弹预制体脚本的.move())。

敌人生成与移动

同理,制造敌人预制体,编写它的行为脚本,然后在游戏场景中添加敌人管理者enemyMgr,自动随机生成并让它自己移动。