Если оба сценария Godot A и B расширяют сценарий C, имеют ли A и B те же имена переменных, что и в C? - PullRequest
1 голос
/ 30 мая 2020

Я новичок в движке Godot.

Если сценарии GD A и B расширяют сценарий C, а var_ c - это переменная в сценарии C, это var_ c используется в A отличается от var_ c, используемого в B?

Итак, мои сценарии A и B расширяют сценарий C. A и B представляют разные состояния в конечном автомате. Например, в демоверсии конечного автомата, поставляемой с первоначальной версией Godot (от Steam), скажем, C - это motion.gd, а A, B - move.gd и jump.gd.

I Я представляю переменную var_ c в C в надежде, что она «разделяется» между A и B в том смысле, что если var_ c обновляется в состоянии A (скажем, я пишу

var_c = 123

в сценарии A), и когда я вхожу в состояние B, я sh для доступа к обновленному значению var_ c как

if var_c == 123:
     print("A and B seem to share the same value of var_c!")

К сожалению, это похоже на var_ c, которое я вызываю состояние A не зависит от var_ c, вызванного в состоянии B. Возможно, я ошибся, но я хочу знать, правда ли это в целом.

Используется ли var_ c в A и var_ c используется в B то же самое? Если они разные, как мне получить доступ к одному из другого? Как A.var_ c и B.var_ c?

Спасибо.

1 Ответ

1 голос
/ 30 мая 2020

Если каждый сценарий имеет уникальное имя (например, examplescriptA.gd и examplescriptB.gd), содержащиеся в нем переменные должны быть локальными для этого сценария, поскольку Годо на самом деле не распознает глобальные переменные в самом строгом смысле этого слова. Если вам нужен эквивалент системы глобальных переменных (ie: набор переменных, к которым можно получить доступ и обновить из любого другого скрипта), вам следует изучить использование singletons.

Документация здесь - https://docs.godotengine.org/en/stable/getting_started/step_by_step/singletons_autoload.html

Я также читал о понятии «расширения» скрипта, и, похоже, это возможно. Кажется, вы можете изменить наследование узлов в сценарии, чтобы расширить другой сценарий (например, extends "res://your_script.gd"). Единственная причуда, похоже, в том, что вам нужно вызвать .ready() в функции _ready() "родительского" скрипта. Однако у меня не было возможности проверить это сам, и я не уверен, что он работает в обоих направлениях - для этого я бы выбрал go одноэлементный маршрут. Тем не менее, если вам нужна лучшая ссылка на полное обсуждение, из которого я взял это, вы можете найти его здесь: https://godotengine.org/qa/2391/can-you-inherit-from-a-script

Надеюсь, вы найдете хотя бы один из них полезным.

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