06 - 飞机大战开发Day2

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

  • 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,自动随机生成并让它自己移动。