Вопросы по GDScript

Общие вопросы по скриптовому языку программирования GDScript.
Правила форума
Читайте Правила общения
Аватара пользователя
$noname-
Свой человек
Сообщения: 126
Зарегистрирован: 27 май 2020, 15:44
Откуда: Almaty
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение $noname- »

Ну например на машине при нажатии на кнопку загорается свет
Сперва создай освещение, за тем создай кнопку и создай условие при нажатии кнопки чтоб свет загорался. Если твое освещение это отдельный спрайт то включай и отключай ее видимость
Just $noname-

Rage
Новичок
Сообщения: 5
Зарегистрирован: 01 июл 2020, 09:40
Откуда: Хилок (Заб. край)

Re: Вопросы по GDScript

Сообщение Rage »

$noname- писал(а):
01 июл 2020, 11:07
Ну например на машине при нажатии на кнопку загорается свет
Сперва создай освещение, за тем создай кнопку и создай условие при нажатии кнопки чтоб свет загорался. Если твое освещение это отдельный спрайт то включай и отключай ее видимость
Я сделал то все так, но проблема в том что он горит только тогда когда кнопку держишь кнопку отпускаешь и он тухнет

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 166
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение SkanerSoft »

Создай кнопку (узел Button) и у него в скрипте напиши:

Код: Выделить всё

extends Button

func _pressed():
	light_node.visible = !light_node.visible
light_node - твоя нова света (или сцена, в которой есть свет).
Автор и ведущий канала Godot 3D Russia

Rage
Новичок
Сообщения: 5
Зарегистрирован: 01 июл 2020, 09:40
Откуда: Хилок (Заб. край)

Re: Вопросы по GDScript

Сообщение Rage »

Ай нахер этот годо ниче не понимаю

Аватара пользователя
$noname-
Свой человек
Сообщения: 126
Зарегистрирован: 27 май 2020, 15:44
Откуда: Almaty
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение $noname- »

Rage писал(а):
01 июл 2020, 19:35
Ай нахер этот годо ниче не понимаю
Правильно говоришь, вернись лучше в юнити :arrow:
Just $noname-

Sansuli
Свой человек
Сообщения: 73
Зарегистрирован: 09 июн 2020, 02:46
Откуда: Бишкек
Благодарил (а): 16 раз
Поблагодарили: 41 раз

Re: Вопросы по GDScript

Сообщение Sansuli »

К примеру у меня есть туча нодов на сцене и мне нужно получить ноду которая находится на определенной позиции, как это сделать?
Вариант с перебором всех нод и проверка их позиций не подойдет, и вешание скрипта на ноду тоже.
И еще можно ли найти Area2d мышкой не вешая на него скрипт и не отправляя сигнал из него?

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 166
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение SkanerSoft »

Sansuli писал(а):
08 июл 2020, 21:15
К примеру у меня есть туча нодов на сцене и мне нужно получить ноду которая находится на определенной позиции, как это сделать?
Вариант с перебором всех нод и проверка их позиций не подойдет, и вешание скрипта на ноду тоже.
Перебирать ноды тяжелее, чем перебирать массив.

Код: Выделить всё

# где-то в родительском узле для всех дочерних
var all_nodes = []
а потом в тех нодах, которые надо отслеживать позиции

Код: Выделить всё

func _ready():
	...
	get_parent().all_nodes.append(self)
	...
Ну и потом для проверки не перебирать ноды а перебрать all_nodes.

Код: Выделить всё

var map_nodes():
	for i in all_nodes: # или из любого места обратиться по ссылке
		print('Позиция: ', i.position)

Как-то так. Я у себя в 3D так делал, дает сильный прирост к обработке. Я делал так поиск пути по точкам. Точек может быть больше тысячи на сцене. При поиске пути таким перебором тратилось где-то 1-2 кадра от общего фпс. И то только на момент просчета. А если вынести в соседний поток, то по идее ничего и не потратится. Но потоки я не практиковал.
Автор и ведущий канала Godot 3D Russia

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 166
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение SkanerSoft »

Sansuli писал(а):
08 июл 2020, 21:15
И еще можно ли найти Area2d мышкой не вешая на него скрипт и не отправляя сигнал из него?
Не знаю, как в 2D, но в 3D у себя я обычно делаю рейкаст со скриптом. Им уже пикаю и смотрю попалась ли Area... если да, то работаю с ней.
Автор и ведущий канала Godot 3D Russia

Sansuli
Свой человек
Сообщения: 73
Зарегистрирован: 09 июн 2020, 02:46
Откуда: Бишкек
Благодарил (а): 16 раз
Поблагодарили: 41 раз

Re: Вопросы по GDScript

Сообщение Sansuli »

SkanerSoft писал(а):
09 июл 2020, 09:08
Sansuli писал(а):
08 июл 2020, 21:15
И еще можно ли найти Area2d мышкой не вешая на него скрипт и не отправляя сигнал из него?
Не знаю, как в 2D, но в 3D у себя я обычно делаю рейкаст со скриптом. Им уже пикаю и смотрю попалась ли Area... если да, то работаю с ней.
Спасибо, рейкаст не знал что есть такое.
Да думаю выход с массивом хорош, но у меня была идея использовать 2 массива в одном хранить ноды, в другом координаты. Потом находить в одном массиве координаты и по индексу брать ноду из другого массива. А после хода (у меня пошаговая стратегия) каждый юнит который поменял свое местоположение, находит себя из одного массива и изменяет координату в другом, а новые юниты добавляют себя в конец массива и в другой координату. На всякий случай сделаю проверку в каждом ходе чтобы размеры двух массивов были равны, если не равны, то сделать перепись населения. Хотя если все будет верно написано то такого не должно быть.
Какой вариант будет лучше для производительности? Твой вариант с массивом или мой с двумя?

Аватара пользователя
$noname-
Свой человек
Сообщения: 126
Зарегистрирован: 27 май 2020, 15:44
Откуда: Almaty
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение $noname- »

Sansuli писал(а):
09 июл 2020, 12:08
Какой вариант будет лучше для производительности? Твой вариант с массивом или мой с двумя?
В теории вариант с 1 массивом производительнее т.к процу приходится меньше работать, а ОЗУ меньше хранить
Just $noname-

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 166
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы по GDScript

Сообщение SkanerSoft »

Если учесть, что в массиве будут лежать не сами объекты, а ссылки на них - в памяти это дело занимать будет довольно мало.
Автор и ведущий канала Godot 3D Russia

Egor
Новичок
Сообщения: 1
Зарегистрирован: 08 авг 2020, 19:01

Re: нужна помощь по циклам

Сообщение Egor »

так вот:
я хочу узнать если команда которая выделяла зону цикла в которой будет нужный кода то как я понял он выполняет весь код под собой

Sansuli
Свой человек
Сообщения: 73
Зарегистрирован: 09 июн 2020, 02:46
Откуда: Бишкек
Благодарил (а): 16 раз
Поблагодарили: 41 раз

Re: нужна помощь по циклам

Сообщение Sansuli »

Egor писал(а):
08 авг 2020, 19:07
так вот:
я хочу узнать если команда которая выделяла зону цикла в которой будет нужный кода то как я понял он выполняет весь код под собой
Исходя из своих знаний могу сказать что это возможно только внутренним условием.

Код: Выделить всё

for a in 100:
	if a > 40 && a < 60:
		Doit()
	else:
		Doit2()

#Можно смастерить функцию специально для этого
#Описание аргументов: Количество повторов, Начало выполнения func1, Конец выполнения func1, Объект функции, Функция для выполнения внутри, Функция для выполнения иначе, Общая функция выполнения
for_impr(RANGE, MIN, MAX, OBJECT, func1:String, func2:String, func3:String):
	var func_obj
	for x in RANGE:
		if a > MIN && a < MAX:
			func_obj = funcref(OBJECT, func1)
		else:
			func_obj = funcref(OBJECT, func2)
		func_obj.call_func()
		func_obj = funcref(OBJECT, func3)
		func_obj.call_func()

Ответить