飞机打方块(四)游戏结束

news2024/9/21 23:52:53

一、游戏结束显示

1.新建节点

1.新建gameover节点

2.绑定canvas

3.新建gameover容器

 4.新建文本节点

2.游戏结束逻辑 

Barrier.ts

update(dt: number) {
        //将自身生命值取整
        let num = Math.floor(this.num);
        //在Label上显示
        this.num_lb.string = num.toString();

        //获取GameController脚本
        let gc = cc.find("Canvas").getComponent("GameController");

        //自身移动
        if (gc.is_barrier_move == true) {
            this.node.y -= dt * this.speed;
        }
        //获取canvas节点
        let canvas = cc.find("Canvas");
        //如果自身到了屏幕最下方
        if (this.node.y <= -(canvas.height / 2)) {
            //获取GameController脚本
            let gc = cc.find("Canvas").getComponent("GameController");
            //调用游戏结束函数
            gc.gameover()
        }
    }

 GameController.ts

 @property({ type: cc.Node, displayName: "游戏结束时显示的节点", tooltip: "游戏结束时显示的节点" })
    gameover_UI: cc.Node = null;

//破纪录文字节点,如果复活将删除原有破纪录节点
    lb: cc.Node = null;

    //显示最终分数的文字
    ultimately_score_lb: cc.Label = null;



onLoad() {

        cc.game.setFrameRate(90)

        //恢复游戏,避免游戏暂停导致无法继续
        cc.director.resume();

        //给Canvas绑定事件
        this.canvas.on(cc.Node.EventType.TOUCH_MOVE, this.onMove, this)


        //开启碰撞引擎
        let manager = cc.director.getCollisionManager();
        manager.enabled = true;
        //如果要调试
        if (this.is_debug == true) {
            // 是否绘制碰撞组件的形状,默认为不绘制
            manager.enabledDebugDraw = true;
            //是否绘制碰撞组件的包围盒,默认为不绘制
            manager.enabledDrawBoundingBox = true;
        }
        //创建障碍物
        this.create_barrier();
        this.cre_bar_f = (this.barrier_height / this.barrier_speed) + Math.random() * this.generation_interval;


        //生成显示最终得分的文字
        let score_lb = new cc.Node;
        score_lb.parent = this.gameover_UI.children[0];
        score_lb.addComponent(cc.Label)
        score_lb.getComponent(cc.Label).string = "最终得分:" + Math.floor(this.score);
        score_lb.getComponent(cc.Label).overflow = cc.Label.Overflow.SHRINK;
        this.ultimately_score_lb = score_lb.getComponent(cc.Label);
        score_lb.color = cc.color(0, 0, 0, 255);

    }


 //游戏结束函数
    gameover() {
        //打印log
        cc.log("游戏结束");
        //将游戏暂停
        cc.director.pause();
        //显示游戏结束的UI
        this.gameover_UI.active = true;
        //隐藏飞机
        this.plane.active = false;


        //更新最终分数
        this.ultimately_score_lb.string = "最终得分:" + Math.floor(this.score);
        //获取历史最高分
        let score = cc.sys.localStorage.getItem("score");
        //如果破纪录了,更新历史最高分
        if (this.score > score) {
            cc.sys.localStorage.setItem("score", this.score);
            cc.log("破纪录了");

            //生成显示破纪录的文字
            let lb = new cc.Node;
            lb.getComponent(cc.Label);
            lb.getComponent(cc.Label).string = "破纪录了";
            lb.color = cc.color(0, 0, 0, 255);
            lb.parent = this.gameover_UI.children[0];

            //获取破纪录文字节点
            this.lb = lb;
        }
        //隐藏所有特殊按钮
        this.special_btn.active = false;
    }

2.复活按钮 

1.新建button按钮节点,绑定按钮事件 

GameController.ts

 @property({ type: cc.Node, displayName: "复活按钮", tooltip: "复活按钮,点击一次复活按钮将隐藏" })
    btn_resurgence: cc.Node = null



//复活函数
    resurgence() {
        //恢复暂停的场景
        cc.director.resume();
        //关闭游戏结束时显示的UI
        this.gameover_UI.active = false;
        //移除所有障碍物,如果不移除,游戏将再次结束
        this.remove_all_barrier();
        //显示飞机
        this.plane.active = true;
        //隐藏复活按钮
        this.btn_resurgence.active = false;
        //显示所有特殊按钮
        this.special_btn.active = true;
        //销毁破纪录文字节点
        this.lb.destroy()
    }

 2.绑定canvas

 

复活一次后

 

3.重玩按钮 

1.新建button按钮节点,绑定按钮事件 

GameController

//重新开始游戏函数
    reply(){
        cc.director.loadScene("Game")
    }

4.返回开始界面按钮 

1.新建button按钮节点,绑定按钮事件 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构—队列

队列 队列的概念及结构队列的实现 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 。 入队列&#xff1a;进行插入操作的一端称为队尾。 出队列&am…

Day8 智慧商城

项目演示 项目收获 创建项目 调整初始化目录 1.删components里的所有文件 2.删views里的所有文件 3.router/index.js 删路由 删规则 import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({routes: [] })export default route…

软件开发合同范本word文档,《某公司软件开发合同》,15页范本供参考

上一篇介绍了软件生命周期全过程&#xff0c;软件工程全周期全过程20项文档模板&#xff0c;附下载。从《合同》到《需求规格说明书》到软件设计、开发、实施、验收、维护等全过程相关文档模板。有朋友反馈附件内容没有补全&#xff0c;本次及后续会用实际案例补全附件内容&…

Backblaze 2023 Q2 硬盘故障质量报告解读

Backblaze 在其博客上发布了 2023 年第二季度的存储设备统计数据。这些数据包括了 Backblaze 在该季度所拥有的存储设备的数量、故障率和更换率等信息&#xff0c;这些信息对于了解存储设备的可靠性和性能非常有用。 在最新的Backblaze硬盘使用统计报告中&#xff0c;我们看到了…

OLED透明屏介绍:领先科技的革命性创新

OLED透明屏作为一项领先的科技创新&#xff0c;在产品设计和用户体验方面展现出了巨大的潜力。 在这篇文章中&#xff0c;尼伽将介绍OLED透明屏的定义、特点、应用领域以及未来发展趋势&#xff0c;以帮助您全面了解OLED透明屏。 一、OLED透明屏的定义与原理 1.1 定义&#x…

概念解析 | 走进射线管积分:探索数学与现实世界的神秘桥梁

注1&#xff1a;本文系“概念解析”系列之一&#xff0c;致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是&#xff1a;射线管积分。 走进射线管积分&#xff1a;探索数学与现实世界的神秘桥梁 射线管积分雷达成像 射线管积分&#xff08;Ray Tube Integration&a…

leetcode 188. 买卖股票的最佳时机 IV

2023.8.21 这道题是 买卖股票的最佳时机III 的升级版&#xff0c;即买卖次数限制为k次&#xff0c;做法和上一篇如法炮制&#xff0c;直接看代码&#xff1a; class Solution { public:int maxProfit(int k, vector<int>& prices) {vector<vector<int>>…

Django模板语法,带你快速入门

目录 案例一&#xff1a;登录页面 案例二&#xff1a;for案例 if案例——单个字符串的传递&#xff0c;列表的传递&#xff0c;字典的传递 模板语法其本质&#xff1a;本质上&#xff0c;Django的模板语法就是在html中&#xff0c;写一些占位符&#xff0c;由数据对这些占位符…

6.824 lab2 raft实现

目录 1 难点及完成思路&#xff1a; 1.1 难点分析&#xff1a; 1.2 完成思路&#xff1a; 1.3 实验心得&#xff1a; 1.4 报告结构&#xff1a; 2 Leader选举模块 2.1 思路概括&#xff08;代码角度&#xff09; 2.2 注意问题&#xff1a; 2.3 代码细节&#…

[WMCTF 2023] crypto

似乎退步不了&#xff0c;这个比赛基本不会了&#xff0c;就作了两个简单题。 SIGNIN 第1个是签到题 from Crypto.Util.number import * from random import randrange from secret import flagdef pr(msg):print(msg)pr(br"""........ …

WMS仓库管理系统选择指南:如何确保您的仓库提高效率?

如何选择WMS仓库管理系统&#xff1f;仓库管理主要包括以下四个方面&#xff1a; 1.商品出入库管理 2.库存调拨 3.库存盘点 4.虚拟库存/实际库存管理 为了更好地管理仓库&#xff0c;我们需要确保基本的硬件设施得以满足&#xff0c;例如划分存储区域、使用货架以及进行员工培训…

Vivado2018.3版本_编译下载打包固化程序

Vivado2018.3版本_编译下载打包固化程序 概述&#xff1a; 在Vivado中开发导出硬件平台&#xff0c;然后在SDK中进行C语言的开发工作&#xff0c;然后把SDK编译生成的.elf文件加入Vivado工程中&#xff0c;编译生成.bit文件&#xff0c;转换成.mas文件&#xff0c;就可以固化到…

使用kubeadm工具升级kubernetes

一、背景&#xff1a; kubeadm部署的kubernetes集群进行升级&#xff0c;通常先升级控制节点&#xff0c;控制节点升级完成后再升级工作节点&#xff0c;本博文只升级了控制节点&#xff0c;工作节点按照相同的流程进行升级即可 环境说明&#xff1a; 主机名节点11.0.1.200k8s…

机器学习笔记之优化算法(十五)Baillon Haddad Theorem简单认识

机器学习笔记之优化算法——Baillon Haddad Theorem简单认识 引言 Baillon Haddad Theorem \text{Baillon Haddad Theorem} Baillon Haddad Theorem简单认识证明过程证明&#xff1a;条件 1 ⇒ 1 \Rightarrow 1⇒ 条件 2 2 2证明&#xff1a;条件 3 ⇒ 3 \Rightarrow 3⇒条件 1…

功率放大器的介绍和应用领域有哪些

功率放大器是将输入信号的功率放大到输出端所需水平的一种电子设备。在实际应用中&#xff0c;功率放大器被广泛使用于音频、视频、通讯等领域。下面&#xff0c;安泰电子将详细介绍功率放大器的工作原理、类型以及应用领域。 功率放大器的工作原理是将输入信号的功率放大到输出…

js 简单的页面导航

实现效果&#xff1a; 实现原理&#xff1a; 实现原理是通过创建数组里面包含对应页面的信息&#xff0c;当点击的时候为数组传递一个对象&#xff0c;里面包含要显示的信息。 跳转链接实现原理&#xff1a; 通过创建一个数组&#xff0c;里面包含所有可以跳转的页面链接名称&a…

【3Ds Max】可编辑多边形“边界”层级的简单使用

目录 示例 &#xff08;1&#xff09;挤出 &#xff08;2&#xff09;插入顶点 &#xff08;3&#xff09;切角 &#xff08;4&#xff09;利用所选内容创建图形 &#xff08;5&#xff09;封口 &#xff08;6&#xff09;桥 示例 这里我们首先创建一个长方体&#xff…

3D角色展示

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>3D卡片悬停</title><style>font-face {font-family: "Exoct";src: url("htt…

解决群晖视频信息插件无法同步的问题

今天发现群晖下载的电影和电视剧没办法显示图片和相关信息&#xff0c;开始以为是升级了什么东西导致的&#xff0c;后来发现api.themoviedb.org 这个API接口ping都没法ping通&#xff0c;估计被墙了。好吧&#xff0c;重新登陆群晖修改hosts文件吧。下面一步一步来讲讲如何修改…

Adobe联创去世,没他就没有PDF,乔布斯也因他逆风翻盘

量子位 | 公众号 QbitAI Adobe联合创始人John Warnock去世了&#xff0c;享年82岁。 他是PDF格式的发明人之一&#xff0c;贡献了PDF中的核心技术PostScript—— 如果没有它&#xff0c;打印机就无法打印复杂页面。可以说&#xff0c;Warnock的这项发明&#xff0c;在上世纪…