现在游戏已经初具规模,但得分再多,不可能失败的游戏也不会给人成就感
接下来加入糖果定时消失的行为,而且让糖果消失时就判定为游戏失败
打开Game脚本,在onLoad()方法的spawnNewStar
调用之前加入计时需要的变量声明,代码如下
onLoad: function () {
// …
// 初始化计时器
this.timer = 0;
this.starDuration = 0;
// 生成一个新的糖果
this.spawnNewStar();
// 初始化计分
this.score = 0;
},
然后在spawnNewStar()
方法最后加入重置计时器的逻辑
其中this.minStarDuration和this.maxStarDuration是一开始声明的Game组件属性,用来规定糖果消失时间的随机范围,代码如下
spawnNewStar: function() {
// …
// 重置计时器,根据消失时间范围随机取一个值
this.starDuration = this.minStarDuration +
Math.random() * (this.maxStarDuration -
this.minStarDuration);
this.timer = 0;
},
在update()方法中加入计时器,更新和判断超过时限的逻辑:
update: function (dt) {
// 每帧更新计时器,超过限度还没有生成新的糖果
// 就会调用游戏失败逻辑
if (this.timer > this.starDuration) {
this.gameOver();
return;
}
this.timer += dt;
},
在gainScore()方法后面加入gameOver()方法,游戏失败时重新加载场景。
gameOver: function () {
this.player.stopAllActions(); //停止 player 节点的跳跃动作
cc.director.loadScene('game');
}
最后打开Candy脚本,为即将消失的糖果加入简单的视觉提示效果,在update()方法最后加入以下代码。
update: function() {
// …
// 根据 Game 脚本中的计时器更新糖果的透明度
var opacityRatio = 1 - this.game.timer/this.game.starDuration;
var minOpacity = 50;
this.node.opacity = minOpacity + Math.floor(opacityRatio * (255 - minOpacity));
}
保存Candy脚本,游戏玩法逻辑就全部完成了。现在,单击“预览游戏”按钮,就可以在浏览器中试玩了。这已经是一个包含核心玩法、激励机制和失败机制的完整游戏了。