官方摘星星游戏

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

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads