Answers:
因此,这里有一些答案。
从性能角度和玩家感觉角度来看,客户端碰撞是理想的选择。您不想让碰撞变得迟钝,而是希望玩家撞到一个固体物体并停下来。如果在服务器端进行操作,那么您要么是在各地寻找橡皮筋球员,要么是当他们尝试移动时给他们明显的滞后。两种情况下都不好用。
从安全角度来看,服务器端冲突是理想的。您的客户越接近“哑终端”,您的游戏的利用就越少。有一个原因,没有一个玩基于文本的MUD的人不必担心wallhacks或speedhacks-这是因为客户端没有做任何值得一提的事情。
几乎在每种情况下,两者都做是“理想的”。让客户来做他们的事情,然后仔细检查服务器以确保人们没有作弊。的缺点是复杂性,同步(究竟做怎么做,如果这两个不同意),和纯粹的服务器CPU使用率。
我建议几乎完全在客户端执行此操作。就像在完整的客户端系统中一样,客户端对自己的位置具有权威性,并执行所有自己的处理。最重要的是,您会随机让服务器不时地检查各种玩家。保持服务器负载较低,但这会以惊人的速度消除骗子。
或者,现在在客户端进行操作,如果您的游戏变得足够流行而人们在其中作弊,则在将来的某个时候添加服务器端验证。坦白地说,这可能不会,因此现在没有必要花费编码器时间。
魔兽世界不会在玩家/小怪之间进行碰撞检测。该决定背后可能存在或可能没有技术原因,但实际上,这更多的是游戏设计决策,而不是技术决策:
想象一下在玩家对玩家的情况下它有多大的可利用性。或者,如果其他(经常是闲置)玩家阻止了您的活动,那么使用银行/拍卖行/邮箱将有多困难!
至于基于客户端与服务器的冲突检测-实际上,除非移动非常缓慢,否则它必须主要是客户端,因此对每个客户端来说都是正确的。延迟/延迟的碰撞响应,和/或与“不可见”物体碰撞将是非常不愉快的。
如果您担心黑客行为,并且会对游戏产生重大影响,那么答案是肯定的。
在我的基于浏览器的游戏中,它是一种“城市建筑”游戏,我对这些黑客并不感到困扰,因为当我布置已保存的游戏状态时,客户端引擎不会失败。
但是,它可能会滥用游戏玩法,因为玩家需要花费游戏币(或高级现金)来扩大可玩区域,以建造更多房屋/建筑物。因此,我将对新添加的建筑物占用的瓷砖数量进行简单检查,再检查多少个可用瓷砖。