当前,我正在使用Godot的High Level Multiplayer(ENET)生成两个玩家节点(带有KinematicBody2D和Collisions)。由于碰撞导致问题的原因,我不能让玩家在相同的坐标处生成,所以我试图让它们彼此相邻生成。
我在这个pastebin link上放了Player.gd,上面有我要调试的代码。
我遇到的问题是试图让客户端和服务器在播放器场景初始化时设置的坐标处生成播放器。当前,客户端和服务器可以正确定位自己的位置,但是其他播放器在(0,0)处挂出,直到我移动播放器为止。
玩家的动作非常完美,因此即使粘贴了该代码,它也与该问题无关。
客户端的标准输出是
Connecting to Server!!!
Player Connected!!!
Network Master: 151057035
Player ID: 151057035
Client Position - Master: 151057035
Player: 151057035 Set Position: (500, 250)
Own ID: 151057035 Player ID: 151057035
Caller ID: 0
Network Master: 1
Player ID: 151057035
Server Position - Master: 1
Player: 1 Set Position: (300, 250)
Player: 1 Set Position: (300, 250)
Player: 151057035 Set Position: (500, 250)
Own ID: 151057035 Player ID: 151057035
Caller ID: 1
服务器的标准输出是
Hosting Server!!!
Player Connected!!!
Network Master: 1
Player ID: 1
Server Position - Master: 1
Player: 1 Set Position: (300, 250)
Own ID: 1 Player ID: 1
Caller ID: 0
Network Master: 959488417
Player ID: 1
Client Position - Master: 959488417
Player: 959488417 Set Position: (500, 250)
Player: 959488417 Set Position: (500, 250)
Player: 1 Set Position: (300, 250)
Own ID: 1 Player ID: 1
Caller ID: 959488417
答案 0 :(得分:0)
基本上,要告诉客户端生成什么坐标,您需要让服务器告诉客户端要使用什么坐标。
我自己的个人代码涉及玩家注册和跟踪,因此仅粘贴完整代码太复杂了。相反,我发布了一个大大简化的生成代码(甚至不包括多世界支持)
示例代码
# Server Code
master func spawn_server(net_id: int, coordinates: Vector2):
rpc_unreliable_id(net_id, "spawn", coordinates) # Godot's RPC handles ensuring packet delivery just like TCP, but with less overhead.
# Client Code in Same File
puppet func spawn(coordinates: Vector2):
player_object.position = coordinates