Object 戈多网络同步对象

Object 戈多网络同步对象,object,networking,godot,gdscript,Object,Networking,Godot,Gdscript,大家好,互联网上的人们,我带来了一个问题,我一直在寻找答案,已经有一段时间了 我正在戈多做一个游戏,它有网络/多人游戏。 (我不熟悉网络方面的东西) 我最近添加了一个可拾取项目,当您拾取该项目时,它会给您带来健康,一旦您拾取该项目,它就会被销毁(queue_free()) 该位置在服务器端处理并发送到客户端 问题在于新加入的客户。 如果项目已被销毁,客户端无法知道它已被销毁,并尝试访问其数据以获取其位置。 这将导致错误/崩溃。我不知道如何解决这个问题,因此我请求你们这些天才们的帮助 有没有办法让

大家好,互联网上的人们,我带来了一个问题,我一直在寻找答案,已经有一段时间了

我正在戈多做一个游戏,它有网络/多人游戏。 (我不熟悉网络方面的东西)

我最近添加了一个可拾取项目,当您拾取该项目时,它会给您带来健康,一旦您拾取该项目,它就会被销毁(queue_free())

该位置在服务器端处理并发送到客户端

问题在于新加入的客户。 如果项目已被销毁,客户端无法知道它已被销毁,并尝试访问其数据以获取其位置。 这将导致错误/崩溃。我不知道如何解决这个问题,因此我请求你们这些天才们的帮助

有没有办法让新加入的客户机知道某个对象不再存在于服务器/映射上,因此他不必加载它

以下是在该特定项的每个实例上运行的代码(GDscript):

extends KinematicBody2D

onready var interactZone = $Interactbox
onready var audioPlayer = $AudioStreamPlayer2D

export var ACCELERATION = 300
export var MAX_SPEED = 80
export var FRICTION = 200

var velocity = Vector2.ZERO
var chasing = false

slave var slave_position = position

func _process(delta):
    seek_player()

    if get_tree().is_network_server():
        if chasing:
            var player = interactZone.player
            if player != null:
                var direction = (player.global_position - global_position).normalized()
                velocity = velocity.move_toward(direction * MAX_SPEED, ACCELERATION * delta)
        else:
            velocity = Vector2.ZERO

        velocity = move_and_slide(velocity)
        rset('slave_position',position)
    else:
        position = slave_position

func seek_player():
    if interactZone.can_see_player():
        chasing = true
    else:
        chasing = false

remote func item_pickup():
    PlayerStats.set_health(PlayerStats.health + 1)
    velocity = Vector2.ZERO
    audioPlayer.play()

func _on_Interactbox2_body_entered(body):
    rpc("item_pickup")
    item_pickup()

func _on_AudioStreamPlayer2D_finished():
    queue_free()


这里有一个过于简单的建议:创建项目场景实例。客户端应请求项目的当前状态,作为联接过程的一部分。所有仍在使用中的项目都可以是
InstancePlaceholder。将\u替换为\u instance()
d。这里有一个过于简单的建议:将项目设置为场景实例。客户端应请求项目的当前状态,作为联接过程的一部分。所有仍在使用中的物品都可以是
InstancePlaceholder。用\u instance()替换\u
d。