You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3D角色控制器中使用二进制字面量给int赋值的逻辑及优势

3D角色控制器位掩码碰撞状态写法说明

你看到的代码如下:

// assumes we're not blocked
int blocked = 0x00;

if ( its_a_floor )
        blocked |= 0x01;

if ( its_a_wall )
        blocked |= 0x02;

这种写法是游戏开发领域非常常用的**位掩码(Bitmask)**设计,本质是用单个整型变量的不同二进制位独立存储多个布尔状态,相比普通的单值int赋值或者拆分多个布尔变量,更适配3D角色控制器的场景需求,核心优势有以下几点:

  • 支持存储叠加状态:普通int赋值同一时间只能存一种状态,比如你给1代表被地面阻挡、2代表被墙阻挡,就没法表示「同时被地面和墙阻挡」的叠加情况,而位掩码每个位对应一种状态,位或操作可以任意叠加状态,比如同时满足两个条件时blocked的值为0x03,两种状态互不干扰。
  • 状态判断效率极高:3D角色控制器的碰撞检测、移动逻辑每帧都要执行多次,位运算的执行速度远高于多个布尔变量的组合判断。比如要判断是否被墙阻挡,只需要执行if (blocked & 0x02)即可,不需要额外判断其他状态;要判断是否同时被地面和墙阻挡,只需要判断blocked & 0x03 == 0x03即可。
  • 可维护性和扩展性更强:只需要一个变量就能管理所有碰撞阻挡状态,不需要定义大量独立的布尔变量,传递状态时只需要传这一个int值即可。后续如果要新增阻挡类型(比如天花板阻挡、可穿透障碍物阻挡),只需要新增对应位的常量(比如0x04、0x08)即可,原有逻辑不需要做任何修改。
  • 状态修改更安全:位或操作只会修改对应位的状态,不会影响其他已经存储的状态,不会出现普通赋值时不小心覆盖原有状态的问题。

内容的提问来源于stack exchange,提问作者user406126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:21:02