- 最新
- 投票最多
- 评论最多
【以下的回答经过翻译处理】 你走在正确的道路上!添加一个网络绑定组件是必须的,以便将实体“绑定”到网络上,从而使其数据得到复制。我之前已经发布了一个简单的示例程序,演示了一个网络化的玩家控制器:https://forums.awsgametech.com/t/networked-player-controller-example/2277/1
这个示例程序有一些需要更新的lua代码,使其能够与1.9一起工作,但如果你认为这对你的游戏有用,我很乐意为你更新它。
它是客户端主导的,每个加入服务器的玩家都有自己控制的角色。
关于你的问题
0.)你是否必须编写自己的C++服务器?
Lumberyard默认附带一个既拿既用的专用服务器,因此,如果你只想使用Lua,就不需要编写任何C++代码。尽管如此,大多数多人游戏都会添加/修改其专用服务器的C++代码,以优化性能并获得更好的安全性。如果你正在制作一个的简单游戏(例如原型),那么你不需要编写任何C++服务器代码。
1.)我没有搞清楚游戏服务器如何终止游戏会话。当我尝试这样做时,你可以使用大厅创建一个会话,但真的没有办法删除一个会话吗?
有C++命令可以从服务器终止GameLift游戏会话,不过在这个多人游戏示例中,专用服务器在关闭之前等待GameLift收到终止消息。因此,在示例中,这意味着客户端发起了会话创建,但是GameLift用来处理会话终止。如果你想让服务器终止GameLift会话,你可以调用AWS::GameLift::Server::TerminateGameSession() (http://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-terminategamesession)
2.)创建的玩家会话也不会断开,这意味着随着每个客户端与游戏会话新连接的创建,活动玩家会话的数量都增加了一个,但即使我终止了客户端程序,也没有减少。
这似乎是玩家错误地被断开而且服务器禁用了断开检测功能。当用户和服务器断开连接时应该调用Aws::GameLift::Server::RemovePlayerSession (line 247 of GameLiftServerSession.cpp in OnReplicaDeactivate).