官方摘星星游戏

2024-06-21 17:08
文章标签 游戏 官方 星星

本文主要是介绍官方摘星星游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

通过控制游戏主角(小怪物)跳跃,来触碰到随机生成的星星,如果在星星消失前触碰到,那么则积分+1,否则游戏结束。

实现

大致步骤

1、构建静态页面
2、往UI节点上添加自定义脚本组件(JS或TS编写的满足CocosCreator组件要求的脚本组件)

实现细节

静态页面

拖资源进场景就完事了

脚本组件

1、主角脚本组件(Player)

(1)主角要能动吧,cc.tween()来帮你动起来

runJumpAction () {// 跳跃上升let jumpUp = cc.tween().by(this.jumpDuration, {y: this.jumpHeight}, {easing: 'sineOut'});// 下落let jumpDown = cc.tween().by(this.jumpDuration, {y: -this.jumpHeight}, {easing: 'sineIn'});// 形变let squash = cc.tween().to(this.squashDuration, {scaleX: 1, scaleY: 0.6});let stretch = cc.tween().to(this.squashDuration, {scaleX: 1, scaleY: 1.2});let scaleBack = cc.tween().to(this.squashDuration, {scaleX: 1, scaleY: 1});// 创建一个缓动,按jumpUp->jumpDown的顺序执行动作let tween = cc.tween().sequence(squash, stretch, jumpUp, scaleBack, jumpDown).call(this.playJumpSound, this);// 循环执行return cc.tween().repeatForever(tween);
}

tip:这里通过控制节点的属性,通过顺序执行序列,将动作串起来执行

(2)光一直跳,也没啥意思,不得控制左右跳,控制分为web端和移动端,web端可以通过键盘事件,移动端可以通过触碰

// 初始化键盘输入监听
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);// 触摸监听
let touchReceiver = cc.Canvas.instance.node;
touchReceiver.on('touchstart', this.onTouchStart, this);
touchReceiver.on('touchend', this.onTouchEnd, this);

既然监听,那么当前需要在销毁onDestroy的时候取消监听

onDestroy () {// 取消键盘输入监听cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);// 取消触摸监听let touchReceiver = cc.Canvas.instance.node;touchReceiver.off('touchstart', this.onTouchStart, this);touchReceiver.off('touchend', this.onTouchEnd, this);
}

在监听时指定了监听处理函数,例如this.onKeyDown

onKeyDown (event) {switch(event.keyCode) {case cc.macro.KEY.a:this.accLeft = true;break;case cc.macro.KEY.d:this.accRight = true;break;}
}

光这里设置变量属性值,也没法动起来,最终还是需要通过更新节点的位置等信息来主角动起来,这就需要用到核心的update(dt)回调方法了,通过平台的刷新机制回调update方法

update (dt) {// 根据当前加速度方向每帧更新速度if (this.accLeft) {this.xSpeed -= this.accel * dt;} else if (this.accRight) {this.xSpeed += this.accel * dt;}// 限制主角的速度不能超过最大值if (Math.abs(this.xSpeed) > this.maxMoveSpeed) {this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);}// 根据当前速度更新主角的位置this.node.x += this.xSpeed * dt;
}
2、游戏控制脚本组件(Game)

(1)主角是动了,没有星星也是无趣,那就得在随机位置生成星星了

spawnNewStar () {// 使用给定的模板在场景中生成一个新节点let newStar = cc.instantiate(this.starPrefab);// 销毁之前生成的星星节点if (this.star != null) {this.star.destroy();}// 重新指向新的星星athis.star = newStar;// 将新增的节点添加到 Canvas节点下面this.node.addChild(this.star);// 为星星设置一个随机位置this.star.setPosition(this.getNewStarPosition());// 重置计时器,根据消失时间范围随机取一个值this.startDuration = this.minStarDuration + Math.random() * (this.maxStarDuration - this.minStarDuration);this.timer = 0;}

这里有个预制资源(Prefab),通过预制资源实例化节点对象,然后再添加到场景中(addChild)

(2)星星也有了,主角也会动了,那就的开始摘起星星来了,那就是碰撞检测(这里简单通过判断星星与主角的位置距离来判定是否发生了碰撞)

update (dt) {if (this.star != null && this.getPlayerDistance() < this.star.getComponent('Star').pickRadius) {// 调用收集行为this.onPicked();return;}// 每帧更新计时器,超过限度还没有生成新的星星// 就会调用游戏失败逻辑if (this.timer > this.startDuration) {this.gameOver();return;}this.timer += dt;
}

(3)摘到星星了,不加分,摘它何用

onPicked () {// 得分this.gainScore();// 当星星被收集时,重新生成新的星星this.spawnNewStar();}gainScore () {this.score += 1;this.scoreDisplay.string = 'Score: ' + this.score;// 播放得分音效cc.audioEngine.playEffect(this.scoreAudio, false);}

这里涉及到一个音频播放,通过cc.audioEngine.playEffect可以播放指定的音频

涉及技术点总结

  • 回调函数,onLoad、onDestroy、update
  • cc.tween()缓动系统
  • 按键监听、touch监听
  • 播放音频:cc.audioEngine.playEffect
  • 预制资源Prefab
  • Label属性设置 (this.scoreDisplay.string)
  • 动画资源调用
  • 获取节点挂载的指定组件脚本对象this.node.getComponent(‘脚本文件名’).

优化点

1、主角不能超出屏幕外
2、星星不能超出屏幕外
3、得分需要有个得分特效
4、游戏嘛,不点开始游戏就游戏的游戏多少没法玩,所以得有开始游戏按钮控制开始游戏,通过游戏结束需要定住,点击开始才重新开始

完整项目源码:小游戏开发专题

这篇关于官方摘星星游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081819

相关文章

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

剑指offer(C++)--孩子们的游戏(圆圈中最后剩下的数)

题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

2024年6月24日-6月30日(ue独立游戏为核心)

试过重点放在独立游戏上,有个indienova独立游戏团队是全职的,由于他们干了几个月,节奏暂时跟不上,紧张焦虑了。五一时也有点自暴自弃了,实在没必要,按照自己的节奏走即可。精力和时间也有限,放在周末进行即可。除非哪天失业了,再也找不到工作了,再把重心放在独立游戏上。 另外,找到一个同样业余的美术,从头做肉鸽游戏,两周一次正式交流即可。节奏一定要放慢,不能影响正常工作生活。如果影响到了,还不如自

植物大战僵尸杂交版2.1版本终于来啦!游戏完全免费

在这个喧嚣的城市里,我找到了一片神奇的绿色世界——植物大战僵尸杂交版。它不仅是一款游戏,更像是一扇打开自然奥秘的窗户,让我重新认识了植物和自然的力量。 植物大战僵尸杂交版最新绿色版下载链接: https://pan.quark.cn/s/d60ed6e4791c 🌱 🔥 激情介绍:不只是游戏,更是生态课 植物大战僵尸杂交版将经典的策略塔防游戏带入了一个全新的维度。这里,每一种植物都拥

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独立(解耦)又要共享模块数据,最好的方法是有个中间平台(中间件)提供标准的接口来进行数据的交换,这在很多行业软件开发中已经广泛应用。但是,由于中间件的抽象和封

如何给MySQL设置远程访问?(官方校正版)

在现代数据驱动的世界中,数据库的灵活性和可访问性变得尤为重要。设置MySQL的远程访问不仅仅是为了方便,还为企业和开发者提供了多种优势。无论是在分布式团队协作、跨地域数据管理,还是在系统集成和实时数据访问方面,远程访问都能显著提升效率和生产力。 目录 1. 修改MySQL配置文件 2. 重启MySQL服务 3. 创建远程访问用户 4. 配置防火墙 a. 使用UFW(适用于Ubun

力扣SQL50 游戏玩法分析 IV 子查询

Problem: 550. 游戏玩法分析 IV 👨‍🏫 参考题解 这个SQL查询的目的是计算每个玩家在登录后的第二天参与活动的比例。查询使用了子查询和左连接来实现这一目的。下面是查询的详细解释,包括每个部分的作用和注释: -- 计算每个玩家登录后第二天参与活动的比例select round(avg(a.event_date is not null), 2) as fractio

Google Code Jam 2014(附官方题解)

2014年Google编程挑战赛 Problem A. Magic Trick Confused? Read the quick-start guide. Small input 6 points You have solved this input set. Note: To advance to the next rounds, you will need to s

Codeforces April Fools Day Contest 2014(附官方题解)

Codeforces2014年愚人节的坑题。。。但还是感觉挺好玩的。。。 A. The Great Game time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Two teams mee