【发布时间】:2014-08-15 12:09:44
【问题描述】:
在游戏中,服务器可能必须向客户端发送一个包含信息的数据包,比如添加一个敌人。添加此类敌人的数据可能与每个敌人相似(位置、id ...),但需要区分它是哪个敌人。是僵尸吗?狼人?嗯。
我记得有两种方法:
1 - 创建一个 Enum。
所以我可以为每种类型的敌人创建一个 Enum,并在我的数据包中发送该类型。
优点: 只需一个数据包即可添加多种类型的敌人,只有一种方法来处理它的接收。
缺点:每次我想添加一个新敌人时,我都必须在枚举上创建一个新条目,而接收的方法很可能是一个烦人的大开关。
2 - 为每个敌人创建一个数据包,每个敌人都有不同的“处理”方法
优点:“似乎”更有条理,因为每个元素都有一个指定的数据包和方法,并且不需要向枚举添加一个条目(虽然 id 需要添加一个新的句柄方法所以....是的。)
缺点:敌人多意味着数据包多,也就意味着处理方法多,可能会一团糟。
所以,基本上,tl:dr,要么我有一个“PacketAddEnemy”,其中有一个像 EnemyType 这样的枚举和一些 switch-case,或者我有一个“PacketAddZombie”、“PacketAddWerewolf”等,但最终会收到一个垃圾邮件数据包和方法。
我更喜欢第一个选项,但我都不喜欢这两个选项。我想知道是否有有趣的替代品?
【问题讨论】:
标签: java libgdx packet kryonet