现在游戏已经初具规模,但得分再多,不可能失败的游戏也不会给人成就感

    接下来加入糖果定时消失的行为,而且让糖果消失时就判定为游戏失败

    打开Game脚本,在onLoad()方法的spawnNewStar调用之前加入计时需要的变量声明,代码如下

    1. onLoad: function () {
    2. // …
    3. // 初始化计时器
    4. this.timer = 0;
    5. this.starDuration = 0;
    6. // 生成一个新的糖果
    7. this.spawnNewStar();
    8. // 初始化计分
    9. this.score = 0;
    10. },

    然后在spawnNewStar()方法最后加入重置计时器的逻辑

    其中this.minStarDuration和this.maxStarDuration是一开始声明的Game组件属性,用来规定糖果消失时间的随机范围,代码如下

    1. spawnNewStar: function() {
    2. // …
    3. // 重置计时器,根据消失时间范围随机取一个值
    4. this.starDuration = this.minStarDuration +
    5. Math.random() * (this.maxStarDuration -
    6. this.minStarDuration);
    7. this.timer = 0;
    8. },

    在update()方法中加入计时器,更新和判断超过时限的逻辑:

    1. update: function (dt) {
    2. // 每帧更新计时器,超过限度还没有生成新的糖果
    3. // 就会调用游戏失败逻辑
    4. if (this.timer > this.starDuration) {
    5. this.gameOver();
    6. return;
    7. }
    8. this.timer += dt;
    9. },

    在gainScore()方法后面加入gameOver()方法,游戏失败时重新加载场景。

    1. gameOver: function () {
    2. this.player.stopAllActions(); //停止 player 节点的跳跃动作
    3. cc.director.loadScene('game');
    4. }

    最后打开Candy脚本,为即将消失的糖果加入简单的视觉提示效果,在update()方法最后加入以下代码。

    1. update: function() {
    2. // …
    3. // 根据 Game 脚本中的计时器更新糖果的透明度
    4. var opacityRatio = 1 - this.game.timer/this.game.starDuration;
    5. var minOpacity = 50;
    6. this.node.opacity = minOpacity + Math.floor(opacityRatio * (255 - minOpacity));
    7. }

    保存Candy脚本,游戏玩法逻辑就全部完成了。现在,单击“预览游戏”按钮,就可以在浏览器中试玩了。这已经是一个包含核心玩法、激励机制和失败机制的完整游戏了。