标签:style blog os ar strong 数据 sp 2014 on
位运算的定义:通俗点说,位运算就是对一个整数在计算机中二进制进行操作。
//检查state的第pos位是否为1 int bitCheck(int state, int pos) { return state & 1<< pos - 1; } //将state的第pos位的值设为1 int bitAdd(int state, int pos) { return state | (1 << (pos - 1)); } //将state的第pos位的值设为0 int bitDel(int state, int pos) { return state & (~(1 << (pos - 1))); }位运算往往在游戏用来记录一些状态,一个32位的整数,就能记录32种状态,并且只需要一个int就够了。
用状态位来记录NPC的状态,一个8位的整数即可记录8种状态,16位,32位就可以记录更多的状态
//伪代码 #define STATE_ATTACK 1 //普通攻击 #define STATE_SKILL 2 //技能攻击 #define STATE_DODGE 3 //爆击 #define STATE_HIT 4 //命中 INT8 state = 0; //默认无任何状态 state = bitAdd(state,STATE_ATTACK); //发起普通攻击 state = bitAdd(state,STATE_HIT); //命中目标 state = bitAdd(state,STATE_DODGE); //产生爆击 if(bitCheck(state,STATE_HIT) == 0) //如果未命中目标 { }位运算 与 类似枚举 的操作,主要的区别在于位运算可以用一个变量来记录多种状态共同存在的情况。
位运算在游戏开发领域是用到的很多的,比如在游戏中的奖励系统,游戏中有很多种奖励,每日登录,排位赛,竞技场,公会奖励,在线奖励,签到奖励等,策划需要每一种奖励可以领取的时候,客户端在相应的功能按钮都需要光效表现来引起玩家注意,让玩家知道某某奖励现在是可以领取的。
我看到很多开发人员都是客户端把所有系统的数据都拿到了,然后再根据数据的相应情况来决定是否让这个按钮开启光效。其实我们只需要用一个整数,在服务器端算好每一种奖励是否可以被领取,客户端收到这个数据后,根据每一个状态的情况来开启相应的光效,让玩家点击进入相应的系统的时候,才去拿相应的数据。
位运算常用的是状态位、权限位、自定义加密
标签:style blog os ar strong 数据 sp 2014 on
原文地址:http://blog.csdn.net/shimazhuge/article/details/40020517