Godot节点的碰撞与碰撞掩码的计算
Posted 张学徒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Godot节点的碰撞与碰撞掩码的计算相关的知识,希望对你有一定的参考价值。
Godot 3.4.2
判断碰撞类型的节点是否在某个层,或者掩码是否能检测到哪个层的方法,这里就需要用到二进制的位运算
了,代码如下
## 是否在这个碰撞层中
static func is_in_layer(node: CollisionObject2D, layer: int) -> bool:
return node.collision_layer & layer == layer
## 是否在这个碰撞掩码中
static func is_in_mask(node: CollisionObject2D, mask: int) -> bool:
return node.collision_mask & mask == mask
## 减去这一层碰撞
static func sub_layer(node: CollisionObject2D, layer: int):
node.collision_layer -= (node.collision_layer & layer)
## 减去这一层掩码
static func sub_mask(node: CollisionObject2D, mask: int):
node.collision_mask -= (node.collision_mask & mask)
## 加上这一层碰撞
static func add_layer(node: CollisionObject2D, layer: int):
node.collision_layer |= layer
## 加上这一层掩码
static func add_mask(node: CollisionObject2D, mask: int):
node.collision_mask |= mask
通过位运算直接得到是否包含有对应碰撞层或掩码层的值,有兴趣的朋友可以百度“位运算”
里面的第一个参数 node
是要检测的节点, KinematicBody2D
、RigidBody2D
、Area2D
这种碰撞对象,第二个参数即为这些节点的 collision_layer
和 collision_mask
属性
那么要得到他们的值很简单,使用位运算进行左移
运算
比如上面在第一层,那么就是在 1 << 0
层
如果节点是在上面的第 5 层,那么直接用 1 << (5 - 1)
,也就是 1 << 4
即可得到
如果节点是在上面的第 6 层,那么直接用 1 << (6 - 1)
,也就是 1 << 5
即可得到
就是 1 << (上面点亮的数字 - 1)
就是那一层的值
以上是关于Godot节点的碰撞与碰撞掩码的计算的主要内容,如果未能解决你的问题,请参考以下文章
碰撞时,我的玩家以外的物理实体不会调用 didBeginContact