我想让我的对象转到 window 的对面

I want to make my object go to the opposite side of the window

我为我的游戏制作了这两个代码(我想制作 Asteroids 的副本,并且当你的飞船离开屏幕的一侧并出现在另一侧时,我想重新创建这种效果)。我已经用下面的代码实现了这一点,但我想知道是否有办法进一步减少我的代码。

感谢您花时间帮助我!

var tama

func _ready():
    tama = get_viewport().size

func _proces(delta):
    if position.x < 0:
        position.x = tama.x
    elif position.x > tama.x:
        position.x = 0
    if position.y < 0:
        position.y = tama.y
    elif position.y > tama.y:
        position.y = 0
##################-or-#####################
func _on_VisibilityNotifier2D_screen_exited():
    if position.y <= 0:
        position.y = tama.y
    else :
        position.y = 0
    if position.x <= 0:
        position.x = tama.x
    else :
        position.x = 0
    pass

我认为您正在寻找的是 Godot 的 wrapf() 功能,它使对象环绕视口而无需手动指定所有位置。这是使用它减少的代码:

onready var tama = get_viewport_rect().size     #Same as declaring in ready function

func _process(delta):
    position.x = wrapf(position.x, 0, tama.x)   #Wraps around viewport horizontally
    position.y = wrapf(position.y, 0, tama.y)   #Wraps around viewport vertically

func _on_VisibilityNotifier2D_screen_exited():
    position.x = wrapf(position.x, -100, tama.x)
    position.y = wrapf(position.y, -100, tama.y)

注意 - 当我对此进行测试时,环绕效果对这两种方法都适用,但我发现不使用 VisibilityNotifier2D 的效果稍差,因此除非有特殊原因需要使用它,否则我建议改用第一种方法。

此外,老实说,我不确定为什么第二种方法中需要 -100 偏移量,但是,当我测试时,它似乎使精灵 "reappear" 在正确的位置之后它离开了屏幕。这可能与我的 window 尺码有关,因此您的结果可能会有所不同。如果大家有更好的解释,请在评论中告诉我。

祝你好运