在游戏的聊天系统制作的过程中,由于要对应很多聊天频道,如综合、本地、队伍、公会。。。每一个频道对应的信息有很大的区别,那么我们怎样用更简便的方法来实现频道判别的功能呢,在最开始,我们可以用Swittch.case来判断是否是那个那个频道,今天接触了一种新的方法,记录下来
首先,定义一系列的枚举值,
public enum ChatChannel
{
All = -1,//综合
Local = 1,//本地
Morld = 2,//世界
System = 4,//系统
Private = 8,//私聊
Team = 16,//队伍
Guild = 32//公会
}
然后创建对应枚举值类型的数组
private ChatChannel[] ChannelFilter = new ChatChannel[6]
{
ChatChannel.Local|ChatChannel.Morld|ChatChannel.Team|ChatChannel.Private|ChatChannel.System,
ChatChannel.Local,
ChatChannel.Morld,
ChatChannel.Team,
ChatChannel.Guild,
ChatChannel.Private,
};
其中第一个代表综合频道(综合频道中包含了本地、世界、队伍、私聊等频道),依次向下为本地,世界,队伍,公会,私聊
然后在判别对应频道的时候
internal void AddMessages(ChatChannel channel,List<ChatMessage> messages)//添加消息
{
for(int ch = 0;ch < 6;ch++)
{
if((this.ChannelFilter[ch] & channel) == channel)
{
this.Messages[ch].AddRange(messages);
}
}
if(this.OnChat !=null)
{
this.OnChat();
}
}
通过传进来的参数判断ChannelFilter[ch] 与channel是否有共同的,如果有共同的判断是否与channel相同,如果相同,添加到对应频道的列表信息中去。
这样做的话,就可以避免用if。。。或者是case。。。可以使代码看起来比较精简,而且还能处理组合的情况,在一些场景下比较实用。
博客介绍了如何在游戏聊天系统中使用枚举类型和位运算优化频道判断功能。通过定义ChatChannel枚举,创建ChannelFilter数组,然后利用位运算判断传入频道与过滤器是否匹配,实现简洁且高效的代码,同时支持频道组合情况。
4536

被折叠的 条评论
为什么被折叠?



