联机游戏教程(解答篇)
Autukill 发表于 2014-06-17 11:26:28 2404

本帖最后由 Autukill 于 2014-12-7 16:21 编辑

作者:Autukill 网站:www.gamemake.org 2014年6月17日
[align=left]本系列教程的目标是:实现基于Game Maker:Studio 及C#(Server)的局域联机游戏、网络游戏。[/align]
[align=left] [hr]
[/align]【内容】
[align=left]上一篇,讲解一个简单服务器、客户端的建立。这一篇,回到官方Demo。[/align][align=left]如果自己看不懂,可以参考我的解答。[/align][align=left]
[/align]
【下载】

NetworkPlatformer.gmz 链接:pan.baidu.com/s/1c0CKgxU 密码:xhwc


【关于碰撞处理】

[align=left]碰撞的检测和处理都发生在服务器,客户端仅仅接收服务端发来的精灵数据,随后进行绘制。[/align]
[align=left]碰撞处理的相关细节可以参考之前发表的帖子:横版游戏中的快速碰撞检测。[/align]

【客户端如何获取当前服务器列表】

[align=left]客户端中oMenu创建时,除了初始化相关变量,还作为一个UDP服务器,接收局域网内有效的服务器信息。[/align][align=left]oServer周期性发送广播,触发了所有192.168.1.XX客户端(已创建了匹配Port的UDP服务器)oMenu的异步调用事件,取得数据。如下图。[/align]


[align=left]取得数据,加入队列中,随后在绘制事件中绘制服务器列表。如下图。[/align]
https://oebmtq.dm1.livefilestore.com/y2pr67pFZwg0hK5TI_xMfo5YRZHtjDZSbuysY2j_NYjR_8OYUtXWVhGABUkyo222ZQOFZFHoeHCq5r1XZqz8e0G2pttA6cesqFFlYVGIQ8SabU/QQ%E6%88%AA%E5%9B%BE20140616232705.png?psid=1



【客户端在联机游戏中的作用】
[align=left][align=left]无论是作为服务器的玩家,还是加入服务器的玩家,进入游戏房间Level1时创建了oClient,每当发生的输入,便把按键状态值发送给服务端。[/align]
[align=left]https://oea3ew.dm1.livefilestore.com/y2p3nxqlmgPtsjbK5ERQ5Q6qmpfn4WuDs9ncT_aYoh7LjaEyC1BUVu-Brl9xH37_SUGKZol_Vs15NjW5pWamQto4T_cslokSTA2vFU6joTpPaI/QQ%E6%88%AA%E5%9B%BE20140620214147.png?psid=1
[/align][/align]
[align=left]服务器接收,处理数据后,在Step事件中即时发送这些数据给房间内的所有玩家,即触发客户端oClient的异步调用事件,取得处理后的数据(所有玩家的精灵信息)。然后再Draw事件中绘制精灵,不用在意画的是不是自己的精灵。[/align]
[align=left]玩家仅通过oClient移动视野和绘制所有玩家的精灵,而碰撞、寻路、移动等计算由服务器处理。[/align]
[align=left]当然也可以客户端处理后,服务端验证的机制。[/align]
[align=left]不同的策略,不同的机制。[/align]



[align=left]【设备上运行多个未连接服务器的客户端,只有一个收到服务器列表】[/align]
[align=left]问题如下,在一台设备上,仅有一个客户端收到服务器发来的广播消息[/align]


[align=left]其实,是因为接收广播的服务器端口被第一个客户端占用。[/align][align=left]只有删除这个接收广播的服务器,第二个客户端才可以收到服务器信息。[/align]
[align=left]所以,记得切换/结束游戏的时候,删除相关Socket[/align]
[align=left]一般情况下,GMS无法创建联机游戏服务器,是端口被占用。[/align]

【结语】很抱歉,这个系列不能写下去了。
理解了官方DEMO,局域网联机游戏是没问题的。

对于网游,同理,如果要作为MMOG,就看服务器了。
服务器方面的资料也比较多, 这里给些链接。

[font=Helvetica, arial, freesans, clean, sans-serif,]GameMaker studio P2P API[/font]
OpenP2PNet

PDF:网络服务器编程
http://www.gamemake.org/forum.ph ... d&tid=449&fromuid=5


相关博文:csnd

五子棋C#服务器源码:pan.baidu.com/s/1kTKD2lD 密码:zdyj

YOYO论坛:链接


最新回复 (8)
  • Autukill 发表于 2014-06-20 10:08:47
    0 1
    今天,更新了点内容,明天再弄了,我去学SharpDX{:soso_e100:}
  • BloveStorm 发表于 2014-06-18 09:55:47
    0 2
    支持凹凸!
  • 吸血喵 发表于 2014-06-18 12:22:22
    0 3
    同顶~ 虽然喵至少现在还不会涉及到联机
  • Autukill 发表于 2014-06-23 09:01:02
    0 5
    看到这帖子真是高兴!
  • Autukill 发表于 2014-06-24 07:20:57
    0 6
    更新一个GML开源项目
    GameMaker studio P2P API:OpenP2PNet

    https://github.com/RtyDevelopment/OpenP2PNet
  • qazwsxedc 发表于 2015-02-17 01:28:20
    0 7
    求继续啊,这些根本不够啊
  • xiangyabing 发表于 2015-06-09 02:54:40
    0 8
    求继续啊,这些根本不够啊