2011-12-18 98 views
1

目前我下面讲一个简单的gameloop文章Applet的游戏更新画面,我可以让我的比赛会在本地,我可以添加大量的对象和行为进去。当网络游戏状态改变

文章是这样的:http://www3.ntu.edu.sg/home/ehchua/programming/java/J8d_Game_Framework.html

我的游戏是一个格子,而其他球员可以改变一些简单的矩形。它不需要是最快的方法,但不知何故,我需要一个连接到我的服务器的新线程,并修改将在屏幕上绘制的游戏状态。我只是看不到我如何实现它,而不会导致applet线程挂起。

有人可以看到解决这个?

回答

2

你有一个线程的问题,或者是你问如何设计的服务器和客户端之间的通讯?

对于通信问题,这里有一个简单的办法:已在服务器周期性地发送每一个玩家的更新,无论是通过不断连接的TCP连接或只是周期性的老式不可靠的UDP数据包。选择使用哪一个将取决于您的应用要求。阅读TCP和UDP之间的区别 - 有许多地方,包括SO(只是搜索),讨论权衡。一旦你的服务器状态更新了,你可以通过给服务器一些脚本状态来验证这个工作,你也可以用其他方式发送一些数据。根据您的应用程序,您可能需要注意安全性:玩家是否可以对服务器说谎其行为等等。

在Java中,连接通常通过Socket和ServerSocket类完成,或通过DatagramPacket和DatagramSocket类。

+0

对不起,不清楚。我在问如何设计客户端。我有一台服务器,可以像使用telnet一样使用工具来操纵状态(并获取更新)。但我真的不确定我应该如何用GUI设计客户端。 – 2011-12-18 04:15:13

+0

那么,你有什么问题?当您收到数据时,是否需要更新屏幕,但这需要一些时间,并且在忙于重新绘制屏幕时,您不想错过其他更新? – Gravity 2011-12-18 04:25:24

+0

我需要帮助了解如何设计系统。我想我需要一个线程从服务器获取有关游戏状态的信息,当它获得游戏状态时,它需要告诉小程序:嘿,我有更新给你,请画出来。 我不想在绘图时错过更新。 – 2011-12-18 04:31:12

1

我只是看不到如何实现它,而不会导致小程序线程挂起。

执行ActionListener来执行服务器更新/检查。使用Swing Timer在循环中调用监听器。有关更多详细信息,请参见How to Use Swing Timers

+0

难道这不会使游戏每秒只更新x次,而不是每当有数据发生变化时? – 2011-12-18 04:46:36

+0

这取决于游戏的设计。例如。如果“敌方船只”继续向特定方向移动,直到服务器发送新命令,小程序可以继续移动船舶,直到另行通知。扩展游戏的功能以及它的工作原理是一个好主意。 – 2011-12-18 04:55:15