现在游戏已经初具规模,但得分再多,不可能失败的游戏也不会给人成就感
接下来加入糖果定时消失的行为,而且让糖果消失时就判定为游戏失败
打开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脚本,游戏玩法逻辑就全部完成了。现在,单击“预览游戏”按钮,就可以在浏览器中试玩了。这已经是一个包含核心玩法、激励机制和失败机制的完整游戏了。
