2013-10-25 35 views
0

我正在开发一款游戏,我想我会添加一个多人游戏选项。这是一个实时游戏,像蛇或这样的事情,所以我真的快更新精灵的位置:实时java游戏:套接字或RMI

while (isRunning) { 
    ... 
    if (sprite instanceof PlayerSprite) { 
      PlayerSprite player = ((PlayerSprite) sprite); 
      collisionManager.checkCollision(player, map, elapsedTime, currTime); 
      updatePosition(player, elapsedTime); 
      player.animeUpdate(elapsedTime); 
    } 
    ... 
} 

我第一次尝试与RMI:我存储在一个对象中的每个位置,我远程做到了。所以服务器和客户端都可以更新它。但正如我所说,它需要更新实时。 而RMI看起来并不能解决这个问题。但我真的是初学者,所以我不知道。

所以我的问题是:RMI或简单的IO(套接字)将是实时游戏的最佳解决方案?

如果套接字更好:我可以通过ObjectOutput/ObjectInput将位置存储对象发送到客户端,更新对象(并绘制到屏幕),然后将更新的对象发送回服务器,依此类推?

在此先感谢:)

回答

2

所以我的问题是:RMI或简单的IO(套接字)将是最好的 解决方案的实时游戏?

这个问题很容易回答。在两者之间,套接字是要走的路。 RMI包含大量开销,这会减慢运输时间。实时的目标是尽量缩短发送和接收信息之间的时间。

如果插座是更好的:我可以通过 的ObjectOutput /的ObjectInput发送存储位置对象到客户端,更新的对象(并将其绘制到 屏幕),然后更新的对象发送回服务器,和 等?

你可以,但如前所述,它很慢。您将需要使用具有客户端 - 服务器消息传递系统的库(我使用Kryonet)或编写自己的协议。关键的一点是,客户端和服务器可以很容易地相互理解。

+1

非常感谢链接到KryoNet! –

+0

谢谢,它看起来不错。我会首先尝试使用简单套接字,我对它有点熟悉。然后我会给Kryonet一个镜头:) – Aksirba

1

我不会建议使用Socket或RMI!

在我看来,你应该使用REST Services来处理多个玩家。

+0

从来没有听说过它。你可以发布教程吗?当我看到它的Web服务,或不? – Aksirba