我正在使用Android Play Games - Real Time Multiplayer我的应用程序.当我创建一个新房间时,回调onRoomCreated()返回STATUS_NETWORK_ERROR_NO_DATA5%的时间.我不知道为什么我偶然发现这个错误.
某些帖子建议应在创建新帖子之前关闭.我总是在super.onstop()打电话之前离开我的房间.我也在onLeftRoom()创建一个新房间之前等待回调.
堆栈跟踪
02-20 22:57:07.208: I/libjingle(1763): Token type:OAuth2
02-20 22:57:07.208: I/libjingle(1763): Final XMPP server hostname talk.google.com port to 5222
02-20 22:57:07.316: I/libjingle(1763): OpenSSLAdapter::OnConnectEvent
02-20 22:57:07.416: I/libjingle(1763): BeginSSL: talk.google.com
02-20 22:57:07.476: W/libjingle(1763): Warning(openssladapter.cc:388): ContinueSSL -- error -1
02-20 22:57:07.480: W/libjingle(1763): Warning(openssladapter.cc:397): OpenSSLAdapter::Error(ContinueSSL, -1)
02-20 22:57:07.504: I/libjingle(1763): SSL Cleanup
02-20 22:57:07.532: I/libjingle(1763): Token type:OAuth2
02-20 22:57:07.532: I/libjingle(1763): Final XMPP server hostname talk.google.com port to 5222
02-20 …Run Code Online (Sandbox Code Playgroud) 我有兴趣构建一个小型的实时多人游戏,使用HTML5/JavaScript作为客户端,也可能使用Java作为服务器软件.
我稍微调查了一下WebSockets,但看起来我对WebSockets实际上有什么误解.我最初认为WebSockets只是JavaScript处理TCP套接字的方式,就像在Java和其他语言中使用它一样,但似乎必须进行整个握手过程,并且每次传输都包含很多HTTP开销(并且那个案例,对Ajax的好处似乎并不像第一眼那样令人兴奋)?
在一个相关的主题上,为此目的有没有更好的WebSockets替代品(JavaScript中的实时多人游戏)?
我正在考虑在Node.js中创建一个Web多人游戏.这意味着我将在后端和前端使用相同的语言.这将是实时的,每个'房间'最多约20人,所以我有一些想法:
如何弥补所有用户之间的延迟,以便每个人同时看到同样的事情?我正在考虑跟踪每个玩家的平均ping时间,找到最慢的玩家,并告知其他客户他们必须延迟每个玩家的时间(以毫秒为单位),以便每个玩家尽可能同步.
我正在考虑在后端和前端运行游戏代码(因为它是两端的JavaScript)并且只是有一个纠错机制来与后端的"真实游戏"同步.这样,游戏应该在前端平滑地执行,并且在同步发生时只有很少的故障.此外,这将最小化前端JavaScript黑客攻击,因为作弊者将同步到后端游戏.
我是否应该通过套接字(按键)接收玩家行为,通知所有其他玩家其他玩家的行为,同时在后端"玩"游戏,并将同步信息发送给整个游戏状态的每个人.同时他们同步?
你怎么看?我应该考虑或注意更多的东西吗?
请发布有关多人游戏的文档或文章的任何想法或链接.
编辑:这些是有用的:
想象一下具有滚动水平的太空射击游戏.有什么方法可以阻止恶意玩家修改游戏以使其受益?他能做的事情很难限制服务器端是自动瞄准,在可见区域外窥视,加速黑客攻击和其他事情.
有什么方法可以防止这种情况发生?假设服务器是任何语言,客户端通过WebSocket连接.
始终假设代码是100%可攻击的.想办法防止客户完全重写(作弊的目的)作弊.这些可以是诸如编写安全游戏协议的方法,服务器端检测等.
我已经知道了android编程的基础知识,尤其是游戏中的编程.现在我想尝试多人游戏.但我没有关于多人游戏的任何背景.所以我想提出一些问题:
我不打算制作任何复杂的游戏.可能只是多人tic tac toe对我来说没问题.最重要的是我了解多人游戏编程的基本知识.:)
如果有的话,将Apple的新ARKit用于多个用户/设备的最佳方式是什么?
似乎每个设备都有自己独立的场景理解.到目前为止,我最好的猜测是使用原始特征点位置并尝试在不同设备上匹配它们以将不同的视点粘合在一起,因为ARKit不提供任何绝对参考参考.
=== Edit1,我尝试过的东西===
1)特征点
我已经玩过暴露的原始特征点,我现在确信在他们目前的状态下他们是死路一条:
总的来说,我认为尝试以某种有意义的方式使用它们是不合理的,不能在一个设备中进行任何类型的好点匹配,更不用说几个.替代方案是实现我自己的特征点检测和匹配,但这将更多地取代ARKit而不是利用它.
2)QR码
正如@Rickster建议的那样,我也尝试识别一个容易识别的对象,如QR码,并从该固定点获得相对参考变化(请参阅此问题)这有点困难,并暗示我使用一些openCV来估计相机姿势.但更重要的是非常有限
我正在使用javascript中的socket io创建一个多人游戏.除了客户端插值之外,游戏目前完美无缺.现在,当我从服务器获取数据包时,我只需将客户端位置设置为服务器发送的位置.这是我试图做的:
getServerInfo(packet) {
var otherPlayer = players[packet.id]; // GET PLAYER
otherPlayer.setTarget(packet.x, packet.y); // SET TARGET TO MOVE TO
...
}
Run Code Online (Sandbox Code Playgroud)
所以我设置了球员的目标位置.然后在Players Update方法中,我只是这样做:
var update = function(delta) {
if (x != target.x || y != target.y){
var direction = Math.atan2((target.y - y), (target.x - x));
x += (delta* speed) * Math.cos(direction);
y += (delta* speed) * Math.sin(direction);
var dist = Math.sqrt((x - target.x) * (x - target.x) + (y - target.y)
* (y - target.y));
if (dist < treshhold){
x …Run Code Online (Sandbox Code Playgroud) 在我的Android游戏中,我有一个回合制的多人游戏.用户在大厅等待对手,只要恰好有3个匹配,他们就会一起去一个新的游戏室,这是另一个活动而不是大厅.
文档建议让活动扩展BaseGameActivity.但是当我在玩家已经连接时切换活动时,我不需要将连接部分放在我的活动随后绑定的服务中吗?
有没有人尝试使用游戏服务?如果我不能使用BaseGameActivity,如何开始?
我有一些使用套接字制作多人回合制游戏的经验,但我从未尝试过实时动作游戏.我需要处理哪些额外的问题?我是否需要保留玩家行为的历史,以防滞后的玩家在过去做些什么?我真的需要使用UDP数据包还是TCP足够?还有什么?
我还没有真正决定要做什么,但出于这个问题的目的,你可以考虑一个带有XY运动的10人2D游戏.
让我们想象一下非常简单的游戏...我们有一个迷宫和两个玩家试图通过互联网实时退出.
在每个移动游戏中,客户端应该将玩家的坐标发送到服务器并接受另一个客户端的当前坐标.怎么可能如此快速地进行这种交换(就像所有现代游戏一样).
好的,我们可以使用memcache或类似技术来减少服务器端的数据挖掘操作.我们也可以使用最快的网络服务器等,但我们仍然会遇到时间问题.
所以,问题是......
multiplayer ×10
javascript ×4
android ×3
algorithm ×1
arkit ×1
game-engine ×1
ios11 ×1
libjingle ×1
mmo ×1
networking ×1
node.js ×1
online-game ×1
security ×1
sockets ×1
swift ×1
tcp ×1
udp ×1
websocket ×1