cocos2.x => node 属性修改

news2024/11/25 4:18:55

简介

与节点属性相关的几个核心变量_trs、_matrix、_worldMatrix、_localMatDirty、_worldMatDirty。

_trs:存储节点的position、rotation、scale

_matrix:存储节点的缩放、位移、旋转三者合一的变化矩陈(仿射矩陈)

_worldMatrix:存储节点的世界矩陈。本地矩陈与父节点的世界矩陈相乘而来

_localMatDirty:本地脏数据的标记  当你修改position、rotation、scale、anchor时会进行对应的标记。它是个二进制数表示。根据标记更新_matrix。

_worldMatDirty:当你修改节点的position、rotation、scale、anchor属性时 都会标记为true。它是个Boolean值。true 时,会重新计算时间矩阵,并所有子节点的世界矩阵也会标记为脏

这些值的初始化:


        Mat4.identity(this._matrix); //单位向量
        Mat4.identity(this._worldMatrix);//单位向量
        this._localMatDirty = LocalDirtyFlag.ALL;
        this._worldMatDirty = true;

        let trs = this._trs = spaceInfo.trs;
        trs[0] = 0; // position.x
        trs[1] = 0; // position.y
        trs[2] = 0; // position.z
        trs[3] = 0; // rotation.x
        trs[4] = 0; // rotation.y
        trs[5] = 0; // rotation.z
        trs[6] = 1; // rotation.w
        trs[7] = 1; // scale.x
        trs[8] = 1; // scale.y
        trs[9] = 1; // scale.z

position 修改

_trs: 0/1/2  索引的值

_localMatDirty:添加  ALL_POSITION

_worldMatDity:true

_renderFlag:添加 LAG_WORLD_TRANSFORM

scale 修改

_trs: 7/8/9  索引的值

_localMatDirty:添加  ALL_SCALE

_worldMatDity:true

_renderFlag:添加 FLAG_TRANSFORM

rotation 修改

_trs:3/4/5/6  索引的值

_localMatDirty:添加  ALL_ROTATION

_worldMatDity:true

_renderFlag:添加 FLAG_TRANSFORM

特殊值处理

size

size 大小变化时,只更新到临时变量

anchor  

_localMatDirty:添加  ALL_POSITION

_worldMatDity:true

_renderFlag:添加 FLAG_WORLD_TRANSFORM

本地矩陈(防射矩陈)

本地矩阵主要描述了节点的位置、旋转、缩放的三者合一的矩阵。一般用于获取节点的世界矩阵,使用本地矩阵乘以父节点的世界矩阵即可获得自己的世界矩阵。二维矩阵(绕z轴旋转)

世界矩陈

世界矩阵是通过本地矩阵乘以父节点的世界矩阵而来。世界矩阵可以把节点的局部坐标转换成世界坐标。

矩阵应用

convertToWorldSpaceAR   将节点坐标系下的一个节点转换成世界坐标系

  convertToWorldSpaceAR (nodePoint, out) {
        this._updateWorldMatrix(); //更新世界矩阵
        if (nodePoint instanceof cc.Vec2) {
            out = out || new cc.Vec2();
            return Vec2.transformMat4(out, nodePoint, this._worldMatrix);
        }
        else {
            out = out || new cc.Vec3();
            return Vec3.transformMat4(out, nodePoint, this._worldMatrix);
        }
    }

例如:节点A坐标Point 如何得到世界坐标?

const worldPoint = A.parent.convertToWorldSpaceAR(Point);

convertToNodeSpaceAR  将节点的世界坐标转换到节点坐标系下

 convertToNodeSpaceAR (worldPoint, out) {
        this._updateWorldMatrix();
        Mat4.invert(_mat4_temp, this._worldMatrix); //求世界矩阵的逆矩阵

        if (worldPoint instanceof cc.Vec2) {
            out = out || new cc.Vec2();
            return Vec2.transformMat4(out, worldPoint, _mat4_temp);
        }
        else {
            out = out || new cc.Vec3();
            return Vec3.transformMat4(out, worldPoint, _mat4_temp);
        }
    },

例如:节点A的世界坐标worldPoint ,如何得到它在父节点坐标系的坐标?

const point = A.parent.convertToNodeSpaceAR(worldPoint);

总结

  1. 节点属性(sacle、rotation)修改都需要更新自身的本地矩阵。
  2. 本地矩阵是相对于父节点的坐标系的,同时本地矩阵是缩放、旋转、位移三个矩阵合一的仿射矩阵。
  3. 世界矩阵 可以通过本地矩阵乘以父节点矩阵而来,节点坐标乘以父节点的世界矩阵即可得到世界坐标
  4. 世界逆矩阵  对世界矩阵求逆,然后把世界坐标转换成节点坐标

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

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

相关文章

linux基础命令篇:Linux基础命令讲解——文件浏览(cat、less、head、tail和grep)

Linux基础命令讲解——文件浏览(cat、less、head、tail和grep) 本文详细介绍Linux中的cat、less、head、tail和grep命令,这些命令在日常工作中非常实用,以下是关于这些命令的详细介绍: 1. cat命令:用于查看…

简明Pytorch分布式训练 — DistributedDataParallel 实践

上一次的Pytorch单机多卡训练主要介绍了Pytorch里分布式训练的基本原理,DP和DDP的大致过程,以及二者的区别,并分别写了一个小样作为参考。小样毕竟还是忽略了很多细节和工程实践时的一些处理方式的。实践出真知,今天(简…

每日面经分享(http、python)

1. http和HTTPS的区别,http的响应流程 a. 区别: i. 安全性:HTTP是明文传输数据,不提供加密保护,因此数据容易被窃听和篡改。而HTTPS使用SSL/TLS协议对数据进行加密和身份验证,提供更高的安全性。 ii. 端口…

新网站秒收录技术,新网站百度收录时间

在建立新网站后,让它尽快被搜索引擎收录是网站主最为关注的事情之一。百度作为中国最大的搜索引擎,网站被其快速收录对于增加曝光和流量至关重要。本文将介绍一些新网站秒收录技术,以及一般情况下新网站被百度收录需要的时间。 新网站秒收录技…

百度资源平台链接提交

百度资源平台是百度搜索引擎提供的一个重要工具,用于帮助网站主将自己的网站链接提交给百度搜索引擎,以便更快地被收录和展示在搜索结果中。以下将就百度资源平台链接提交的概念、操作方法以及其对网站收录和曝光的影响进行探讨: 什么是百度资…

docker-compose安装jenkins

1、环境准备:准备安装好docker的服务器一台 2、在服务器上创建一个目录用于安装Jenkins mkdir jenkins3、下载好要挂载的:maven、jkd;并将下载好的tar.gz包上传至服务器待安装目录中并解压 tar -xzvf tar -xzvf apache-maven-3.9.6-bin.tar…

最短路-Floyd Dijkstrea

Floyd算法 一种求解“多源最短路”问题的算法 在Floyd算法中,图一般用邻接矩阵存储,边权可正可负(但不允许负环),利用动态规划的思想,逐步求解出任意两点之间的最短距离 int d[N][N],初始为无穷 d[i][j…

生信数据分析——GO+KEGG富集分析

生信数据分析——GOKEGG富集分析 目录 生信数据分析——GOKEGG富集分析1. 富集分析基础知识2. GO富集分析(Rstudio)3. KEGG富集分析(Rstudio) 1. 富集分析基础知识 1.1 为什么要做功能富集分析? 转录组学数据得到的基…

设计模式6--抽象工厂模式

定义 案例一 案例二 优缺点

【2023】kafka入门学习与使用(kafka-2)

目录💻 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型: 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

QT:如何在程序密集响应时,界面不会卡住?

前因: 当调用QApplication::exec()时,就启动了QT的事件循环。在开始的时候QT会发出一些事件命令来显示和绘制窗口部件。 在这之后,事件循环就开始运行,它不断检查是否有事件发生并且把这些事件发生给应用程序的QObject。 当处理…

HarmonyOS 应用开发之FA模型绑定Stage模型ServiceExtensionAbility

本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件。 PageAbility关联访问ServiceExtensionAbility PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceAbility的方式完全相同。 import featureAbility from ohos.ability…

Git 核心知识

2024年3月30日 Git 安装 官网下载,Git 选择合适的版本,无脑下一步即可。 安装成功之后,鼠标右键任意的文件夹,会出现 Git GUI 的选项,即安装成功 安装注意事项 安装前,检查环境变量 , 如果…

自定义SpringSecurity异常格式

今天发现spring的异常格式没有跟着mvc的错误格式走,场景是用户权限的时候。查了一下原来是springsecurity定义了一组filter作用在了mvc上层,因此需要处理一下错误格式。 处理前错误返回信息如下: 由于使用了多语言,因此错误格式也…

设计模式9--单例模式

定义 案例一 案例二 优缺点

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

4月1日起,未备案App小程序将下架

关注卢松松,会经常给你分享一些我的经验和观点。 最后2天了、最后2天了。 从2024年4月1日起,工信部要求所有的APP、小程序都要备案,否则下架、关停、限制更新。这是去年8月份出的新规,没想到十个月这么快就过去了。 现在广东省…

JDK和IntelliJ IDEA下载和安装及环境配置教程

一、JDK下载(点击下方官网链接) Java Downloads | Oracle 选择对应自己电脑系统往下拉找到自己想要下载的JDK版本进行下载,我下的是jdk 11,JDK有安装版和解压版,我就直接下安装版的了。 .exe和.zip的区别&#xff1a…

链表(下)

0.上篇引入: 顺序表存在一些问题 1.顺序在插入的数据的时候数据需要进行移动势必会降低效率 2. 扩容存在性能的消耗 3.扩容会存在内存的浪费 所以引入了链表这种更好用的数据存储(由独立的节点组成) 1. 头删 2.查找 3.1指定位置之前插入…

sqli第24关二次注入

注入点 # Validating the user input........$username $_SESSION["username"];$curr_pass mysql_real_escape_string($_POST[current_password]);$pass mysql_real_escape_string($_POST[password]);$re_pass mysql_real_escape_string($_POST[re_password]);if($p…