mac下实现游戏多开

mac下的程序是以包的形式体现的,玩家可以通过双击包的方式打开我们的客户端。当玩家想多开客户端的时候却不能通过再次双击包来完成,因为当已经开启一个游戏客户端的时候再次双击包会将原来的客户端激活到前端,而不会再次开启一个程序。
其实如果玩家双击包下 Contents/MacOS/Conquer 这个真正的可执行文件,还是可以再次开启一个客户端的。这就说明mac下程序多开是可行的。
我们可以通过代码来进行控制,以代码的方式开启另一个客户端,这样不仅没有直接双击可执行文件会出现的控制台,而且是对玩家友好的方式。我们可以添加一个开启新客户端的菜单,来完成多开客户端的功能。

我们的游戏客户端使用了Qt库,通过Qt来开启一个新程序是非常简单的。 QProcess::startDetached("../MacOS/Conquer");

但是经测试发现一个很诡异的问题:如果我们使用父窗口(先打开的窗口),通过此方法创建一个子窗口,当父窗口游戏关闭的时候,子窗口中观察,父窗口中角色并没有退出游戏。经调查发现当父窗口关闭游戏时,虽然有关闭socket的过程,但是可能socket已经被子窗口共享,即对服务器而言这个socket依然连接,并未关闭。

经过新的尝试,发现一个更加完善的开启新游戏窗口的方法:在shell中执行open -n Conquer.app 这条命令就可以开启新游戏窗口。

在代码中,我们可以这样写

::system("open -n Conquer.app");

这里需要注意Conquer.app要是游戏包的绝对路径,此处仅仅是个例子。

这样开启新窗口,两个游戏窗口之间并没有父子进程的关系,不会公用socket,也就不会发生上述问题。

你可能感兴趣的:(mac下实现游戏多开)