cocoscreator摘星星补充-添加结束游戏

文档中摘星星的demo课后练习如下:

  • 加入简单的开始菜单界面,在游戏运行的一开始显示开始按钮,点击按钮后才会开始游戏
  • 为游戏失败加入简单的菜单界面,游戏失败后点击按钮才会重新开始
  • 限制主角的移动不能超过视窗边界
  • 为主角的跳跃动作加入更细腻的动画表现
  • 为星星消失的状态加入计时进度条
  • 收集星星时加入更华丽的效果
  • 为触屏设备加入输入控制

上一篇添加了开始按钮,今天来添加游戏失败的简单界面;
由于没有合适的素材,并且毕竟只是练习,为了掌握相关技巧,所以就不特意出图了,直接使用现有素材,简单的添加个gameover的游戏结束文本;在层级管理器中创建渲染节点,选择label;在属性检查器中,修改string属性为GameOver,同设置分数时一样的套用font样式,在color中改变字体颜色;最后拖拽节点到场景中希望出现的位置,我这里希望gameover时从场景上方移动到场景中央,所以位置放在了-5,350;
在这里插入图片描述
在主场景中添加gameover属性并关联;

	GameOver:{
       default: null,
       type: cc.Label
    }

之后就是修改脚本了,在game脚本中找到上次写的gameover事件,添加gameover节点的动作;

	gameOver: function () {
        this.player.stopAllActions(); //停止 player 节点的跳跃动作
        let label = this.node.getChildByName('gameOver');
        let MoveTo = cc.moveTo(.5, cc.v2(0, 0))
        label.runAction(MoveTo);
    },

这里我一开始使用的是像改变分数时一样直接使用this.GameOver.runAction预览时才发现对于label节点并不存在runAction方法,在文档上又不知道用什么关键词去解决问题,最后还是百度了很久,一通瞎试,发现通过getChildByName可以获取到node节点,这属于野路子,并不清楚是否应该这么写,有朋友晓得请留言,我会及时修改;
保存后预览,游戏结束后发现,gameover会出现但是有点不对劲,这跟嚼了炫迈似的根本停不下来。。。
在这里插入图片描述
屡了一下,定位问题应该是gamevoer事件触发是在update中判断的,而update是每帧都会调用,所以这飕飕疯跑就说的通了,祭出写web的方法直接加了个flag,后来琢么着,这无中生有搞出来个全局变量有点不合适,想了前两天忘记在哪看到的enabled属性;可以直接把game主逻辑停掉,这样update就不会重复调用gameover属性了;

	this.enabled = false;

在gameover\startEvent中对应的添加enabled属性的0/1;这个毛病就治好了;下边需要在弹出gameover时再搞一个重新开始的按钮,同样的图省事,就直接使用现成的开始按钮了;之前在startEvent中添加了play按钮的事件,并把他的opacity改成了0,那就直接在gameover中把opacity再改成255让他显示出来不就好了;
事实再次打脸。。opacity这个属性打一开始用的就不对,居然犯了这么明显的一个错误,opacity=0不是display:none啊,透明度为0了,元素还在,点击哪个区域的话仍然可以触发startEvent事件;又是一通搜,发现active可以简单快速的控制节点是否激活,于是把opacity都修改为

	this.BtnStart.active = true;

预览了下,仍然存在两个问题:

  1. 有时角色会在gameover后,明明已经stopAllActions的情况下仍然可以贴地蠕动,而且keydown和可以keyup事件监听仍然存在;
  2. 每次游戏结束通过play按钮再次开始游戏时,会生成新的星星;

解决办法:
3. 索性同样enabled处理;
4. 把游戏结束时老的star销毁掉;

这俩度没什么难点以及嘎七碼八的api,心细点哪里出错改哪里就好了,直接吧修改后的代码贴上来了

	startEvent: function () {
        this.enabled = true;
        this.timer = 0;
        this.starDuration = 0;
        this.score = 0;
        this.groundY = this.ground.y + this.ground.height / 2;
        this.spawnNewStar();
        this.BtnStart.active = false;
        this.player.getComponent('player').startMove();
        this.node.getChildByName('gameOver').setPosition(-5,350);
        this.player.getComponent('player').enabled = true;
        this.player.getComponent('player').onLoad();
    },
	gameOver: function () {
        this.player.stopAllActions(); //停止 player 节点的跳跃动作
        let label = this.node.getChildByName('gameOver');
        let MoveTo = cc.moveTo(.5, cc.v2(0, 0))
        label.runAction(MoveTo);
        this.node.getChildByName('star').destroy();
        this.BtnStart.active = true;
        this.enabled = false;
        this.player.setPosition(6.629, -115.225);
        this.player.getComponent('player').enabled = false;
    },

写的时候不觉得,但是贴过来一看,臃肿的一批,应该还可以进行很大程度的优化,让我想起了刚开始工作时写的${’#id’}.parent().parent().parent().parent();总会有个parentUntil,只是现在还没掌握;事需缓图,慢慢来吧,哈哈。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos Creator是一款面向游戏开发者的跨平台游戏开发工具,它集成了Cocos2d-x游戏引擎和Cocos Studio编辑器,支持多种平台上的游戏开发,如iOS、Android、Windows等。 消灭星星是一款基于Cocos Creator开发游戏。在游戏中,玩家需要消除屏幕上的星星,以获得分数。游戏开始时,屏幕上会随机生成一些星星,玩家可以通过点击相连的星星来消除它们。消除的星星越多,得到的分数就越高。玩家可以通过不断消除星星来刷新高分记录,挑战自己的极限。 在消灭星星游戏中,Cocos Creator提供了丰富的功能和工具,为游戏开发者提供了便利。开发者可以使用Cocos Creator的图形界面编辑器来创建游戏场景、导入资源和设置游戏规则等。同时,Cocos Creator还提供了强大的脚本编写功能,开发者可以使用JavaScript或TypeScript编写游戏逻辑,实现游戏中的各种功能。 除了基本的消除星星玩法,Cocos Creator还支持添加特殊道具、关卡设计、人物角色等功能。开发者可以根据自己的需求,自定义游戏的玩法和功能,使游戏更加有趣和有挑战性。 总而言之,Cocos Creator游戏开发工具提供了强大的功能和便捷的开发环境,使开发者可以轻松地开发出各种各样的游戏,包括消灭星星这样的小而精致的休闲游戏。无论是想要学习游戏开发还是实现自己的游戏创意,Cocos Creator都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值