26 янв. 2024 г.

Детки и их родителя, а также id

var id = get_instance_id()

var inst = instance_from_id(id)

print(inst.foo) # Prints bar

Все просто, получаем id объекта (ноды), зная id:

Этот идентификатор можно сохранить в EncodedObjectAsID и использовать для получения экземпляра этого объекта с помощью @GlobalScope.instance_from_id .

Далее, проверяем, является ли данный объект, экземпляром другого

is_instance_of(self, Ball)


Добавление узлов в дерево сцены

при добавлении узла в дерево сцены для обратных вызовов будет использоваться следующий порядок: _enter_tree родительского узла, _enter_tree дочерних узлов, _ready дочерних элементов и, наконец, _ready родительского узла (рекурсивно для всего дерева сцены). 

25 янв. 2024 г.

Обновление экрана

Используйте _process(), когда требуется зависимая от фрейма дельта времени между кадрами. Если код, обновляющий данные объекта, должен обновляться как можно чаще, то это самое подходящее место. Здесь часто выполняются повторяющиеся логические проверки и кэширование данных, но все сводится к тому, с какой частотой нужно обновлять оценки. Если они не должны выполняться каждый кадр, то другим вариантом является реализация цикла Timer-timeout.

func _ready():
	var timer = Timer.new()
	timer.autostart = true
	timer.wait_time = 0.5
	add_child(timer)
	timer.timeout.connect(func():
		print("This block runs every 0.5 seconds")
	)
Используйте _physics_process(), когда требуется независимое от кадра время дельты между кадрами. Если коду требуется последовательное обновление данных во времени, независимо от того, насколько быстро или медленно движется время, то это самое подходящее место. Повторяющиеся кинематические операции и операции преобразования объектов должны выполняться здесь.

24 янв. 2024 г.

Подключение к сигналу

 К сигналу можно подключиться при помощи инспектора, там все интуитивно понятно, а можно подключиться из кода.

Например: 


func _ready():

$Node2D/Timer.timeout.connect(_on_timer_timeout)

16 мая 2023 г.

Создание сцены, код

Создание экземпляра загруженного ресурса PackedScene
var scene = load("res://MyScene.tscn")
Предварительная загрузка упакованной сцены:
var scene = preload("res://MyScene.tscn")

Для того, чтобы начать её использовать, нужно вызвать метод instance():
var instance = scene.instantiate()
add_child(instance)
Преимущество этого двухэтапного процесса заключается в том, что вы можете сохранять загруженной упакованную сцену и создавать новые экземпляры на лету. Например, для быстрого инстанса нескольких врагов или пуль.

Также удобно экспортировать сцену (в инспекторе появится соответствующее свойство):

@export var scene: PachedScene

@export var ball_scene: PackedScene = preload("res://ball.tscn") 

Либо добавить сцену путем перетаскивания). 

 

Ссылка на узел

Получить ссылку на узел в сцене можно различными способами.

Имеем спрайт, вложенный в другой спрайт:

Урок по tilemap


 

15 мая 2023 г.

Начало блога о godot. Введение

В марте 2023 года вышел открытый игровой движок Godot 4.0 для создания 2D- и 3D-игр. Движок поддерживает язык задания игровой логики, графическую среду для проектирования игр, систему развёртывания в один клик, анимацию и симуляцию физических процессов, а также встроенный отладчик.

Согласно данным Википедии:
Godot Engine (фр. gó-doh[3]) — открытый кроссплатформенный 2D и 3D игровой движок под лицензией MIT, который разрабатывается сообществом Godot Engine Community. До публичного релиза в виде открытого ПО движок использовался внутри некоторых компаний Латинской Америки[4]. Среда разработки запускается на AndroidHTML5LinuxmacOSWindowsBSD и Haiku и может экспортировать игровые проекты на ПКконсолимобильные и веб-платформы.

На данном движке пользователи могут  сосредоточиться на создании игр, не изобретая велосипед. Игры можно экспортировать одним щелчком мыши на несколько платформ, включая основные настольные платформы (Linux, macOS, Windows), мобильные платформы (Android, iOS), а также веб-платформы и консоли.