3D建模

A collection of 1736 posts
3D建模

Cocos2d-x:精灵的控制

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 精灵的控制 在创建完精灵后,现在你能试着修改精灵的属性去控制它了。 创建精灵: auto mySprite = Sprite::create("mysprite.png"); 锚点 锚点确定了精灵对象在计算坐标位置的一个基准点,这个点是精灵内部的点,锚点影响精灵的缩放,旋转,倾斜这种转换,不影响颜色,透明度这种属性。锚点使用的坐标系以左下角为原点 (0, 0),在你设置锚点的值时,要注意到这一点。默认情况下,所有的节点对象锚点是 (0.5, 0.5)。 设置锚点: // DEFAULT anchor point for all Sprites mySprite->setAnchorPoint(0.5, 0.5); // bottom left mySprite->setAnchorPoint(
5 min read
3D建模

Cocos2d-x:使用精灵缓存

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 使用精灵缓存 精灵缓存是 Cocos2d-x 为了提高精灵的访问速度,提供的一个精灵的缓存机制。 我们可以创建一个精灵并把精灵放到精灵的缓存对象 SpriteFrameCache 中: // Our .plist file has names for each of the sprites in it. We'll grab // the sprite named, "mysprite" from the sprite sheet: auto mysprite = Sprite::createWithSpriteFrameName("mysprite.png"); 相对的,我们也可以从精灵的缓存对象 SpriteFrameCache 访问一个精灵,访问方法是先从缓存对象中获取对应的 SpriteFrame,然后从 SpriteFrame创建精灵,方法: // this
1 min read
3D建模

Cocos2d-x:使用图集

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 使用图集 图集(Sprite Sheet) 是通过专门的工具将多张图片合并成一张大图,并通过 plist 等格式的文件索引的资源,使用图集比使用多个独立图像占用的磁盘空间更少,还会有更好的性能。这种方式已经是游戏行业中提高游戏性能的标准方法之一。 在使用图集时,首先将其全部加载到 SpriteFrameCache 中,SpriteFrameCache 是一个全局的缓存类,缓存了添加到其中的 SpriteFrame 对象,提高了精灵的访问速度。SpriteFrame 只加载一次,后续一直保存在 SpriteFrameCache 中。 示例: 单看这个图集,似乎很难分析出什么,让我们对比一下: 这就很容易看出来,它至少完成了将多个图像素材合为一个,同时减少了磁盘空间占用。 继续来看如何在代码中使用。 加载图集 获取到 SpriteFrameCache 的实例,把图集添加到实例中。 // load the Sprite Sheet auto spritecache = SpriteFra
2 min read
3D建模

Cocos2d-x:精灵的创建

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 精灵的创建 可以使用一张图像来创建精灵,PNG, JPEG, TIFF, WebP, 这几个格式都可以。当然也有一些其它的方式可以创建精灵,如使用 图集 创建,通过 精灵缓存 创建,我们会一个一个的讨论。本节介绍通过图像创建精灵。 使用图像创建 Sprite 能用一个特定的图像去创建: auto mySprite = Sprite::create("mysprite.png"); 上面直接使用了 mysprite.png 图像来创建精灵。精灵会使用整张图像,图像是多少的分辨率,创建出来的精灵就是多少的分辨率。比如图像是 200 x 200,Sprite 也是 200 x 200。 使用矩形 上一个例子,精灵和原始图像的尺寸一致。但是如果你想创建一个尺寸只有原始图像一部分的精灵,那你可以在创建的时候指定一个矩形,
2 min read
3D建模

Cocos2d-x:日志输出

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 日志输出 有时,在你的游戏正在运行的时候,为了了解程序的运行过程或是为了查找一个 BUG,你想看到一些运行时信息,可以! 这个需求引擎已经考虑到了,使用 log() 可以把信息输出到控制台,这样使用: // a simple string log("This would be outputted to the console"); // a string and a variable string s = "My variable"; log("string is %s", s); // a double and a variable double dd = 42; log(
1 min read
3D建模

Cocos2d-x:节点关系

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 节点关系 Cocos2d-x 的 节点关系,是被附属和附属的关系,就像数据结构中的父子关系,如果两个节点被添加到一个父子关系中,那么父节点的属性变化会被自动应用到子节点中。想一下处于父子关系中的精灵有什么特性。 这三个精灵被添加到了一个父子关系中,当父精灵(被其它精灵附属的精灵)设置了旋转角度之后,子精灵也会自动做同样的改变: auto myNode = Node::create(); // rotating by setting myNode->setRotation(50); 和旋转角度一样,如果你改变了父精灵的缩放比例,子精灵也会做同样的改变: auto myNode = Node::create(); // scaling by setting myNode->setScale(2.0); // scales uniformly by 2.0 需要注意的是,不是所有的父节点属性都会被自动应用到子节点,如改变父节点的锚点只会影响转换效果(
2 min read
3D建模

Cocos2d-x:序列(Sequence)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 序列(Sequence) 能在屏幕上移动精灵,是制作一个游戏所需的一切,是吗?不是的,至少要考虑一下如何执行多个 Action。Cocos2d-x 通过 序列(Sequence) 来支持这种需求。 顾名思义,序列就是多个动作按照特定顺序的一个排列,当然反向执行这个序列也是可以的,Cocos2d-x 能很方便的完成这项工作。 让我们来看一个通过序列控制精灵移动的例子: 创建 Sequence : auto mySprite = Node::create(); // move to point 50,10 over 2 seconds auto moveTo1 = MoveTo::create(2, Vec2(50,10)); // move from current position by
2 min read
3D建模

Cocos2d-x:动作(Action)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 动作(Action) 创建一个场景,在场景里面增加精灵只是完成一个游戏的第一步,接下来我们要解决的问题就是,怎么让精灵动起来。动作(Action) 就是用来解决这个问题的,它可以让精灵在场景中移动,如从一个点移动到另外一个点。你还可以创建一个动作 序列(Sequence) ,让精灵按照这个序列做连续的动作,在动作过程中你可以改变精灵的位置,旋转角度,缩放比例等等。 在 代码示例 中,有对应的章节,执行效果是这样: 5s 后,精灵移动到了一个新的位置: Action 对象的创建: auto mySprite = Sprite::create("Blue_Front1.png"); // Move a sprite 50 pixels to the right, and 10 pixels
2 min read
Cocos2d-x:精灵(Sprite)
3D建模

Cocos2d-x:精灵(Sprite)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 精灵(Sprite) 不知你是否意识到,所有的游戏都有 精灵(Sprite) 对象,精灵是您在屏幕上移动的对象,它能被控制。你喜欢玩的游戏中主角可能就是一个精灵,我知道你在想是不是每个图形对象都是一个精灵,不是的,为什么? 如果你能控制它,它才是一个精灵,如果无法控制,那就只是一个节点(Node)。 看下面的图片,我们来指出一下,哪个是精灵(Sprite),哪个是节点(Node)。 精灵在所有游戏中都很重要,每个游戏都有这样的情景:一个舞台,上面站着一个某种形式的主角,那主角就是精灵。Sprite 很容易被创建,它有一些可以被配置的属性,比如:位置,旋转角度,缩放比例,透明度,颜色 等等。 // This is how to create a sprite
4 min read
Cocos2d-x:场景(Scene)
3D建模

Cocos2d-x:场景(Scene)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 场景(Scene) 在游戏开发过程中,你可能需要一个主菜单,几个关卡和一个结束场景。如何组织所有这些分开的部分?使用 场景(Scene) !当你想到喜欢的电影时,你能观察到它是被分解为不同场景或不同故事线。现在我们对游戏开发应用这个相同的思维过程,你应该很容易就能想出几个场景。 来看一张熟悉的图片: 这是一个主菜单场景,这个场景是由很多小的对象拼接而成,所有的对象组合在一起,形成了最终的结果。场景是被 渲染器(renderer) 画出来的。渲染器负责渲染精灵和其它的对象进入屏幕。为了更好的理解这个过程,我们需要讨论一下 场景图。 场景图(Scene Graph) 场景图(Scene Graph)是一种安排场景内对象的数据结构,它把场景内所有的 节点(Node) 都包含在一个 树(tree) 上。(场景图虽然叫做"图",但实际使用一个树结构来表示)。 听起来这好像很复杂,可能你会问,我为什么要关注这个技术细节,
4 min read
3D建模

Cocos2d-x:导演(Director)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 导演(Director) Cocos2d-x 使用导演的概念,这个导演和电影制作过程中的导演一样!导演控制电影制作流程,指导团队完成各项任务。在使用 Cocos2d-x 开发游戏的过程中,你可以认为自己是执行制片人,告诉 导演(Director) 该怎么办!一个常见的 Director 任务是控制场景替换和转换。 Director是一个共享的单例对象,可以在代码中的任何地方调用。 这是一个典型的游戏流程实例。当您的游戏设计好时,Director 就负责场景的转换: 你是你的游戏的导演。你决定着发生什么,何时发生,如何发生。 由3D建模学习工作室 翻译整理,转载请注明出处! 上一篇:Cocos Creator3D:相机 (mvrlink.com) 下一篇:Cocos2d-x:场景(Scene) (mvrlink.com)
1 min read
Cocos Creator3D:相机
3D建模

Cocos Creator3D:相机

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 相机 游戏中的相机是用来捕捉场景画面的主要工具。我们通过调节相机相关参数来控制可视范围的大小,在 Cocos Creator 3D 编辑器中相机呈如下表示: 相机的可视范围是通过 6 个平面组成一个 视锥体(Frustum) 构成, 近裁剪面(Near Plane) 和 远裁剪面(Far Plane) 用于控制近处和远处的可视距离与范围,同时它们也构成了视口的大小。 相机组件 相机组件是我们用来呈现场景画面的重要功能组件。 属性名称说明priority相机的渲染优先级,值越小越优先渲染visibility可见性掩码,声明在当前相机中可见的节点层级集合。clearFlags相机的缓冲清除标志位,指定帧缓冲的哪部分要每帧清除。包含: DONT_CLEAR:不清空; DEPTH_ONLY:只清空深度; SOLID_COLOR:清空颜色、深度与模板缓冲; SKYBOX:启用天空盒,只清空深度clearColor指定清空颜色clearDepth指定深度缓冲清空值clearStencil指定模板缓冲清
3 min read
3D建模

Cocos Creator3D:模型组件

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 模型组件 模型组件用于显示一个静态的3D模型。通过mesh设置模型网格,通过material改变模型外观。 属性功能mesh用于渲染的3D模型资源。materials用于渲染模型的材质,一个材质对应mesh中的一个submesh。shadowCastingMode指定当前模型是否会投射阴影,需要先在场景中启用平面阴影系统。visibility用于模型会被哪个摄像机渲染,只有visibility与模型相同的摄像机才会渲染该模型。 模型分组渲染 分组渲染功能是通过相机组件(Camera) 的 Visibility 属性配合节点的 Layer 属性共同决定。用户可通过代码设置 Visibility 的值来完成分组渲染。所有节点默认都属于 DEFAULT 层,在所有相机都可见。 静态合批 目前静态合批方案为运行时静态合批,通过调用 BatchingUtility.batchStaticModel 可进行静态合批。 该函数接收一个节点,然后将该节点下的所有 MeshRenderer 里的 Mes
4 min read
3D建模

Cocos Creator3D:声音系统总览

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 声音系统总览 声音系统的接口主要面向两类需求,一类是长度较长,循环持续播放的 “音乐”,一类是长度较短,一次性播放的 “音效”。 所有音频资源都会在编辑器内导入成 AudioClip 资源,要播放声音,首先需要在场景里创建 AudioSource。 对于音乐,可以直接将 AudioClip 赋给 AudioSource 上的 clip 属性,勾选 playOnAwake 属性或脚本调用组件的 play 方法来控制播放; 对于音效,可以在脚本里调用 AudioSource 的 playOneShot 方法,在调用时传入要播放的音效片段和音量。 注意虽然 AudioClip 资源本身也直接有 play 等接口实现,但 AudioSource 才是常规的播放入口,请尽量使用组件完成工作流。 音频相关事件 所有的 AudioClip
2 min read
3D建模

Cocos Creator3D:UI 自定义材质

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 UI 自定义材质 从 1.2 版本开始, UI 的 Sprite 组件支持自定义材质的使用,其使用界面如下图: 其使用方法与其他材质并无不同,但由于 Sprite 面板有基于 UI 内置材质的功能,所以有一些需要注意的点: * 当设置自定义材质数量为 0 或为空时,会使用默认材质进行渲染,面板功能及使用方法可参考 Sprite * UI 并不支持多材质,自定义材质的数量最多为一个 * 当使用了 ui 自定义材质之后,面板上的 Grayscale 功能将会失效,用户可选择自己在材质中实现此功能 * 设置了自定义材质之后,面板上的 Color 属性会与本身材质中设置的颜色(如果有的话)混合影响精灵的渲染颜色 * 针对自定义材质,需要在 shader 中引入 cc-sprite-texture 头文件并对
2 min read
Cocos Creator3D:制作可任意拉伸的 UI 图像
3D建模

Cocos Creator3D:制作可任意拉伸的 UI 图像

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 制作可任意拉伸的 UI 图像 UI 系统核心的设计原则是能够自动适应各种不同的设备屏幕尺寸,因此我们在制作 UI 时需要正确设置每个控件元素的尺寸(size),并且让每个控件元素的尺寸能够根据设备屏幕的尺寸进行自动的拉伸适配。为了实现这一点,就需要使用九宫格格式的图像来渲染这些元素。这样即使使用很小的原始图片也能生成覆盖整个屏幕的背景图像,一方面节约游戏包体空间,另一方面能够灵活适配不同的排版需要。 上图右边为原始贴图大小的显示,左边是选择 Sliced 模式并放大 size 属性后的显示效果。 编辑图像资源的九宫格切分 要使用可以无限放大的九宫格图像效果,我们需要先对图像资源进行九宫格切分。首先打开 Sprite 编辑器,在 资源管理器 中选中图像资源,然后点击 属性检查器 最下面的 编辑 按钮。如果您的窗口高度不够,可能需要向下滚动 属性检查器 才能看到下面的按钮。 打开 Sprite 编辑器 以后,可以看到图像周围有一圈绿色的线条,表示当前九宫格分割线的位置。将鼠标移动到分割线上,
4 min read
Cocos Creator3D:制作动态生成内容的列表
3D建模

Cocos Creator3D:制作动态生成内容的列表

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 制作动态生成内容的列表 UI 界面只有静态页面内容是不够的,我们会遇到很多需要由一组数据动态生成多个元素组成的 UI 面板,比如选人界面、物品栏、选择关卡等等。 准备数据 以物品栏为例,我们要动态生成一个物品,大概需要这样的一组数据: * 物品 id * 图标 id,我们可以在另一张资源表中建立图标 id 到对应 spriteFrame 的索引 * 物品名称 * 出售价格 * ... 下面我们将会结合脚本介绍如何定义和使用数据,如果您对 Cocos Creator 3D 的脚本系统还不熟悉,可以先从 脚本开发指南 一章开始学习。 自定义数据类 对于大多数游戏来说,这些数据通常都来自于服务器或本地的数据库,现在我们为了展示流程,暂时把数据存在列表组件里就可以了。您可以新建一个脚本 ItemList.js,并添加如下的属性: @ccclass('Item') export class
7 min read
3D建模

Cocos Creator3D:自动布局容器

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 自动布局容器 Layout(自动布局)组件可以挂载在任何节点上,将节点变成一个有自动布局功能的容器。所谓自动布局容器,就是能够自动将子节点按照一定规律排列,并可以根据节点内容的约束框总和调整自身尺寸的容器型节点。 布局模式(Layout Type) 自动布局组件有几种基本的布局模式,可以通过 Layout Type 属性进行设置,包括以下几种。 水平布局(Horizontal) Layout Type 设为 Horizontal 时,所有子节点都会自动横向排列,并根据子节点的宽度(Width)总和设置 Layout 节点的宽度。上图中 Layout 包括的两个 Label 节点就自动被横向排列。 水平布局模式下,Layout 组件不会干涉节点在 y 轴上的位置或高度属性,子节点甚至可以放置在 Layout 节点的约束框高度范围之外。如果需要子节点在 y 轴向上对齐,
3 min read
Cocos Creator3D:文字排版
3D建模

Cocos Creator3D:文字排版

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 文字排版 文字组件(Label) 是核心渲染组件之一,您需要了解如何设置文字的排版,才能在 UI 系统进行多分辨率适配和对齐设置时显示完美的效果。 文字在约束框中对齐 和其他渲染组件一样,Label 组件的排版也是基于 UITransform 组件所拥有的尺寸信息(contentSize),也就是约束框(Bounding Box)所规定的范围。 上图所示就是 Label 渲染的文字在蓝色约束框内显示的效果。Label 中以下的属性决定了文字在约束框中显示的位置: * Horizontal Align(水平对齐):文字在约束框中水平方向的对齐准线,可以从 Left、Right、Center 三种位置中选择。 Vertical Align(垂直对齐):文字在约束框中垂直方向的对齐准线,可以从 Top、Bottom、Center 三种位置中选择。 上图中水平方向对齐位置设置为 Right,垂直方向的对齐位置设为了 Bottom,
8 min read
Cocos Creator3D:对齐策略
3D建模

Cocos Creator3D:对齐策略

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 对齐策略 要实现完美的多分辨率适配效果,UI 元素按照设计分辨率中规定的位置呈现是不够的,当屏幕宽度和高度发生变化时,UI 元素要能够智能感知屏幕边界的位置,才能保证出现在屏幕可见范围内,并且分布在合适的位置。我们通过 Widget(对齐挂件) 来实现这种效果。 下面我们根据要对齐元素的类别来划分不同的对齐工作流: 需要贴边对齐的按钮和小元素 对于暂停菜单、游戏金币这一类面积较小的元素,通常只需要贴着屏幕边对齐就可以了。这时只要几个简单的步骤: 1. 把这些元素在 层级管理器 中设为 Canvas 节点的子节点 2. 在元素节点上添加 Widget 组件 3. 以对齐左下角为例,开启 Left 和 Bottom 的对齐。 然后设置好节点和屏幕边缘的距离,下图中左边距设为 40px,下边距设为 30px。 这样设置好 Widget 组件后,不管实际屏幕分辨率是多少,这个节点元素都会保持在屏幕左下角,
8 min read
Cocos Creator3D:多分辨率适配方案
3D建模

Cocos Creator3D:多分辨率适配方案

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 多分辨率适配方案 Cocos Creator 3D 在整体设计上沿用了 Cocos Creator 一套资源适配多种分辨率屏幕的方案。简单概括来说,我们通过以下几个部分完成多分辨率适配解决方案: * Canvas(画布) 组件随时获得设备屏幕的实际分辨率并对场景中所有渲染元素进行适当的缩放。 * Widget(对齐挂件) 放置在渲染元素上,能够根据需要将元素对齐父节点的不同参考位置。 * Label(文字) 组件内置了提供各种动态文字排版模式的功能,当文字的约束框由于 Widget 对齐要求发生变化时,文字会根据需要呈现完美的排版效果。 * Sliced Sprite(九宫格精灵图) 则提供了可任意指定尺寸的图像,同样可以满足各式各样的对齐要求,在任何屏幕分辨率上都显示高精度的图像。 接下来我们首先了解设计分辨率、屏幕分辨率的概念,才能理解 Canvas(画布) 组件的缩放作用。 设计分辨率和屏幕分辨率 设计分辨率 是内容生产者在制作场景时使用的分辨率蓝本,而 屏幕分辨率 是游戏在
7 min read
Cocos Creator3D:渲染排序说明
3D建模

Cocos Creator3D:渲染排序说明

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 渲染排序说明 1. UI 节点排序 UI 的渲染排序采用的是一个广度优先的排序方式,每一个 UITransform 组件身上都有一个 priority 属性,根据 priority 的值来调整节点顺序。排序从根节点下的子节点开始,根据子节点的优先级来确定整体的渲染结构,也就是根节点下的子节点的排序已经决定了最终的渲染顺序。每一个节点下的所有子节点的 priority 则用来确定在当前节点下的渲染顺序。 举个例子: 因此,上图中整体的渲染顺序则是:B -> b1 -> C -> A -> a1 -> a2,在屏幕上的呈现状态为:a2 -> a1 -> A -> C -> b1 -> B。
4 min read
Cocos Creator3D:UI 结构说明
3D建模

Cocos Creator3D:UI 结构说明

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 UI 结构说明 UI 采用的是基于树状的渲染结构,整个 UI 的渲染都是基于 Canvas 节点(带有 Canvas 的节点)作为根节点来进行,也就是 UI 节点的最终根节点必须是 Canvas 节点才可以被该 Canvas 渲染。每一个 UI 节点必须带有 UITransform 组件作为点击或者对齐策略等生效的必要条件。 在整体渲染方面,UI 采用了一套独立的渲染管线且优先级是最高的,整个渲染管线会先渲染 3D 部分再渲染 UI。然后 UI 又通过 Canvas 节点的 Canvas 组件上的 priority 来决定渲染顺序。 UI 还支持对模型进行渲染,唯一的条件是带有模型组件(例如 MeshRenderer
6 min read
Cocos Creator3D:射线检测
3D建模

Cocos Creator3D:射线检测

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 射线检测 射线检测是非常重要的功能,常常用来判断各种情况。 其本质是对一条射线和另一个形状进行相交性判断,如下图所示。 构造射线 射线ray处于cc模块的geometry命名空间下,因此访问ray需要先导入geometry: import { geometry } from "cc"; 射线ray由起点和方向组成,构造一条射线有以下比较常见的方法: 1. 通过起点+方向,如ray的构造函数或静态接口create: import { geometry } from "cc"; const { ray } = geometry; // 构造一条从(0,-1,0)出发,指向 Y 轴的射线 // 前三个参数是起点,后三个参数是方向 const outRay = new ray(0, -1, 0, 0, 1, 0); // 或者通过静态方法
3 min read
3D建模

Cocos Creator3D:分组掩码

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 分组掩码 在 Cocos Creator 3D 中,部分物理组件(目前有刚体组件和碰撞器组件)提供了设置分组和掩码的接口。 共享 在 Cocos Creator 3D 中,目前物理元素和节点是一对一的关系,分组和掩码是属于物理元素的,单个节点上的物理组件修改的都是节点对应物理元素的分组和掩码。 原理 只要以下条件为真就会进行检测 (GroupA & MaskB) && (GroupB & MaskA) 例如:两个物理元素A和B。 A的分组值为1,掩码值为3 B的分组值为2,掩码值为2 算式(1 & 2) && (2 & 3)为假,所以这里A不会和B进行检测。 这里通过B的掩码值为2,可以知道B可检测的组是1,而A在的组是0,所以不检测。 注:表达式依赖位运算,javascript中位运算的操作数是32位的,并且最后一位是符号位,为避免超出运算范围,
4 min read
NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号