【Cocos新手进阶】使用cocos 的预制体创建动态的滚动框组件。

news2025/2/25 21:22:01

本篇文章主要讲解,使用cocos 游戏引擎制作动态生成的滚动框实例教程。
日期:2023年11月1日
作者:任聪聪
引擎版本:2.4.3 至 2.4.11

关于预制体的说明和概念

cocos中的预制体的作用是能够让你使用数据的形式进行控制界面的变化,同时可以对界面中的相关动态元素进行绑定,在界面中显示相对应的动态变化。

在开发的过程中,可以将单个做好的组件变为预制体,这可以在未来的开发和修改过程中让自己更为事半功倍的进行二次的开发和修改工作,避免一个个界面和场景进行修改。只需要在其他场景中引用预制体即可。

实际效果:

效果说明:不需要手动进行创建,cocos引擎自动加载数据创建一个动态的界面。
在这里插入图片描述

一、打开我们的cocos dashboard 创建一个空项目命名为 preFabDemo

步骤一、打开后进入到如下界面,找到顶部的新建项目如下图。

在这里插入图片描述

步骤二、点击新建项目后,进入如下界面。

在这里插入图片描述
提示说明:选择指定的版本并在左下方项目名称处,修改项目名称为“preFabDemo ” 点击创建并打开。

二、构建一个页面并创建相对应的脚本及预制体的声明

步骤一、找到资源管理器,右键assets,选择scene,如下图。

在这里插入图片描述

步骤二、将页面名命名为home,如下图。

在这里插入图片描述

步骤三、创建一个home同名的ts脚本如下图:

在这里插入图片描述
说明:方法一致都是点击assets右键菜单中选择。

步骤四、双击打开home的ts脚本,修改脚本类名如下图

在这里插入图片描述
修改为 home 。
在这里插入图片描述
提示:创建完其他的脚本也需要进行修改不然会报错喔。

步骤五、构建home界面的相关功能组件。

组件一、动态显示item信息的滚动框

操作说明:在home界面中创建一个滚动框组件如下图,拖拽到画布中即可。
在这里插入图片描述

组件二、修改content中的lable为:item_label_obj

在这里插入图片描述
修改后:
在这里插入图片描述

步骤六、创建item_label_obj 的ts脚本 如下:

在这里插入图片描述

步骤七、点击home 的页面文件,回到home 的界面中,对界面的滚动框和item进行自适应的调整

详细操作教程见:【Cocos新手入门】 cocos creator 制作 scrollview 实现子节点自适应增加content高度的方法

步骤八、给 item_label_obj 组件添加上脚本关联,如下图:

在这里插入图片描述
然后,将组件进行关联label:
在这里插入图片描述
构建 item_label_obj.ts的代码如下:

const {ccclass, property} = cc._decorator;

@ccclass
export default class item_label_obj extends cc.Component {

    @property(cc.Label)
    label: cc.Label = null;

    /**
     * onLoad 
     */
    protected onLoad(): void {
 
    }
    /**
     * 初始化
     * @param data 
     */
    public createdPre(data: { title: string }) {
        console.log(data);
        this.label.string = "我是第:"+data.title+"个,预制体。";
        //给label 注册事件监听
        this.node.on(cc.Node.EventType.TOUCH_END, this.click_info_log, this);
    }
 
    /**
     * 事件监听
     */
    protected click_info_log() {
        console.log(`成功点击:[${this.label.string}]`);
    }
}



步骤九、选中做好的 item_label_obj ,并拖拽到底部,将其编程预制体。

在这里插入图片描述
完成效果说明:
在这里插入图片描述

步骤十、在home脚本中创建和声明预制体、预制体的父级节点,及引入预制体脚本和生成预制体的代码。


import item_label_obj from "./item_label_obj";

const {ccclass, property} = cc._decorator;

@ccclass
export default class home extends cc.Component {

    @property({
        type: cc.Prefab,
        displayName: "预制体对象"
    })
    protected preItemObj: cc.Prefab = null;
 
    @property({
        type: cc.Node,
        displayName: "预制体父节点"
    })
    
    protected preItemObjParent: cc.Node = null;
 
    protected preData: Array<{ title: string}> = [];
 
    protected onLoad(): void {
        let temporaryData = null;
        let num = 0;
        //循环生成60个预制组件数据
        for (let i = 0; i < 60; i++) {
            temporaryData = {
                title: ""
            };
            temporaryData.title = `${++num}`;
            this.preData.push(temporaryData);
        }
        //根据数组情况批量创建预制体
        let length = this.preData.length;
        for (let i = 0; i < length; i++) {
            let prefabricatedObject = cc.instantiate(this.preItemObj);
            prefabricatedObject.parent = this.preItemObjParent;
            //初始化预制体对象并执行
            prefabricatedObject.getComponent(item_label_obj).createdPre(this.preData[i]);
        }
    }
}

完成后回到cocos dashboard 中,将组件的层级进行拖拽管理,具体事宜如下。
在这里插入图片描述

步骤十二、点击canvas 创建用户组件,关联脚本。

在这里插入图片描述
而后,将预制体对象进行关联,如下图:
在这里插入图片描述
而后再将父节点进行关联,如下图:
在这里插入图片描述

三、运行代码并优化item的样式

运行后,发现效果很差,如下图:
在这里插入图片描述
这是要由于没有做样式或者样式不对导致的,解决办法如下:
在这里插入图片描述
将content中的配置,按红框中的layout进行配置即可自适应增加高度。

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

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

相关文章

阿里云双11活动正式启动,2核2G云服务器1年99元,新老用户均同享!

2023年阿里云双11活动已经正式启动了&#xff0c;这次阿里云可算是拿出了十足的诚意&#xff0c;推出了一款特价云服务器&#xff0c;2核2G3M云服务器1年99元&#xff0c;续费不涨价&#xff0c;新老用户同享&#xff01; 一、阿里云双十一活动入口 活动地址&#xff1a;传送门…

Aigtek的ATA-8000射频功率放大器对比进口品牌TC

一、公司介绍 中国安泰&#xff1a;西安安泰电子科技有限公司是国内专业从事测量仪器研发生产和销售的高科技企业&#xff0c;公司依托西安交大、西北工业大学组建的科研团队&#xff0c;专注功率放大器、功率信号源等产品为核心的相关行业测试解决方案的研究&#xff0c;拥有国…

【Leetcode】【消失的数字】【C语言】

方法一&#xff1a;按位异或&#xff08;找单身狗&#xff09; 我们知道&#xff1a;按位异或^操作原则&#xff1a;相同为零&#xff0c;相异为一 所以 0^aa a ^a0 a ^bb ^a int missingNumber(int* nums, int numsSize){ int i 0; int tem1 0,tem20; for (i 0;i < nu…

打字练习软件 Type Fu mac中文版技能介绍

Type Fu mac是一款打字练习和提高打字速度的应用程序。它旨在帮助用户通过练习键盘打字&#xff0c;提高打字准确性和速度。无论您是初学者还是想要提高打字技能的专业人士&#xff0c;Type Fu都是一个很好的选择&#xff01; Type Fu mac采用了一种互动&#xff0c;游戏化的方…

Xshell复制粘贴(Ctrl+C,Ctrl+V)配置

文章目录 Xshell复制粘贴&#xff08;CtrlC&#xff0c;CtrlV&#xff09;配置一、复制二、粘贴 Xshell复制粘贴&#xff08;CtrlC&#xff0c;CtrlV&#xff09;配置 在使用Windows一般使用ctrlc&#xff0c;ctrv实现粘贴复制&#xff0c;通过Xshell连接Linux时&#xff0c;可…

NI USB9218国产对标51.2 kS/s/ch,2通道C系列通用模拟输入模块

51.2 kS/s/ch&#xff0c;2通道C系列通用模拟输入模块 NI‑9218专为多用途测量而设计。 它使用针对特定测量的适配器提供了对加速度计、供电传感器、全桥和电压测量以及四分之一桥、半桥、60V和电流测量的内置支持。 每个通道可单独选择&#xff0c;因而用户可在各个通道上进行…

蚂蚁SOFA Stack融合大模型发布升级版 将为机构产研效能提升30%

11月1日&#xff0c;在云栖大会上&#xff0c;蚂蚁集团正式发布CodeFuse全面加持的SOFAStack5.0升级版本&#xff0c;向企业提供全方位研发运维智能助手相关能力。这是继蚂蚁集团在外滩大会发布代码大模型CodeFuse之后&#xff0c;首次公布面向行业的商业化产品进展。 “大模型…

vue实现购物车案例

要求 可以进行购物车水果删除可以进行水果数量增减可以进行总价计算、购物车商品计算选中所有水果也会一同勾选全选框&#xff0c;全选框勾选也能选中所有水果可以记录购物车状态&#xff0c;当页面关闭后重新打开可以看到原先的购物车数据 功能代码 <!DOCTYPE html>…

【ELFK】之Filebeat

一、Filebeat介绍 1、Filebeat是什么&#xff1f; Filebeat适用于转发和集中数据的轻量级传送工具&#xff0c;Filebeat监视了指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将他们转发到Elasticsearch或Logstash进行索引。 **Filebeat的工作方式&#xff1a;*…

【Java数据结构重点知识】第三节:认识包装类和泛型

目录 一&#xff1a;包装类 1.什么是包装类 2.装箱和拆箱 3.一个经典面试题 二&#xff1a;泛型 1.什么是泛型 2.语法 3.使用 4.泛型是如何编译的 5.泛型的上界 一&#xff1a;包装类 1.什么是包装类 &#xff08;1&#xff09;概念&#xff1a;在Java中&#xff0…

Leetcode刷题---多数元素(计数、哈希表、摩尔投票)

题目描述&#xff1a; 思路一&#xff1a; 可以使用暴力破解来解决此问题&#xff0c;但是暴力破解的时间复杂度很高&#xff0c;在leetcode测试的时候爆出来超出时间限制的问题。 代码&#xff1a; class Solution {public int majorityElement(int[] nums) {int nnums.leng…

野指针成因与避免方法

野指针 定义&#xff1a;指针指向的位置是不可知的&#xff08;随机的&#xff0c;不正确的&#xff0c;没有明确限制的&#xff09; 一、野指针的成因 1、指针未初始化 #include <stdio.h>int main(void) {// 定义一个未初始化的指针并赋值int* p; *p 5;// 打印输出指…

compileSdkVersion, minSdkVersion,targetSdkVersion的区别

minSdkVersion : 主要用于安卓系统环境校验。开发人员觉得满足app最佳正常运行的最低安卓环境版本&#xff0c;如果安卓系统低于设置的minSdkVersion将无法安装。 targetSdkVersion: 主要用于安卓系统环境校验。开发人员觉得满足app最佳正常运行的最高安卓环境版本&#xff0c…

SwiftUI 如何为文件和图片加入便捷的快速预览功能

功能需求 在 SwiftUI 开发的 App 中,我们有时需要以快速预览(QuickLook)的方式向用户展示文件内容,自己动手去处理上百种文件类型的预览是不现实的。 如上图所示:我们在 SwiftUI 中实现了任意文件的快速预览,这是如何完成的呢? 在本篇博文中您将学到如下内容: 功能需…

资源管理命令-陈述式

资源管理介绍 资源管理概念 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 //kubernetes的本质就是一个集群系统&#xff0c;用户可以在集群中部署各种服务&#xff0c;起始就是在kubernetes集群中运行一个个容器&am…

网络爬虫——urllib(5)

前言&#x1f36d; ❤️❤️❤️网络爬虫专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Python网络爬虫_热爱编程的林兮的博客-CSDN博客 上一篇我们讲解有关ajax的相关案例&#xff0c;下面我们来学习新的关于ur…

开发小程序需要多少钱?

随着移动互联网的快速发展&#xff0c;小程序已经成为了企业、个人创业者获取用户、提升品牌影响力的重要工具。然而&#xff0c;对于许多初次接触小程序的人来说&#xff0c;开发小程序需要多少钱&#xff0c;是他们最关心的问题。 首先我们需要明确的是&#xff0c;开发小程…

AI技术发展:防范AI诈骗,守护数字安全

随着AI技术的迅猛发展&#xff0c;人工智能赋予了计算机更多的能力&#xff0c;包括自然语言处理、图像生成、声音合成等。这些领域的突破为人们提供了全新的体验和便捷&#xff0c;但同时也催生了一些潜在的安全风险&#xff0c;其中最突出的就是AI诈骗。本文将探讨如何防范AI…

echarts 地图迁徙与地图下钻

echarts 地图迁徙与地图下钻 一、迁徙 1、引入中国地图数据及echarts const china require("./echarts-mapJson-master/china.json") import * as echarts from echarts2、数据准备 // 点数据 需要hover或点击获取数据可以添加额外的参数&#xff0c; // 如{ val…

前端开发必知:HTML、Vue和React中的跨域页面跳转解决方案

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…