官方摘星星游戏

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开发围棋游戏的实例代码(实现全部功能)

《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

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

如果出一个名叫白神话悟空的游戏

最近黑神话由于与原著不符引起了原著派的争议。 所以我在摸鱼的时候想到如果游科或者某个别的公司“痛改前非”不夹带私货完全复刻吴承恩百回版剧情制作一个“重走西游路”的游戏,会有一个什么样的销量?(设定为原著派已经多方渠道认证,此游戏的确没有夹带私货,绝大部分复刻了原著剧情) 游戏玩法我想了几类 超长线性有岔路蜈蚣形状地图,蜈蚣的腿部是探索区域和支线,重走西游路线,开篇就是开始取经前唐玄宗御弟cg