Изменение переменной Player в зависимости от текущего столкновения - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь изменить скорость передвижения игрока в зависимости от того, находятся ли они в бу sh или нет. Это суть того, что я пытаюсь выполнить. sh:

const Grass = preload("res://World/Grass/Grass.tscn")
onready var grass = Grass.instance()

func move():
    grass = Grass.instance()
    if grass.player_in_grass():
        velocity = move_and_slide(velocity / BUSH_FRICTION_MULTIPLIER)
    else:
        velocity = move_and_slide(velocity)

Проблема, с которой я столкнулся, заключается в том, что я не могу понять, каким должен быть код для проверки. Я попытался создать зону обнаружения игрока для травы, переключая ее значение внутри нее:

var player = null

func player_is_visible():
    return player != null

func _on_PlayerDetectionZone_body_entered(body):
    player = body

func _on_PlayerDetectionZone_body_exited(body):
    player = null

И мой Grass.gd выглядит так:

onready var playerDetectionZone = $PlayerDetectionZone

func player_in_grass():
    if playerDetectionZone.player != null:
        return true
    else:
        return false

В конце концов из этого я получаю сообщение об ошибке:

Invalid get index 'player' (on base: 'Nil').

Ошибка перенаправляет меня на 'if playerDetectionZone.player! = null:'.

Что я делаю не так? Следует ли мне проверять это / делать это другим, более простым способом, о котором вы знаете? Все отзывы приветствуются. Спасибо.

1 Ответ

1 голос
/ 20 июня 2020

Подводя итог:

Ошибка:

Недопустимый индекс получения 'player' (на базе 'Nil').

И строка кода, в которой возникает эта ошибка:

if playerDetectionZone.player != null:

(который, к сожалению, не является частью опубликованного кода).

Эта ошибка означает, что переменная playerDetectionZone имеет значение null. Предполагая, что остальной код соответствует опубликованному, проблема должна быть расположена здесь:

onready var playerDetectionZone = $PlayerDetectionZone

Что-то не так с путем к узлу ($ PlayerDetectionZone). Орфография, заглавные буквы, возможно неправильное положение в дереве. Может быть несколько вещей.

Изменить: Судя по вашему комментарию, это, вероятно, неправильная позиция в дереве. Строка выше работает только в том случае, если узел PlayerDecetionZone является дочерним по отношению к узлу grass (с прикрепленным файлом grass.gd).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...