一文带你彻底明白如何实现动态添加子节点及修改子节点属性

?

终于看完了官方的教程,开始用 Cocos Creator 做第一个游戏——《消灭病毒-重力版》(PS:等做完之后会出一个完整的教程,敬请期待┗( ▔, ▔ )┛!),可是第一步就遇到了坑,本来想动态的通过预制件来添加病毒节点,并修改病毒的血量,可是添加节点之后无论如何都不能对节点的属性进行修改,查了半天资料原来是没有获取子节点的组件,白白浪费了两个小时,这就是自学的弊端吧,有一个好的老师真的是太重要了!为了让大家少走弯路,今天写一个 Demo 来教大家如何实现动态添加子节点及修改子节点属性。

1.首先在场景中添加一个 Sprite 节点,添加上对应的纹理:

2.在资源管理器目录中添加两个 JS 文件:

3.先编辑 star.js 文件脚本如下,给 star 添加血量属性:

/** * star.js */cc.Class({    extends: cc.Component,?    properties: {        blood:10    // 血量属性    },?    // LIFE-CYCLE CALLBACKS:?    // onLoad () {},?    start () {?    },?    // update (dt) {},});

4.编辑好 star.js 后将脚本挂载到 star 节点上:

5.将挂载好脚本组件的 star 节点拖到资源管理器的 prefabs 目录下后就可以在层级管理器中删掉 star 节点了:

6.接下来编辑 game.js 脚本,首先在属性中添加预制件属性,之后就可以动态添加子节点并设置子节点属性了(PS:修改子节点属性时千万不要忘记先通过 getComponent( ) 获取子节点的脚本组件。):

/** * game.js */cc.Class({    extends: cc.Component,?    properties: {        StarPrefab: {            default: null,            type: cc.Prefab        }    },?    // LIFE-CYCLE CALLBACKS:?    // onLoad () {},?    start() {        //动态生成新的子节点并设置位置        var star_1 = cc.instantiate(this.StarPrefab);        this.node.addChild(star_1);        star_1.setPosition(100,100);?        //获取新生成的子节点的属性并修改        console.log("blood:"+star_1.getComponent(‘star‘).blood);        star_1.getComponent(‘star‘).blood = 100;        console.log("blood:"+star_1.getComponent(‘star‘).blood);    },?    // update (dt) {},});

7.接下来将编辑好的 game.js 后将脚本挂载到 Canvas节点上,并将 star 预制件拖到对应属性位置:

8.之后就可以预览了,可以看到已经成功动态地添加了 star 节点,并将 star 节点 blood 属性从 10 修改成了 100:

结束语:

自学的路上必定充满艰辛,愿大家早日找到适合自己的学习方法,实现自己的游戏梦!



我是「Super于」,立志做一个每天都有正反馈的人!

原文地址:https://www.cnblogs.com/yu97271486/p/11302455.html

时间: 2024-08-07 09:38:07

一文带你彻底明白如何实现动态添加子节点及修改子节点属性的相关文章

一文带您了解5G的价值与应用

一文带您了解5G的价值与应用 5G最有趣的一点是:大多数产品都是先有明确应用场景而后千呼万唤始出来.而5G则不同,即将到来的5G不仅再一次印证了科学技术是第一生产力还给不少用户带来了迷茫——我们为什么需要5G?本文将带大家了解5G的价值. 1. 什么是5G? 5G之前还有4G.3G.2G.1G,每一次技术革对于生活都有显著的影响.1G时代只能打电话:2G时代网速虽然缓慢,但却衍生出了打电话之外的功能,这一步是从0到1的变革:3G时代能做的事情已经很多了,文字图片传输均不在话下:4G时代即现在,除

【转帖】一文带你认识微内核

华为“鸿蒙”所涉及的微内核到底是什么?一文带你认识微内核 http://www.itpub.net/2019/07/19/2461/ 广告 微内核 最近微内核的概念常常被大家提及,同时还有Google Fuchisa这样的微内核新星,这里让我们一起来认识下微内核吧. 背景庞大的UNIX家族 计算机技术在二战后快速发展,构成计算机的主要基本单元从电子管发展到分立晶体管,再到后来的大规模集成电路.随着计算机技术发展,计算机性能越来越强劲,硬件越来越复杂,人们发现很难去直接管理计算机了,于是人们开始设

一文带你全面了解RxJava

工作需要,刚好在学习 RxJava网络请求框架,网上搜了一些 关于RxJava 的教程,但都并不是很好理解,所幸最后找到了几篇有助于初学者了解 RxJava 的文章,于是结合自己的理解,重新整理成一篇发给大家,希望通过我的咀嚼,能够帮助大家更快的了解和上手 RxJava,话不多说,进入正文吧! 1.什么是RxJava? Rx是Reactive Extensions的简写,翻译为响应的扩展.也就是通过由一方发出信息,另一方响应信息并作出处理的核心框架代码.? 该框架由微软的架构师Erik Meij

一文带你了解 C# DLR 的世界

一文带你了解 C# DLR 的世界 在很久之前,我写了一片文章dynamic结合匿名类型 匿名对象传参,里面我以为DLR内部是用反射实现的.因为那时候是心中想当然的认为只有反射能够在运行时解析对象的成员信息并调用成员方法.后来也是因为其他的事一直都没有回过头来把这一节知识给补上,正所谓亡羊补牢,让我们现在来大致了解一下DLR吧. DLR 全称是 Dynamic Language Runtime(动态语言运行时).这很容易让我们想到同在C#中还有一个叫 CLR 的东西,它叫 Common Lang

Nginx系列教程(三)| 一文带你读懂 Nginx 的负载均衡

作者:JackTian 微信公众号:杰哥的IT之旅(ID:Jake_Internet) LAMP 系列导读 01. LAMP 系列教程(一)| 详解 Linux 环境下部署 HTTPD 服务 02. LAMP 系列教程(二)| 如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点? 03. LAMP 系列教程(三)| 一文读懂 HTTPD 服务的访问控制 04. LAMP 系列教程(四)| MySQL 数据库系统(一) 05. LAMP 系列教程(五)| MySQL 数据

JS创建一个元素节点, 并把该节点添加为文档中指定节点的子节点

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <titl

可视化webpart基础开发——利用事件接收器实现同步操作两个文档库(添加、删除、修改文档)

可视化webpart基础开发——利用事件接收器实现同步操作两个文档库(添加.删除.修改文档) 分类: SharePoint2012-01-18 18:02 1189人阅读 评论(0) 收藏 举报 文档propertiesstringurl测试web 1.测试文档库(Doclib1.Doclib2): 增加一栏“测试栏1”. 2.新建“可视化web部件项目”,添加“解决方案资源管理器”里边选中项目右键“添加”-“新建项”-"事件接收器“ 如图操作,选择”列表项事件“和”文档库“集相应处理事件 实现

MFC 单文档中动态添加菜单项和响应菜单事件

新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_NEWMENU        WM_USER+101 操作工具栏和状态栏 使用GetDescendantWindow函数获取工具栏和状态栏的指针 为ID_HIDE添加消息映射,编辑代码如下 static bool m_Hide=false; m_Hide=!m_Hide; //获取工具栏指针 CWnd

java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = DocumentHelper.parseText(xmlStr); // XML转字符串 Document document = ...; String text = document.asXML(); //这里的XML DOCUMENT为org.dom4j.Document 二.读取XML文档节点: pack