![]() |
1
36
您链接的示例直接将位置设置为从网络接收到的任何位置,这对于多人游戏来说是个坏主意!
这不会影响设备上的本地位置,而是在更新方法(每帧)中,将本地位置移向远程位置:
由于该单位顺利地向它应该是,它看起来没有滞后在所有! 插值常数控制本地和远程位置会聚的速度:
你需要在这两种选择之间做出妥协。 在实现这类系统时,还需要考虑一些其他因素,例如,您经常需要一个上限,即单元与远程位置之间的距离,否则在某些情况下,本地和远程状态可能会变得“不稳定”。如果它们相距太远(除非是在极端滞后的情况下,否则永远不会发生这种情况),你可以停止游戏,告诉用户它太滞后了,或者直接跳单位的位置,这将看起来滞后,但至少游戏会继续。 补遗:重读这个答案,我突然想到,一个增强将是跟踪时间差。如果您知道(大致)系统中的延迟是什么,那么您就知道当您接收到一个远程位置的数据包时,您大致知道该数据包所处的过去有多远。如果你也发送远程速度,你可以预测物体现在的位置(假设速度恒定)。在某些游戏中,这可能会使估计的本地状态和真实的远程状态之间的差异变小,而在其他游戏中(速度变化很大),这可能会使情况变得更糟。 |
![]() |
2
1
我一直在考虑编写一个多人fps游戏,首先是演示如何移动一些立方体,然后在另一台机器上复制位置/旋转,这台机器处于旁观者模式。 我正在使用上面的代码示例,它运行得很好(我不得不将插值常量调整为大于1,以使其看起来平滑)。
我看到这段代码没有使用时间差,所以插值将需要尽可能长的时间才能到达目标值(或者至少在阈值内然后捕捉到位)。我的问题是,这有什么好处吗? 非常感谢。 |
![]() |
Ruslan · 如何在单游戏中使用或制作“效果”? 7 年前 |
![]() |
MyNameIsGuzse · 找不到C#静态类 7 年前 |
![]() |
John Tran · 有人能告诉我为什么这样不行吗?C#XNA 7 年前 |
![]() |
PÅemysl Novák · 单博弈-等距图块,大地图上的低FPS 7 年前 |
![]() |
TS1997 · 带有winforms的单游戏 8 年前 |
|
Joe Smith · 旋转固定在精灵上的Vector2 9 年前 |
|
jacksparrow · C#XNA-遍历项目并绘制它们 9 年前 |
![]() |
user2056166 · 在xna上绘制圆段 10 年前 |