我想让我的对象转到 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 尺码有关,因此您的结果可能会有所不同。如果大家有更好的解释,请在评论中告诉我。
祝你好运
我为我的游戏制作了这两个代码(我想制作 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 尺码有关,因此您的结果可能会有所不同。如果大家有更好的解释,请在评论中告诉我。
祝你好运