#function #inheritance #overriding #godot #gdscript
Вопрос:
Как переопределить функцию, определенную в родительском сценарии?
Вот мой родительский сценарий:
# Object.gd extends Area2D var id = 0 var coords func _ready(): assign_values() func assign_values(): var a = global_position.x var b = global_position.y #cantor pairing function id = (a b) * ( a b 1) / 2 b coords = global_position
Вот сценарий, который расширяет родительский сценарий. Я пытаюсь перезаписать функцию assign_values() в новом скрипте, чтобы вычислить идентификатор по-другому. Когда я вызываю assign_values в расширенном сценарии, происходит самая странная вещь. Я больше не могу печатать отдельные компоненты вектора координат, хотя тип проверяется, и печать вектора тоже работает нормально.
# Road.gd extends "res://Object.gd" func assign_values(): coords = Vector2(128, 96) var a = coords.x # lt;- Here be Dragons var b = coords.y #cantor pairing function id = (a b) * ( a b 1) / 2 b print(typeof(coords)) # prints 5 -gt; Vector2 type print(coords) # prints (128, 96), looks alright print(coords.x) # Boom! crashes with error Invalid get index 'x' (on base: 'Nil').
Я в недоумении, почему я получаю эту странную векторную ошибку. Примечательно, что все это работает, если я просто напишу новую функцию в расширенном скрипте func assign_new_values(), но я не уверен, что это правильный способ сделать это. Я ожидал, что Годо переопределит функции из родительских сценариев, если они будут просто объявлены снова, но это, похоже, не работает. Как правильно это сделать? Не удалось ничего найти в документации..
Комментарии:
1. Привет, я (к счастью) не могу воспроизвести эту проблему. Я создал новый проект, скопировал и вставил сценарии, которые вы опубликовали выше. Это сработало, как и ожидалось , и вывело значения:
5
,(128, 96)
, и128
.2. Спасибо за попытку! В таком случае это могут быть мои настройки или бог знает что еще. Не с нетерпением жду возможности устранить эту проблему…