Cocos合成大西瓜案例-终

2,353 阅读2分钟

「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

欢迎关注公众号【空名先生】获取更多资源和交流!

👉前提

【最后一节】

👉实践过程

😜游戏主脚本

该脚本挂载在了背景黄图上,在开始和结束我们需要注册和解除注册点击事件。点击事件里面逻辑:

  • 1.初始化预制体
  • 2.设置位置
  • 3.随机生成球体
  • 4.右上角预览生成

具体详情可看源码中的【onClickStart】方法

注意:

UI上的脚本要想响应点击事件,必须挂载的物体上有【UITransform】,且在Canvas下

😜更新分数

【分数】节点上挂载【ScriptScore】脚本,脚本内直接开一个每秒更新一次的定时,取之前保存的分数变量即可。

但这并不满足我们,我们的显示一定要优雅,没错,优雅。

image.png

所以我们就需要用到艺术数字,这个开头我们的启动页面最大分数是先沟通的技术。

找到我们的【number.fnt】文件赋值给【Label】的【Font】,然后在代码中增加

this.schedule(()=> {
    //设置分数艺术字
    let LabelScore = this.node.getComponent(Label);
    if (LabelScore != null) {
        LabelScore.string = ScriptStatic.CurrentScore + "".toString();
    } else {
        console.log("获取文本节点为空")
    }
}, 1);

😜死亡判定

当触碰到顶部线条的时候触发。所以UI要有碰撞检测,并且需要根据事件回调进行响应处理。

我们添加【RigidBody2D】和【BoxCollider2D】,注意:要想系统能调用回调,需要激活【EnabledContactListener】,之后在脚本的【onLoad】中注册事件。代码如下:

protected onLoad() {
    let TempCollider = this.node.getComponent(BoxCollider2D);
    if (TempCollider != null) {
        console.log("死亡线注册了碰撞事件")
        TempCollider.on(Contact2DType.BEGIN_CONTACT, this.MethodColliderEnterDeath, this);
    } else {
        console.log("死亡线Collider为空")
    }
}

start() {
    // [3]
}

/**
 * 注意了  要想以上来不响应需要RigiBody2D的 Type 为静态类型 不能是默认的
 * @param selfCollider
 * @param otherCollider
 * @param contact
 * @constructor
 * @private
 */
private MethodColliderEnterDeath(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
    console.log("执行了死亡线的碰撞")
    //判断是否为最大值保存分数
    let MaxScore = localStorage.getItem(ScriptStatic.MaxScore);
    if (MaxScore != null) {
        //利用Number() 将字符串转为 number 可以对比大小
        if (Number(MaxScore) < ScriptStatic.CurrentScore) {
            localStorage.setItem(ScriptStatic.MaxScore, ScriptStatic.CurrentScore + "");
        }
    }
    //展示死亡界面
    if (this.NodeDeath != null) {
        this.NodeDeath.setPosition(0, 0, 0);
    } else {
        console.log("死亡界面为空")
    }
    //禁止背景再有点击响应
    if (this.NodeBg != null) {
        let TempScript = this.NodeBg.getComponent(ScriptGame);
        if (TempScript != null) {
            console.log("取消了点击事件");
            // this.NodeBg.off(Node.EventType.TOUCH_START, TempScript.onClickStart, this);
            TempScript.IsDeath=false;
        } else {
            console.log("获取的脚本为空")
        }
    } else {
        console.log("死亡界面为空")
    }
}

至此,我们的整个开发流程结束。

下一篇文章小空分享在不同平台【微信QQ,字节抖音系,,百度等】发布成品并上架。

下下一篇小空带你利用广告系统增强游戏玩法,并且用广告来获取收益。

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:芝麻粒儿 的个人主页 - 专栏 - 掘金 (juejin.cn)

📢欢迎点赞👍收藏🌟留言📝