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