ACTION GAME MAKER 的碰撞层系统直接沿用了 Godot 的机制。
通过灵活运用,可以实现各种配置。
碰撞设置位置
墙壁判定
-
GameObject: CollisionObject2D > Collision
-
图块:TileMapLayer > 图块设置 (TileSet) > PhysicsLayers
攻击判定
- AttackArea2D: CollisionObject2D > Collision
命中判定
- HitArea2D: CollisionObject2D > Collision
Collision Layer 与 Collision Mask
Collision Layer 表示对象或图块属于哪个层。
Collision Mask 表示对象或图块希望与哪些层发生碰撞。
碰撞层名称整理
可以在项目设置 > 常规 > Layer Names > 2D 物理中为碰撞层命名。
设置后,将鼠标悬停在层编号上即可查看名称。
与组或属性判定的顺序
- 碰撞处理 (Collision Layer / Collision Mask)
- 组/属性处理
按此顺序进行判定。
因此,不会发生碰撞的对象或图块之间不会执行组/属性处理。
不会被推开的对象
由于 CollisionMask 是单向的,
若对象 A 属于第 1 层,且掩码仅为 1;
对象 B 属于第 2 层,且掩码为 1 和 2。
则对象 A 无法识别与对象 B 的接触,但对象 B 可以识别与对象 A 的接触。
在这种情况下,对象 A 可以推动对象 B,但对象 B 无法推动对象 A。
原因如下:虽然这是一个稍显复杂的概念,
对象 A 无法识别与对象 B 的碰撞……但实际上对象 A 在移动,因此对象 B 会被直接推开。
另一方面,对象 B 能识别与对象 A 的碰撞,因此会执行推动对象 A 的处理……但由于对象 A 并未识别对象 B,无论怎么推,对象 A 都不会移动 1 像素。
可乘坐的移动平台
利用上述特性,若将可乘坐的平台的掩码设置为空,即可实现一种对任何碰撞都无位移的“无敌”平台。



