我正在用C#编写2D空间RTS游戏.单人运动.现在我想添加一些多人游戏功能.我用谷歌搜索它似乎只有一种方法可以让数千个单元在没有强大的网络连接的情况下连续移动:在每个玩家运行相同的模拟时,只通过网络发送命令.
现在整个发动机到处使用双打都存在问题.浮点计算在很大程度上取决于编译器优化和cpu体系结构,因此很难保持同步.它根本不是基于网格的,并且有一个简单的phisics引擎来移动太空船(太空船有冲动和角动量......).因此重新编码整个东西以使用固定点将是非常麻烦的(但可能是唯一的解决方案).
所以到目前为止我有两个选择:
所以我寻找更好的意见,(甚至是将代码迁移到定点而不会搞砸一切的提示......)
我计划在多人网络C++游戏中使用OpenID客户端.主机可以选择只允许通过OpenID进行身份验证的人员登录.此外,我希望只允许某些人登录.
我们的代码中已经有了一些简单的HTML查看器(我们计划迁移到WebKit),因此显示HTML(用于OpenID端点登录)并不是真正的问题.
我们还有HTTP请求的代码(我们已经在这里迁移到libcurl).
我还没有找到任何C++代码来完成剩下的工作(实际的OpenID端点握手).这有什么C++代码吗?
如果没有,那么从哪里开始呢?我对OpenID内部结构并没有多少想法.我自己编码是否很复杂?
这样可能吗?我想我已经看到我必须将一些身份验证站点URL左右放到OpenID端点,如果登录成功,它将返回到该端点.在这种情况下,没有您通过OpenID登录的站点,它是一个游戏服务器.
如果用这种方式确实是一个问题,我们也有自己的网络服务器(一个用于我们的论坛,我们有SourceForge一个),所以我们也可以在那里做所有的事情.然而,这有一个巨大的缺点,游戏依赖于一些网站的OpenID登录,这是非常糟糕的 - OpenID的一个很好的优势已经消失.
我正在开发一款简单的游戏来体验移动平台上的多人游戏开发,特别是在Android和iOS上.我现在正在计划游戏的网络/多人游戏方面并需要一些建议.
首先,我认为Google App Engine是游戏的服务器端.但我了解到app引擎无法直接连接到客户端.因此,无法使用此方法直接向其他人发送用户更新.然后我开始考虑在当前会话的一个游戏玩家上提供游戏.但当然一些功能将在服务器上.你认为这是个好主意吗?
其次,我正在寻找一种通信iOS和Android的协议.到目前为止,YAML和JSON是我看过的.
关于多人游戏开发的任何其他建议将不胜感激.谢谢...
情况:
我想问一下,使用BT或Web服务器在多人1:1游戏中同步对象的最佳逻辑是什么.游戏中有两个玩家,每个玩家都有多个枪支和子弹,子弹是动态创建的并且在一段时间后消失,我的移动玩家同时移动.
问题:
我有一个真正的同步问题,因为一个设备上的子弹可能比其他设备更快,也可能已经消失或击中一个设备上的一个对象,而另一个设备仍然在空中.
可能性?
在这种情况下,处理同步的最佳方法是什么?如果所有对象都由一个充当服务器的设备控制,而另一个只是获取值,位置并且做很少的思考.或者应该控制分布在每个设备创建的位置,销毁并移动自己的对象,然后通过同步告诉其他设备.
在这方面处理传输延迟的最佳方法是什么,因为BT可能比通过网络播放更快?最好的是一个工作样本 - 非常感谢!
我正在使用node.js作为服务器和一个嵌入HTML5画布中的.js文件为客户端做一个小游戏.每个玩家都拥有和对象,他们可以用箭头键移动.
现在我已经有两种不同的方式来更新游戏,一种是每次更改时发送玩家的新位置.它工作但我的服务器必须每秒处理大约60 x/y对(客户端的更新速率是30 /秒,并且有2个玩家不停地移动).第二种方法是当他们改变方向速度时仅发送玩家对象的新位置和速度/方向,因此基本上在其他客户端上使用上次更新的方向/速度来插入玩家的移动.我的服务器只需要处理很少的x/y7速度/方向数据包,但是当数据包到达时我的客户端经历了一点延迟,因为插值位置通常与数据包中写入的实际位置相差一点点.
现在我的问题是:你会推荐哪种方法?我应该如何对这两种方法进行滞后补偿?
我一直在研究用于我正在编写的双人游戏的网络,而且我还不清楚设备何时必须转发端口才能与外界通信.
从我在其他游戏中看到的情况来看,总是需要端口转发才能托管服务器,但客户端不需要端口转发.此外,还有其他情况,例如skype(根据我的理解,最终是客户端到客户端),其中两端都不能转发端口.
所以我的问题是,在互联网通信中,何时需要端口转发并且不需要端口转发,以及我可以采取哪些步骤作为开发人员来实现它,以便我的用户不必担心它?提前致谢!
嗨,我正在尝试使用node.js和socket.io构建实时多人游戏.
现在,在编码方面实现自身并不是一个问题,但是来自传统的http请求 - 响应Web编程模型,我不知道这在流量和服务器负载方面会有多昂贵.基本上在游戏期间,玩家的浏览器应该跟踪实时鼠标输入事件并且将它们广播到同一游戏中的所有其他玩家.
这是一个例子,假设我的化身跟随我的鼠标指针在屏幕上,它应该实时广播到屏幕上的其余玩家.我会做的事情如下:
// client side
$(document).on("mousemove", function(event){
io.emit("coordinate", {x: event.pageX, y: event.pageY});
});
Run Code Online (Sandbox Code Playgroud)
并在服务器上:
// server side
io.sockets.on("connection", function(socket){
...
socket.on("coordinate", function(coordinate){
socket.get("username", function(err, username){
socket.broadcast.emit("move", {username: username, coordinate:coordinate});
});
});
...
});
Run Code Online (Sandbox Code Playgroud)
我认为这应该有效,但这需要浏览器每秒向服务器发送几个事件,随后应该将它们广播给同一游戏中的其余玩家,我担心这个含义.但有一件事是传输的每个数据片段的大小并不大(基本上它只是一个x和y坐标).如果这太贵了,无论这场比赛有多棒,我都不认为我能发货.谁能开导我?谢谢.
[编辑]为了澄清,我不是在问如何提高这种架构的效率.我只是想知道这种类型的系统在系统负载(和维护成本)方面是否足够现实对于普通的Web服务我只能通过查看页面视图数来估算成本,但websocket是一个全新的领域,我不知道的,所以我想问.
我正在开发简单的浏览器实时多人游戏(游戏玩法中的2个玩家)游戏.它涉及快速和频繁的玩家移动和方向的变化,因此信息必须非常快速地交换 - 我决定尝试websockets(很乐意使用pubnub服务而不是自托管套接字服务器).
我的问题是,pubnub总是决定使用xhr fallback而不是websockets - 不知道为什么.通过websockets运行通信是否有任何特定要求?Http显然太慢了并且杀死了经验.我在Mac上使用最新的Chrome,因此浏览器兼容性不是问题.
或者,可能有很多变量来确定通信协议,这个问题无法回答?而我唯一的解决方案是使用自托管套接字服务器?
编辑:我已经做了一个干净的,新的项目,但仍然无法让它工作.请下载它,有一些代码可供查看,可能很容易让专业人士或任何人远程体验,看看我做错了什么.只是试图发送整数.
http://www.2shared.com/file/fPOCLlg5/gkTest.html
你好
我正试图在我的iphone游戏中实现Game Center多人游戏,并且无法理解Apple Docs和第三方有关发送和接收数据的样本.
有人可以请在官方Apple文档中解释代码示例:http: //developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/MatchesandVoice/MatchesandVoice.html#//apple_ref/doc/uid/TP40008304-CH10-SW4
或者帮我弄清楚我提供的示例代码.它是一个预先构建的类,用于处理所有游戏中心任务,以及用于发送和接收数据的样本将是:
- (void) sendPosition
{
NSError *error;
PositionPacket msg;
msg.messageKind = PositionMessage;
msg.x = currentPosition.x;
msg.y = currentPosition.y;
NSData *packet = [NSData dataWithBytes:&msg length:sizeof(PositionPacket)];
[match sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error];
if (error != nil)
{
// handle the error
}
}
Run Code Online (Sandbox Code Playgroud)
接收:
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
{
Packet *p = (Packet*)[data bytes];
if (p.messageKind == PositionMessage)
// handle a position message.
}
Run Code Online (Sandbox Code Playgroud)
关于此代码形成官方文档的重要问题是:
哪里PositionPacket/ Packet …
我刚刚开始玩pygame,并且遇到了一个问题 - 当我为2名玩家制作游戏时,第二个角色总是滞后.这是我的代码.
import pygame, sys
from pygame.locals import *
pygame.init()
clock = pygame.time.Clock()
background_img = pygame.image.load('Data/background.jpg')
size = background_img.get_size()
pygame.mixer.init()
pygame.mixer.music.load('Data/song.wav')
pygame.mixer.music.set_volume(0.7)
pygame.mixer.music.play(-1)
dot_img = pygame.image.load('Data/dot.png')
dotx = 0
doty = 0
dotx_speed = 0
doty_speed = 0
circle_img = pygame.image.load('Data/circle.png')
circlex = 0
circley = 0
circlex_speed = 0
circley_speed = 0
display = pygame.display.set_mode(size)
pygame.display.set_caption('Game')
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
dotx_speed = …Run Code Online (Sandbox Code Playgroud) multiplayer ×10
iphone ×3
lag ×2
networking ×2
node.js ×2
websocket ×2
android ×1
c# ×1
c++ ×1
client ×1
game-center ×1
ios ×1
javascript ×1
objective-c ×1
openid ×1
port ×1
pubnub ×1
pygame ×1
python ×1
real-time ×1
socket.io ×1