当前位置: 首页 > 知识库问答 >
问题:

更新多人游戏中的游戏状态

蓝昊然
2023-03-14

我正在做一个多人游戏。每个客户端都有一个在共享环境中移动的字符。
我使用socket.io创建rooms,使用peer.js创建客户端之间的点对点连接。
我正在尝试做的是使每个客户端能够更新他的地图中其他玩家的角色的位置。
为此,每个客户端应该拥有其他玩家的键盘光标(箭头键)的状态,以便他能够用行走动画移动他们对应的角色。

p2p:我正在考虑在客户端之间创建双工流,这样每个客户端将拥有其他玩家的键盘光标的状态,这样他就可以用适当的动画移动他们的角色……
套接字:我也可以通过服务器使用套接字传递信息,但是我必须每秒发送60次光标状态的更新,因为游戏是60 fps,这会产生很多套接字消息。我不确定这是最有效的处理方法

什么是最有效的方法来让每个人都了解其他玩家的状态?任何建议都将不胜感激。谢谢。

共有1个答案

汤飞羽
2023-03-14

实际上,你的游戏很可能是一个MMORPG游戏的小演示,或者类似CS/CSGO的东西。

对于这样的游戏,我们总是在主进程(工作进程)中有一个循环,其频率为每秒几帧(比如20帧)。在每一帧中,客户端将处理从他人收到的数据包和来自pleyer的选项。

如果这里是20帧,这意味着每个fram不能超过50ms,所以如果它是在WLAN中,会造成一些延迟和一些数据包丢弃发生。

所以我认为只有当你的游戏要在局域网中使用并且玩家人数众多的情况下,最有效的方法可能是在P2P的基础上继续使用C/S模式。

 类似资料:
  • 每2个玩家,服务器将创建1个房间(我的游戏是PvP,一对一) 每个房间处理游戏逻辑 我将使用作为我的游戏循环 服务器FPS=5 每个房间都可以处理玩家的移动和一些物理操作 关于实际问题: 基于下面的点数,我应该使用什么样的游戏循环?下面每种类型的游戏循环的利弊是什么。 null

  • 游戏状态 作为一种代码风格,也为了帮你模块你的代码,我推荐在游戏循环里像这样组织你的代码: //Set the game state state = play; //Start the game loop app.ticker.add(delta => gameLoop(delta)); function gameLoop(delta){ //Update the current game s

  • 不知道为啥在****上投了一万个数据分析岗没回应,结果多益的hr直接找上来问我对游戏玩的多不多,对游戏策划感不感兴趣,莫名其妙的就投了简历,填完了测评(看别人都说有些都乱填,就我兢兢业业填了快一千多个字?),明天笔试不知道考啥 多益很缺策划?鼠鼠就一破打游戏的能面游戏策划吗? 8.5一面(面试官的麦经常会听不清,反问了好几次,然后回答问题的时候眼睛不由自主往左下瞄,我也不知道为啥,下次屏幕中间贴个

  • Iphone Gamekit对于创建多人游戏非常有用。 但我有个问题。互联网上有很多资源和教程,可以为通过血牙或WiFi加入的玩家创建多人游戏。但玩家应该通过同一网络连接。但是有没有一种方法可以连接世界上任何地方的用户。举个例子,假设在一个纸牌游戏中,我是一个玩家,游戏会搜索全世界的用户,随机连接3个玩家与我一起玩游戏。有没有办法用GameKit做到这一点。如果这是可能的,任何人可以请指示我一些关

  • 你好,我正在编写一个2D游戏,我已经找到了几种计算每秒帧数的方法,但我还没有真正理解架构规则,其中之一是: 我无法理解的是,渲染屏幕需要一些时间,所以我应该将这部分放在循环的绝对末端(在渲染获得输入等(绝对末端)之后): 所以基本上在游戏循环开始时,我得到开始时钟,然后我运行每个函数,例如移动碰撞渲染等,然后我评估增量时钟并在此基础上计算fps?有很多fps计算“公式”,但我需要一个真正的程序架构

  • PS Vita上可游玩存储于PlayStaiton®Vita卡或从PlayStation®Store下载的游戏。 游戏的LiveArea™ 游玩PlayStaiton®Vita卡的游戏 游玩从PlayStation®Store下载的游戏 将使用PS3™下载的游戏复制至PS Vita游玩 在PS Vita游玩PSP™ (PlayStation®Portable)的游戏