场景id

游戏世界是由很多个场景组成的,场景具有唯一性,所以要设计出一种唯一id去标记一个场景。假如一个具有副本概念的国战类游戏,它的每一个场景应该是由副本id+国家id+地图id构成。假设由高位到低位为副本id16位,国家id8位,地图id16位,则可以通过一个哈希函数或者宏定义出场景id:

#define sceneid_hash_func(copyid, countryid, mapid) \

(unsigned long)(((mapid)&0xffff) | (((countryid)&0xff) << 16)  | ((((unsigned long)copyid)&0xffff) << 24))

同时根据sceneid又可以得到副本id,国家id和地图id:

#define copyid_from_sceneid_func(sceneid) (unsigned int) ((sceneid)&0xffff)

#define countryid_from_sceneid_func(sceneid) (unsigned int) (((sceneid)>>16)&0xff)

#define mapid_from_sceneid_func(sceneid) (unsigned int) (((sceneid)>>24)&0xffff)

因为副本是一种特殊的场景,常常会有判断一个场景是否是副本的情形,所以可以通过以下定义来判断一个场景是否为一个副本:

#define is_copymap_func(sceneid) (copyid_from_sceneid(sceneid) > 0)

对于副本来说,可以把副本id和地图id设置为相同的值,但是要注意的是副本id和地图id要进行区分,并不是一个东西。一般来说游戏里面的地图分为动态地图和静态地图,副本通常是动态地图由副本id,国家id,地图id生成,静态地图一般是场景服启动的时候就创建好的,由国家id和地图id组成,而副本id为0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值