Я хочу сделать свой объект go на противоположной стороне окна - PullRequest
1 голос
/ 15 апреля 2020

Я сделал эти два кода для своей игры (я хочу сделать копию Астероидов, и я хочу воссоздать этот эффект, когда ваш корабль уходит с одной стороны экрана и появляется с другой стороны). Я добился этого с помощью приведенного ниже кода, но я хочу знать, есть ли способ еще больше сократить мой код.

Спасибо, что нашли время помочь мне!

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

1 Ответ

1 голос
/ 15 апреля 2020

Я думаю, что вам нужна функция 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 необходимо во втором методе, однако, когда я тестировал, казалось, что спрайт «вновь появлялся» в правильном месте после того, как он исчезал с экрана. Это может быть связано с размером моего окна, поэтому ваши результаты могут отличаться. Если у кого-то есть лучшее объяснение, пожалуйста, дайте мне знать в комментариях.

Удачи

...