Сохранен 502
https://2ch.hk/gd/res/747202.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Godot #21.06

 Аноним OP 08/06/21 Втр 13:09:56 #1 №747202 
1623146992546.png
Добро пожаловать в тред любви, взаимопомощи и кода ссылками на https://pastebin.com

Краткий гайд по вкату в движок:
1. Читать документацию.
2. Качать примеры.
3. ПРОФИТ!

Ссылки
Новости движка: https://godotengine.org/news/
Скачать движок: https://godotengine.org/download/ или http://store.steampowered.com/app/404790/Godot_Engine/
Теперь прямо онлайн - можно и с дивана: https://godotengine.org/online/godot.tools.html
FAQ: https://docs.godotengine.org/ru/latest/about/faq.html
Документация: https://docs.godotengine.org/ru/latest/ https://docs.godotengine.org/en/stable/
Примеры качаются прямо в движке через свой магазин в отдельной вкладке AssetLib. Там есть всё - от платформера до чата.
Игры, созданные глобальными кириллами: https://steamcommunity.com/app/404790/discussions/0/412448792354265655/
Изумительный Годот: https://github.com/Calinou/awesome-godot - подборка дополнений, модулей и минишоукейс от одного из авторов.
Аддон для диалоговой системы: https://github.com/coppolaemilio/dialogic

Для любителей пощекотать конпеляцию
Бинды LUA: https://github.com/perbone/luascript
Бинды JS: https://github.com/GodotExplorer/ECMAScript

Годнота от анона
- Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Имя файлу можно задать любое. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории. Для запущенного таким образом проекта папка res:// становится доступна для записи (если это не ограничено правами доступа в системе).
- В версии 3.2 появилась возможность прикреплять pck к бинарнику. Не появилась, а вернулась - 2.х умел. Бриллиант для любителей однофайлового продукта!
- Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot
- Тест-бенчмарк:
- - Веб-версия - https://govdot.herokuapp.com
- - Вишмастер для винды - https://govdot.herokuapp.com/4Anon.rar

Предыдущий: >>734420 (OP)

Архивный: https://arhivach.net/thread/664976/
Аноним 08/06/21 Втр 13:36:06 #2 №747206 
Спасибо чуваку напомнившему про камеру. Все получилось. Нормально вычисляю через трансформы положение элементов.
Аноним 08/06/21 Втр 20:52:20 #3 №747311 DELETED
>>747206
Я вообще нерекомендую CanvasLayer, странный он какой то. Да я знаю что в новичковой документации его рекомендуют для гуя, но то ли это легаси, то ли он для простых игр, типа в платформере очки показывать - для более сложных взаимодействий с гуем он требует напильника.
Аноним 08/06/21 Втр 21:03:48 #4 №747317 
>>747311
Хмм. А что использовать? Просто контрол ноды в главную сцену вставлять?
Аноним 08/06/21 Втр 21:07:29 #5 №747318 DELETED
>>747317
В прошлом треде писал как у меня
ВьюпортКонтейнер - Вьюпорт нужного размера - инстанс сцены с уровнем, камерой и игроком
После него все гуи ноды какие нужны.
Вроде все просто, быстро и удобно. Единственное что надо понастраивать ресайз окна, если планируется.
Аноним 08/06/21 Втр 23:00:39 #6 №747353 
>>747318
Чот сложна.
>>745023 →
> Вот я хочу, перемещать камеру по экрану, но GUI оставался на месте. Поместил интерфейс в узел CanvasLayer, который специально для этого, но теперь я не могу кликать сквозь этот CanvasLayer. А как?
Сорян за поздний ответ. У тебя в канваслеере по умолчанию первая контрол-нода разворачивается на всю доступную площадь (Макет -> Полный прямоугольник). И! И перехватывает события мыши на себя.
>>747311
> CanvasLayer, странный он какой то
Проблем не в нём, а в вышеописанном. У меня были поначалу проблемы с этим. Я их пофиксил делая первую контрол-ноду в слое размером в пиксель (Макет -> Слева сверху (для лево-верхнего виджета, например)
>>745075 →
> у CanvasLayer нет галочки с инпутом
Разумеется нет. Потому что она есть у потомков контрол-ноды, которые ты там помещаешь.
> Могу предложить не пользоваться канвас лейром.
А я предлагаю разобраться в вопросе...
>>747318
...а не городить велосипед с вьюпортом, который вообще не для этого.
Аноним 08/06/21 Втр 23:27:13 #7 №747378 DELETED
>>747353
> в канваслеере по умолчанию первая контрол-нода разворачивается на всю доступную площадь
Да, ты прав, я не разбирался и нагугли похожие нерешенные проблемы.
Видимо если ставить первый контрол на весь экран и ставить ему mouse filter = ignore то будет работать и гуй, и клики в игровую сцену.
Но с тем что вьюпорт не для этого - не согласен. Я им многие фичи уже запиливал, с ним все прозрачно. Например рисование шлейфа за планетами, всякие трюки с прозрачностью по z глубине, обводки выделенных объектов, рендер анимаций в 3д текстуры и так далее, так что это мощный инструмент который стоит изучить.
Аноним 08/06/21 Втр 23:33:00 #8 №747380 
Еба
Аноним 09/06/21 Срд 01:59:30 #9 №747408 
Аноны, как начать строить комьюнити для своей игры?
Аноним 09/06/21 Срд 02:17:25 #10 №747410 DELETED
>>747408
Ну ты конечно ночью с козырей зашел.
Игра то какая хоть? Интеллектуальная или аркадная?
Аноним 09/06/21 Срд 02:27:20 #11 №747411 
>>747410
Интеллектуальная под Андроид.
Ссылочку тут оставлю на браузер, если у тебя хром, погамаешь.
https://gotm.io/2ch-studio/hbt
Комьюнити нужно исключительно чтобы находить неудобства, к которым у меня глаз замылен. Ну и мб когда куплю подписку девелопера в гуглсторе иметь пару скачавших.
Аноним 09/06/21 Срд 02:50:54 #12 №747412 
>>747408
А на итчио залил?
Аноним 09/06/21 Срд 02:52:37 #13 №747414 
>>747411
Не, на итч не заливал. Какие там правила для залива? Если полотенце на пол бросят, подбирать?
Аноним 09/06/21 Срд 02:53:47 #14 №747415 
>>747411
Ну ты колорист конечно
Аноним 09/06/21 Срд 03:06:08 #15 №747417 
>>747415
У меня Моник старый половину цветов не передаёт. Это сарказм такой?
Аноним 09/06/21 Срд 11:05:51 #16 №747438 
>>747417
Ну сарказм да
Аноним 09/06/21 Срд 12:20:23 #17 №747445 
>>747202 (OP)
>Изумительный Годот
Зачем давать левый необновляемый форк-репо, если есть оффициальный обновляемый оригинал https://github.com/godotengine/awesome-godot
Аноним 09/06/21 Срд 17:28:26 #18 №747514 
>>747438
Ты не мог бы сказать точнее что там не так? Потому что я явно не понимаю. Вроде ж норм.
Аноним 09/06/21 Срд 19:42:18 #19 №747531 
Хз зачем, но перекачусь!
Так и не сделал гребанное меню в игре(
Аноним 09/06/21 Срд 20:29:23 #20 №747539 
>>747531
АААйййййййййй
Аноним 10/06/21 Чтв 22:29:07 #21 №747712 
>>747411
Да это ж годус на минималках
Аноним 11/06/21 Птн 00:54:04 #22 №747756 
У при запуске начинается цепочка вычислений, обмена сигналами между узлами и синглтонами. Например, расчитывается что-то в синглтоне в _ready, отправляется сигнал, затем в скрипте какого-то узла по сигналу еще что-то расчитвается, отправляется другой сигнал, в другом скрипте расчитывается по этому сигналу расчитывается из другого синглтона. Иногда yield(get_tree(), "idle_frame") помогало, но что-то больше не помогает. Почему так и как избегать всего этого? Пробовал
>yield(get_tree().root, "ready")
но у меня все сломалось от такого.
А как дождаться что все, что есть загрузилось?
Аноним 11/06/21 Птн 06:50:32 #23 №747781 
Screenshot3.jpg
Здесь анон обещал запустить серию туторов на ру в 3D и с С# скриптом. Как там успехи?
Аноним 11/06/21 Птн 12:26:07 #24 №747806 
>>747378
Принимаю возражения. Постил сгоряча. Извиняюсь. Изучу матчасть по вьюпортам.
Аноним 11/06/21 Птн 12:33:52 #25 №747808 
>>747756
> А как дождаться что все, что есть загрузилось?
Опрос дерева построен так, что дерево опрашивается рекурсивно, при этом в первую очередь выполняются потомки, затем предки. То есть, если рассматривать выполнение колбэка ready, он сначала выполнится для всех листьев, затем для всех ветвей, затем для ствола, и наконец для корня. То есть, если у тебя выполнилось ready для корневого узла, ты можешь быть уверен, что все остальные узлы уже ready выполнили.
Аноним 11/06/21 Птн 12:36:18 #26 №747813 
>>747756
Yeld может ждать выполнения функции. Если ты конечно не с сигналами работаешь. Если с сигналами, тогда знаю только про ожидание сигнала.
Аноним 11/06/21 Птн 12:50:31 #27 №747816 
>>747756
Путаница какая-то. Вот поэтому и рекомендуется предпродакшен и диздок с как можно более точным и полным описанием, что откуда и куда. Без этого получится как у при запуске.
Аноним 11/06/21 Птн 13:31:54 #28 №747875 DELETED
>>747781
Где то недельку надо еще на планирование и подготовку, увы
Можешь пока предлагать темы - я думаю начать с чего нибудь киперказуального либо простенькой РТС.
Аноним 11/06/21 Птн 13:44:32 #29 №747877 DELETED
>>747756
А в чем проблема? По твоему описанию, когда что-то рассчиталось, оно отправляет сигнал - это запускает вычисления, когда они закончатся - отправляется другой сигнал, и так далее, у тебя получается цепочка, значит тебе достаточно подписаться на самый последний сигнал после самого последнего вычисления.
Если же у тебя задача узнать когда закончатся несколько параллельных вычислений, то заведи массив или словарик и отмечай там каждый принятый сигнал, и когда совпадет с требуемым - значит все загрузилось.
Например:
var required = { "signalA": true, "signalB": true }
func onSignalA(): required.erase("signalA"); checkAll()
func onSignalB(): required.erase("signalB"); checkAll()
func checkAll(): if required.size() == 0: emit_signal("all_loaded")

Если же все это непонятно, то вместо yield(get_tree(), "idle_frame"), который ждет всего 1 кадр, можно просто завести таймер на 5 секунд с фейковым экраном загрузки, я так делал :3
Аноним 11/06/21 Птн 16:04:45 #30 №747898 
>>747877
>Если же все это непонятно, то вместо yield(get_tree(), "idle_frame"), который ждет всего 1 кадр, можно просто завести таймер на 5 секунд с фейковым экраном загрузки, я так делал :3
Пиздец :D
Аноним 11/06/21 Птн 16:14:49 #31 №747900 
>>747875
Предлагаю любую популярную 2д игру в 3д.
Начать с аркадных гоночек вид сверху.
Потом если не надоест платформер.
Затем РПГ

Стратегии не советую, сложно для понимания, да и сам жанр умирает, но если начнёшь ты будешь первым на ютубе среди ру и анг кто пилит тутор по РТС.
Аноним 11/06/21 Птн 17:50:20 #32 №747923 DELETED
>>747900
Да, надо попроще что-то для начала.
sage[mailto:sage] Аноним 11/06/21 Птн 18:34:24 #33 №747925 
>>747900
геймплейно 2д и 3д абсолютно разные
Аноним 11/06/21 Птн 18:40:54 #34 №747926 DELETED
>>747925
Вот прям абсолютно??
sage[mailto:sage] Аноним 11/06/21 Птн 20:20:01 #35 №747941 
>>747926
да
геймплейно 2д и 3д сильно отличаются, любой кто переходил из 3д в 2д или наоборот это знает
но никто не мешает делать 2д игры в 3д, только не надо себе врать!!!
Аноним OP 11/06/21 Птн 22:42:41 #36 №747951 
https://www.youtube.com/watch?v=fO_4Ec9laQM
Аноним 12/06/21 Суб 01:47:48 #37 №747959 
почему у меня функция, которая вызывается по сигналу, срабатывает раньше, чем реади в том же скрипте, что и функция?
Аноним 12/06/21 Суб 02:28:13 #38 №747960 
Безымянный.png
Как такое возможо, пацаны?
Аноним 12/06/21 Суб 02:49:26 #39 №747963 DELETED
>>747960
Без брейкпоинта нещитово
Аноним 12/06/21 Суб 03:15:52 #40 №747964 
>>747900
>да и сам жанр умирает
Э
Аноним 12/06/21 Суб 08:09:36 #41 №747971 
>>747951
Мощно. Это вулкан?
Аноним 12/06/21 Суб 09:11:09 #42 №747978 
>>747964
Назови пару стратегий РТС за прошлый гол, кроме Тоталов, рефоржа вара и ремастера СинСи.
Аноним 12/06/21 Суб 10:56:52 #43 №747988 
>>747539
Чего ты айкаешь? Мне и так грустно.
>>747986
Зачем мне следовать за тобой, если у меня уже есть концепт своей игры? Он куда проще, и профита даст больше. Только сука как же я ненавижу программирование. Гребаный ад где все следует по правилам, которые ты никогда не поймешь!

Ебал я в рот ебучие движки, с ебучими языками!
Аноним 12/06/21 Суб 11:14:01 #44 №747994 
>>747988
Ты только что поговорил с копипастой спам-бота.

А по теме, программирование намного проще освоить, чем рисование, моделирование и музыку. Тебе не нужно надрачивать скилл годами тяжёлого труда, ты просто читаешь правила в книжке со списком правил (ака мануал) и затем используешь эти правила для составления программы. Не нужно даже наизусть помнить, достаточно знать где можно найти забытое.

Если очень трудно освоить общие принципы программирования, поиграй в игры для маленьких детей, в которых нужно с помощью кнопок задать программу виртуальному роботу, чтобы он решил головоломку.
Аноним 12/06/21 Суб 11:44:35 #45 №748000 
>>747988
Чел, это же бот.
Аноним 12/06/21 Суб 11:50:40 #46 №748001 
image.png
>>747994
>Ты только что поговорил с копипастой спам-бота.
Да насрать, я просто хотел выговорится.
>А по теме, программирование намного проще освоить, чем рисование, моделирование и музыку.
Нихера чел! В рисовании ты когда делаешь, сразу видишь что у тебя выходит. Даже если ты совершил ошибку, тебе не вылезет окно в программе "ОШИБКА ОШИБКА, ИСПРАВТЕ ТО ЧТО ВЫ СДЕЛАЛИ!"
>Если очень трудно освоить общие принципы программирования, поиграй в игры для маленьких детей, в которых нужно с помощью кнопок задать программу виртуальному роботу, чтобы он решил головоломку.
Да и само программирование скучная херня, которая отбирает больше сил и нервов, чем принесения удовольствия.
>Не нужно даже наизусть помнить, достаточно знать где можно найти забытое.
Это можно отнести к чему угодно в наши дни, к рисованию в частности.
Аноним 12/06/21 Суб 13:36:13 #47 №748028 
>>747900
> да и сам жанр умирает
Я бы не сказал, что жанр умирает. Скорее кризис идей. Ведь на рынке сейчас ни одной нормальной популярной пошаговой стратегии. А вот те же парадоксовские игры, типа стеллариса - вполне себе стратегии, и вполне себе популярные. Даже индюшатина, типа northgard, нашла свою аудиторию, причём немалую. Но игра нормально играется в первые часов 10. Потом надоедает, потому что ничего нового не привнесли.
Та же история, что с wow и hs. Они не были основоположниками мморпг и ccg, но привнесли что-то, что заставило прочих равняться на близзов и популяризировало соответствующие жанры. А сейчас близзы стагнируют в боязни, ка бы чего не случилось, и не хотят рисковать в попытках выпустить новый мир и геймплей, а переключились на ремастеры.

Вот и с rts и tbs, мне кажется. Выпусти новую, или, даже правильней сказать, старую механику с взглядом с нового ракурса - и будет успех. Не все могут бесконечно играть в ск, стронгхолд, homm3 и дисайплсов. И вот этот перетекающий народ и есть шанс заново запустить жанр to the moon.
Аноним 12/06/21 Суб 13:55:24 #48 №748036 
>>747959
Подозреваю, что реди срабатывает при инстанцировании/загрузке объекта, куда прицеплен скрипт, либо если скрипт грузится в проект. Но это не точно. Я не годот эксперт и в треде сам на правах вопрошающего.
Аноним 12/06/21 Суб 16:30:51 #49 №748058 DELETED
>>747959
Может быть поэтому?
Аноним 12/06/21 Суб 18:12:48 #50 №748070 
>>748001
>В рисовании ты когда делаешь, сразу видишь что у тебя выходит.
Ага. И выходит обычно говно. И ты понимаешь, что это говно. Но совершенно не понимаешь, почему конкретно говно, и как переделать говно в конфетку. А ведь говнографика не выполняет свою главную задачу - вызывать какие-то эмоции, которые задумывались рисователем. Страшные сцены будут выглядеть смешно, серьёзные сцены будут выглядеть нелепо, милые сцены будут выглядеть отвратно, смешные сцены будут выглядеть постыдно и так далее. А говнокод, пусть и говно, но свою главную задачу решает. И пользователь никогда не узнает, что его любимая программа состоит из говна, потому что он её код никогда не увидит, а если даже увидит, то не сможет понять, почему он говно. Да и ты сам, когда учишься кодить, не знаешь, говнокод это или не говнокод, поэтому не можешь себя критиковать, а в рисовании ты прекрасно знаешь как выглядит говно, и критикуешь себя за рисование говна. Короче кодинг проще.

>Даже если ты совершил ошибку, тебе не вылезет окно в программе
Вот именно! Компилятор тебе по-дружески укажет на ошибку в коде, даст направление, в котором нужно искать, практически ссылку на страничку в руководстве. И ты её исправляешь, потому что ты либо уже знаешь как это исправить, либо загуглишь и по первой ссылке найдёшь решение. А в рисовании ты можешь нарисовать что угодно и программа тебе ничем не поможет, ей вообще без разницы что у тебя получится, она не может сказать тебе, где ты ошибся, почему ошибся и как это исправить. И никто не скажет точно, каждый скажет свою вкусовщину и не сможет ясно и чётко ответить. Это кошмар какой-то, ты рисуешь говно и понимаешь что это говно, но никто не может тебе помочь исправить ошибки. А компилятор иногда тебе прямым текстом говорит: вот здесь замени А на Б и всё заработает, компилятор умный и добрый.

С другой стороны, если у тебя куча EAV (ошибка доступа к памяти), тогда просто не лезь писать код, пока не продумал структуру программы и всю работу с данными. Если ошибка со стороны библиотеки - обращайся к руководству библиотеки, и т.д. Если ошибка логическая (программа работает, но ответ неправильный) - опять же думай головой, решение где-то близко. А в рисовании сколько ни думай, внутренний критик говорит только "это говно". Даже прочитав теорию, всё равно не помогает...

>Да и само программирование скучная херня, которая отбирает больше сил и нервов, чем принесения удовольствия.
Скорее всего ты просто берёшься за непосильные задачи, которые намного выше уровня твоего навыка. Либо это просто личное. Мне нравится видеть, как из ничего появляется и развивается рабочая программа, способная самостоятельно выполнять то, что без неё тебе пришлось бы делать вручную, долго и трудно. Это как рождение живого существа, которое постепенно взрослеет и учится новым навыкам, а потом помогает тебе, отвечает заботой в ответ на заботу. А картинка - ну вот ты её нарисовал, положил в папку и всё, будет лежать и занимать место или пылиться на полке, толку от неё никакого, одни страдания, стыд и самобичевание.
Аноним 12/06/21 Суб 19:00:38 #51 №748076 
image.png
>Либо это просто личное
p.s. Пишу в начале, потому что концовка зачетная. Мне нравится рисование своей простотой, а...
"Да и само программирование скучная херня, которая отбирает больше сил и нервов, чем принесения удовольствия."

>>748070
>И ты понимаешь, что это говно. Но совершенно не понимаешь, почему конкретно говно, и как переделать говно в конфетку.
Как раз наоборот, с помощью анализа ты можешь спокойно понять где и что нужно поправить.
>А говнокод, пусть и говно, но свою главную задачу решает.
Я в ремпае пока каждой строчке отступы не сделал, оно мне игру не запускало!
В годод же я скопировал код из инета, решив вставить его в свой проект, но нихуя не работает! Я его написал не туда куда нужно, а как делать по другому я не знаю. И все, иду нахуй тут же, посмотрев на весь проект целиком я могу только закрыть и пойти спрашивать программиста почему у моего перса спец атаки не работают! Он же тоже НЕ БУДЕТ ЕБАТЬ ПОЧЕМУ, он на другом языке работает, а на годот ему похуй!
>Короче кодинг проще.
Его проще забросить, и не вспоминать никогда! Тут согласен на все сто!
>Вот именно! Компилятор тебе по-дружески укажет на ошибку в коде, даст направление, в котором нужно искать, практически ссылку на страничку в руководстве.
Я скопировал чужой код, так же для спец приема, вставил. Ничего не работает! Почему? Я мне пк не говорит! Молчит в тряпочку! Видит код, а про себя думает "Вот я его вижу, но ничего не сделаю. Пусть он помочиться, перепишит все там нахуй!" Ахуеть в крысу он тебе не поможет. А за точку которую ты случайно поставил, осудит и обоссыт!
>А в рисовании ты можешь нарисовать что угодно и программа тебе ничем не поможет, ей вообще без разницы что у тебя получится, она не может сказать тебе, где ты ошибся, почему ошибся и как это исправить. И никто не скажет точно, каждый скажет свою вкусовщину и не сможет ясно и чётко ответить. Это кошмар какой-то, ты рисуешь говно и понимаешь что это говно, но никто не может тебе помочь исправить ошибки. А компилятор иногда тебе прямым текстом говорит: вот здесь замени А на Б и всё заработает, компилятор умный и добрый.
Если тебя палками не бьют, по твоему это похуизм?! Программе не важно кто и что ты за человек, и по этому она тебя не осуждает! И если ты будешь общаться не с ясельной группой, нормальные худы скажут "Вкусовщины собой нету, и даже в абстракционизме есть правила, которыми пользуются и ОСТАЛЬНЫЕ ХУДОЖНИКИ!" Та же самая композиция, по твоему если её сделать плохо - это будет вкусно?
>Даже прочитав теорию, всё равно не помогает...
Я бывал на уроках информатики, и читал тамошние учебники, выполнял от туда задания. Что такое переменная?! Я не знаю что такое переменная! А построение примерные пропорции лица я запомню на все оставшуюся жизнь. Потому что я чужие лица смотрю каждый день.
>Скорее всего ты просто берёшься за непосильные задачи, которые намного выше уровня твоего навыка.
Да я готов и три в ряд сделать, только чтобы там были вн вставки.
>Мне нравится видеть, как из ничего появляется и развивается рабочая программа, способная самостоятельно выполнять то, что без неё тебе пришлось бы делать вручную, долго и трудно. Это как рождение живого существа, которое постепенно взрослеет и учится новым навыкам, а потом помогает тебе, отвечает заботой в ответ на заботу.
Ага, гомункул гребаный который будет тормозить и пускать слюни из рта. Я таких стараюсь в подвале старом харде держать, морить голодом пока они сами не вымрут. Но они пожирают друг друга, регенерируя оторванные конечности.
>А картинка - ну вот ты её нарисовал, положил в папку и всё, будет лежать и занимать место или пылиться на полке, толку от неё никакого, одни страдания, стыд и самобичевание.
Картина попадает в сеть из твоего пера, собирая толпу людей которых зацепили твои взмахи кисточкой! Грациозное палатное которое получает большое внимание, разносясь по разным соцсетям с ссылкой на автора оригинала. Зрители кормят художника деньгами и овациями! А конкуренты и коллеги репектуют, ожидая твой следующий шаг к вершине мастерства!
Аноним 12/06/21 Суб 19:05:34 #52 №748077 DELETED
>>748001
Художникам проще рисовать, логикам программировать, никакого открытия тут нет.
Программирование не скучная херня, а интересное и веселое занятие, примерно как решать головоломки, или строить из лего.
А вот мне лично рисовать скучно - я не умею и это такое мучение, когда надо выдавить из себя N единиц контента, текстур, спрайтов

В программировании есть такая фишка, как диаграммы. Трюк заключается в том, что если тебе сложно, нет нужды держать все в голове. Ты можешь нарисовать схему где опишешь кто кому посылает сигнал и когда, к примеру.
Аноним 12/06/21 Суб 19:14:52 #53 №748080 DELETED
>>748076
В 20 веке когда я изучал погроммирование по книжкам, там описывали какие то страшные аналогии что такое переменная. Например это ящик в картотеке. А если я блджад никогда не видел картотек и их боюсь?
Но в 21 веке в окружении техники и интернета сложно не знать что такое переменная. Это любое поле, которое имеет постоянное название, но разное содержание. Вот ты когда платишь картой, у тебя списывают со счета. А сам счет не меняется. Значит, сумма на счете - переменная. Ты вводишь пароль когда заходишь в почту. Пароль ты меняешь, а само поле так и называется пароль. И так далее.
Аноним 12/06/21 Суб 19:17:20 #54 №748083 
>>748076
Годот пишет всегда, когда возникает проблема. Ну или рассказывай какой код использовал, поможем
Аноним 12/06/21 Суб 19:30:20 #55 №748089 
image.png
Привет, годотчикам! Я балуюсь и делаю рогалик для себя и хочу накатить тайлы https://opengameart.org/content/dungeon-crawl-32x32-tiles-supplemental там они предоставляются в виде отсортированных по папочкам, и в виде одного большого изображения. Проблема в том, чтобы всё это загнать в один тайлсет: либо я добавляю по одному спрайту и получаю огромную кучу, в которой нужно сразу записывать в какую нибудь глобальную переменную айдишники, чтобы не забыть, либо выделять на одном огромном изображении нужные мне атласы и автотайлы. Не то чтобы я был против, но я не понимаю как сделать атлас на нескольких строчках с разрывами как на пике. Делать несколько атласов для одного тематического набора тайлов кажется сомнительным решением и костылём, который аукнется в будущем. Посоветуйте выход из ситуации, пожалуйста!
Аноним 12/06/21 Суб 19:36:50 #56 №748093 DELETED
>>748089
Перенарежь саму картинку, можно склеивая из "отсортированных по папочкам"
Аноним 12/06/21 Суб 19:38:57 #57 №748094 
>>748093
Инструмент для этого не посоветуешь? А то я пробовал гуглить - какие-то все не очень варианты были
Аноним 12/06/21 Суб 19:41:23 #58 №748095 
>>748077
так так вот это интересно
Аноним 12/06/21 Суб 19:44:20 #59 №748096 
>>748094
попробуй ASU
Аноним 12/06/21 Суб 19:45:27 #60 №748097 
>>748096
alferd spritesheet unpacker
Аноним 12/06/21 Суб 19:48:51 #61 №748098 
image.png
>>748083
Тут не код.
Из последнего я скопировал стены, которые не позволяют моему персонажу падать в пустоту сквозь поле, и сетку я сделал таким же образом. Но, открыв файл через несколько недель решил сделать тоже самое во круг поле, скопировав блок стоящий на сетке. Но итогу правая стенка не пропускает игрока, левая и задняя пропускают. Что не так? Только всевышний знает!
>>748080
Окей.
>>748077
>Художникам проще рисовать, логикам программировать, никакого открытия тут нет.
Ты это тому скажи.
>Ты можешь нарисовать схему где опишешь кто кому посылает сигнал и когда, к примеру.
Мне эти схемы не о чем не говорят. Я в них могу видеть только ответвление по вн, или же семейное древо.
Аноним 12/06/21 Суб 19:49:21 #62 №748099 DELETED
>>748094
Извини я такое в консольке imagemagick делаю
https://stackoverflow.com/questions/20737061/merge-images-side-by-sidehorizontally
Аноним 12/06/21 Суб 19:51:17 #63 №748102 
>>748097
>>748099
Спасибо, выглядит полезно
Аноним 12/06/21 Суб 20:00:58 #64 №748105 
>>748098
Скрипты к стенкам приклеены? Попробуй развернуть их на 180 градусов для прикола
Аноним 12/06/21 Суб 20:20:37 #65 №748107 
>>748105
Пробывал, тоже самое. Если проблема со скриптами, почему правая стенка работает как надо?
Аноним 12/06/21 Суб 20:20:46 #66 №748108 DELETED
>>748098
За столкновения отвечает физический коллайдер.
Вот на скрине я его немного сдвинул для наглядности.
Если ты включишь вот эту галочку, то будешь видеть их даже в игре, даже если сам объект сделаешь невидимым.
Просто могло получиться так, что ты скопировал только визуал, а физику не скопировал, или поменял размер физического коллайдера, а они поменялись все вместе. Чтобы такого не происходило, после копирования надо нажать в свойствах коллайдера кнопочку "Make unique"
Аноним 12/06/21 Суб 20:32:47 #67 №748109 
>>748108
Понятно, спасибо что написал об этом. Но сейчас уже нет желания открывать и править все это.
Аноним 12/06/21 Суб 20:40:12 #68 №748111 
>>748076
>с помощью анализа ты можешь спокойно понять где и что нужно поправить.
Не помогает оно, и так двигаешь, и эдак, а оно всё равно не то. Как в меме с унитазом, из стороны в сторону двигаешь и всё не то.

>Я в ремпае пока каждой строчке отступы не сделал, оно мне игру не запускало!
Есть такое выражение: RTFM! То есть читай грёбаный мануал! Наверняка не читал вообще или невнимательно.

>В годод же я скопировал код из инета, решив вставить его в свой проект, но нихуя не работает
Ну вот представь что ты скачал чужие фотки памятников, склеил в пейнте и удивляешься почему у тебя не получилось аниме в стиле 90-х с озвучкой и мерчендайзом. Действительно, почему? Да потому что так дела не делаются. Ты должен разумно подходить к разработке, а не бессознательно копипастить рандомные фрагменты чужих проектов. Тем более в GDScript важны отступы, на один отступ ошибёшься и код уже что-то другое делает, при этом он может запускаться и работать, но результат будет неправильным (но это не во всех языках так). Короче нужно учиться, учиться, и ещё раз учиться, а потом сознательно писать свой собственный код своими руками.

>он на другом языке работает,
Большинство ЯП очень похожи друг на друга из-за того, что парадигма одна - императивная. Программист, владеющий одним императивным языком, без труда поймёт код на другом императивном языке, и даже может найти некоторые ошибки. Но да, в контексте движка всё сложнее, ошибка может не касаться кода, ты мог что-то другое неправильно сделать.

>Я скопировал чужой код, так же для спец приема, вставил. Ничего не работает! Почему?
Потому что ты:
>скопировал чужой код
>скопировал
>СКОПИРОВАЛ
Вот почему.

>Вкусовщины собой нету
Ну да, конечно. Аниме-хейтеры назовут любую картинку в стиле аниме говном. А мне, например, наоборот, от классической живописи, современного реализма и западных мультиков блевать хочется, а вот аниме - это хорошо, это качественно. Твои "нормальные худы" любую кляксу готовы за миллион баксов с аукциона купить, или пытаются эту кляксу за миллион баксов продать. Но мне вот не нравятся их "высокохудожественные" кляксы, мне нужно аниме, но даже зная все формальные правила получается какое-то говно. Даже если пытаюсь рисовать в векторной программе, которая опирается на строгую математику, в отличие от растрового хаоса.

>и даже в абстракционизме есть правила
Ну вот ты выполняешь все эти формальные правила, а получается говно. Почему? В рисовании правила выполнять недостаточно, нужно что-то ещё. В программировании достаточно выполнять правила и всё будет работать как задумано.

>Что такое переменная?!
Это коробочка с надписью, в которой ты можешь хранить какие-нибудь данные, например, числа. И обращаешься к коробочке ласково, по имени.

>построение примерные пропорции лица я запомню на все оставшуюся жизнь
Это никак не помогает. Я тоже знаю, где у человека глаза, нос, рот, уши. Знаю пропорции головы. Но всё равно получаются уродцы, не похожие на хомо сапиенс даже. Если бы можно было программно эту задачу решить, я бы уже давно не мучился, но программно слишком долго все ракурсы и вариации описывать.

>Картина попадает в сеть из твоего пера, собирая толпу людей которых зацепили твои взмахи кисточкой!
Во-первых, никуда она не попадёт, потому что говно.
Во-вторых, никого не соберёт, потому что ты никому не известное говно.
В-третьих, тебя и твою картинку обосрут и потопят в говне, потому что она говно.
А программа полезна лично для тебя, а не для толпы быдланов.

Сколько тебе лет вообще? Говоришь как старик, по какой-то причине решивший освоить геймдев на старости лет. Или как ребёнок, привыкший к тому что всё делают за него и не желающий работать своими руками, но для ребёнка ты слишком много знаешь. Возможно, это не твоё. Продолжай рисовать картины и собирать толпы людей в сети) Ну или закажи разработку игры на фрилансе, если не хочешь учиться программированию.
Аноним 12/06/21 Суб 20:46:09 #69 №748112 DELETED
>>748109
Не парься, на такой стадии проще с начала сделать.
Я вообще не стесняюсь сцены выкидывать и делать 2-3 варианта.
Это же разработка + обучение, а не экзамен.
Аноним 12/06/21 Суб 21:29:25 #70 №748115 
image.png
Как обновить элемент в массиве?
Есть dictionary, где хранимое значение - массивы. Положим
array = [0, 1, 0, 0]
Нужно проапдейтить только определённый элемент массива, например, второй (заменить 1 на 4).
Как это сделать? Вариант, как для массива array[1] = 4 не катит, потому что dictionary["arrayZ"][1] = 4 выдаст ошибку.
Из придуманного - перекладывать весь массив по новой по типу пикрил, но это какой-то сизифов труд.

Есть какой-то метод нормальный для этого?
Аноним 12/06/21 Суб 21:40:20 #71 №748117 
image.png
>>748115
Есть, конечно, вариант ещё пикрил, но тоже кажется тупым.
Аноним 12/06/21 Суб 21:47:47 #72 №748119 
>>748117
Какую ошибку выдаёт? dictionary["arrayZ"][1] = 4 по идее должно работать
Аноним 12/06/21 Суб 21:55:43 #73 №748120 
image.png
>>748112
Да я не парюсь, просто много сил жрет ковыряется в этом. А удовольствие победы несоизмеримо с выносом мозга на таких затупах.

>>748111
>программирование намного проще освоить
>Есть такое выражение: RTFM! То есть читай грёбаный мануал Наверняка не читал вообще или невнимательно.
>Действительно, почему? Да потому что так дела не делаются. Ты должен разумно подходить к разработке.
>Аниме-хейтеры назовут любую картинку в стиле аниме говном.
>Твои "нормальные худы"
>Но мне вот не нравятся их "высокохудожественные" кляксы, мне нужно аниме, но даже зная все формальные правила получается какое-то говно.
Бля я просто угораю! Приплел с нихуя аудиторию аукционов, не поняв что под нормальными худами я имел ввиду пик ниже. Если ты не знал, вся стилизация основана на реализме. Если ты захочешь нарисовать человека, ты "умный программист" будешь рисовать ему две ноги, два глаза, две руки, и два полужопия. Знаешь почему? Потому что человек априори выглядит так а не иначе. Если у тебя получается говно, значит ты рисуешь не аниме тян, а того же гомункула, у которого шея с пальчик, растет на затылке.
>Это никак не помогает. Я тоже знаю, где у человека глаза, нос, рот, уши.
А слепой ничего не увидит.
>Сколько тебе лет вообще?
Больше 18, меньше пенсионного возраста.
>Возможно, это не твоё. Продолжай рисовать картины и собирать толпы людей в сети) Ну или закажи разработку игры на фрилансе, если не хочешь учиться программированию.
Я в прошлом треде написал что я буду делать, при неудачи. То бишь найму программиста/реализую задумку в виде маленького комикса.

Я очень хочу разобрать всю твою писанину, но впаду от понимания того, что ты опять ответишь в такой же развернутой манере! А говорить я не особо люблю. Ведь я творец, а не клоун. Занавес.
Аноним 12/06/21 Суб 21:57:23 #74 №748121 
>>748119
Блин, действительно работает. Немного не то юзал в качестве ключа - ошибся с переменной, содержащей ключ.
Аноним 13/06/21 Вск 01:28:17 #75 №748136 
>>748077
На второй картинке рекомендуется вместо get_parent использовать PackedScene?
Аноним 13/06/21 Вск 03:32:35 #76 №748138 
>>748120
>реализую задумку в виде маленького комикса
Если ты умеешь рисовать, почему бы сначала не нарисовать комикс? Или параллельно с игрой, если есть время. Так можно заранее привлечь аудиторию и точнее определиться с персонажами для игры, если она вообще нужна. Или, если аудитория уже есть, комикс будет проще для восприятия - его не нужно скачивать, запускать и проходить, просто читаешь на странице любимого художника и не паришь мозги. Т.е. в теории у комикса шире охват сообщества, чем у игры.

>стилизация основана на реализме
Знаю. Но мне не нравится большое количество лишних деталей, таких как выпуклые мышцы, какие-то пятна на коже и т.д. Но речь не про то шла. Вот ты нарисуешь стикмана и я нарисую стикмана: палочки, кружочки, всё по линеечке если нужно. Вот только твой стикман моих глазах будет неплох, я буду даже завидовать, а мой стикман в моих глазах будет выглядеть как говно, и чем больше я буду пытаться его исправить, тем больше буду портить. С формальной точки зрения стикманы одинаковые - все размеры, пропорции, толщина линий, цвет чернил и т.д. равны, но мой всё равно намного хуже. Чего-то мне не хватает, и без этого даже пытаться рисовать бесполезно. А вот код - чтобы он работал и решал задачи, его не нужно сравнивать с чужим кодом, он хорош сам по себе.

Ладно, к чёрту стикманов, вот я точку поставлю и ты точку поставишь. И твоя точка хороша, а моя - говно. И я её десять раз обведу и заново переделаю, но всё равно моя точка будет хуже. Она всегда хуже. Я не понимаю, почему. Знаю, это моя заниженная самооценка виновата. Но всё равно я только говно делаю.

>будешь рисовать ему две ноги, два глаза, две руки, и два полужопия
Вот это, кстати, одна из ошибок новичков, её часто дети допускают. Рисовать нужно не "две ноги, две руки, два глаза", рисовать нужно то, что видишь перед собой (или мог бы видеть, будь оно перед тобой). А перед тобой не обязательно полный комплект частей тела - часть из них могут быть прикрыты чем-нибудь, находиться за границами кадра, отсутствовать у модели и т.д. Аналогично с тем, как выглядит часть тела: рука под определённым ракурсом может вообще не иметь отличительных черт типичной руки, но рисовать нужно то что видишь, а не то что по твоему мнению должно быть на руке. То есть рисование сложнее загнать в рамки формальных правил, правила зачастую только мешают: ты знаешь, что у человека пять пальцев на руке, и пытаешься их все на эту руку прикрепить, а на самом деле в конкретной позе и ракурсе видно только один палец или два. В программировании такого не бывает, если нужно написать программу для решения задачи - ты пишешь программу для решения задачи, а не какое-то непонятное пятно в форме задачи.

Вообще я изначально пытался помочь с принятием программирования, а ты продолжаешь бодаться. Ради чего? Просто перестань буянить, когда встречаешь какие-то сложности, трезво оцени ситуацию и читать самоучители, выполняя все упражнения из них. Тебе не нужно написать десять тысяч программ, это только художнику нужно десять тысяч рисунков сделать, а тебе достаточно научиться писать программы. Это просто, если контролировать себя и не психовать.
Аноним 13/06/21 Вск 09:44:04 #77 №748155 
>>748138
> моя заниженная самооценка
Ещё перфекционизм на вышеописанную проблему работает нехило.
Аноним 13/06/21 Вск 10:00:34 #78 №748160 
>>748155
>Ещё перфекционизм
Вот-вот, именно так. Но код с перфекционизмом всё же проще писать: мой перфекционизм зачастую удовлетворяется ровными отступами, правильными заглавными буквами, правильным числом пробелов, пустыми строками между блоками кода, длинными понятными именами и т.д., т.е. главное чтобы выглядело опрятно и красиво. А с рисунками так не получается, на один пиксель ошибёшься - уже совсем другой результат, а пикселей миллионы. С 3D-моделями ещё хуже, пытаюсь до миллиметров всё вычислить и всё равно говно получается. А код пишешь себе и пишешь, практически как на родном языке говоришь.

да, меня бомбит с "кодит сложна, рисувать лигко"
Аноним 13/06/21 Вск 10:04:30 #79 №748161 
>>748160
Я это ты, бро. Бомблю с того же самого, когда люди, которым по жизни легко, не понимают как такое может быть, что кому-то по жизни сложно? "Да вы просто не стараетесь" говорят они. Пиздец.
> С 3D-моделями ещё хуже, пытаюсь до миллиметров всё вычислить и всё равно говно получается.
А ещё квады. Маниакально трясусь над моделькой, чтоб недайбох нигде многоугольника не образовалось, иначе пиздец. В то время, как васян уже сдаёт готовую модельку, ему перезванивают, а мне нет.
Аноним 13/06/21 Вск 10:59:19 #80 №748167 
image.png
image.png
>>748138
>Т.е. в теории у комикса шире охват сообщества, чем у игры.
1. Нихуя. Играют охотнее, чем читают.
2. Если я сделаю игру, смогу расширить пул площадок для продвижения себя любимого как минимум на два. itch.io и тд
3. Я хочу сделать для игрока челлендж, при котором он борется за получение желаемого арта.

>Если ты умеешь рисовать, почему бы сначала не нарисовать комикс?
Потому что это блять идея не для комикса, а для игры. Идеи для комикса у меня есть, и они придуманы с заточкой под это.

>Вот ты нарисуешь стикмана и я нарисую стикмана: палочки, кружочки, всё по линеечке если нужно. Вот только твой стикман моих глазах будет неплох, я буду даже завидовать, а мой стикман в моих глазах будет выглядеть как говно, и чем больше я буду пытаться его исправить, тем больше буду портить. С формальной точки зрения стикманы одинаковые - все размеры, пропорции, толщина линий, цвет чернил и т.д. равны, но мой всё равно намного хуже.
В реальности же ты сделаешь ему длинную шею, разные размеры рук, и просрешь ещё много пропорций которые важны в построении человека. Это уже не смотря на то, что крутан будет все это делать в векторе, а ты в растре мышкой рисовать. xD Считай шутка среди cg худов.

>Ладно, к чёрту стикманов, вот я точку поставлю и ты точку поставишь. И твоя точка хороша, а моя - говно. И я её десять раз обведу и заново переделаю, но всё равно моя точка будет хуже. Она всегда хуже. Я не понимаю, почему. Знаю, это моя заниженная самооценка виновата. Но всё равно я только говно делаю.
У меня тоже заниженная самооценка. Не мое мнение, а людей со стороны. Мне это не мешат если получилось говно, изменить ошибку, а потом в дальнейшем попытаться её не допустить.

>Вот это, кстати, одна из ошибок новичков, её часто дети допускают. Рисовать нужно не "две ноги, две руки, два глаза", рисовать нужно то, что видишь перед собой (или мог бы видеть, будь оно перед тобой). А перед тобой не обязательно полный комплект частей тела - часть из них могут быть прикрыты чем-нибудь, находиться за границами кадра, отсутствовать у модели и т.д. Аналогично с тем, как выглядит часть тела: рука под определённым ракурсом может вообще не иметь отличительных черт типичной руки, но рисовать нужно то что видишь, а не то что по твоему мнению должно быть на руке. То есть рисование сложнее загнать в рамки формальных правил, правила зачастую только мешают: ты знаешь, что у человека пять пальцев на руке, и пытаешься их все на эту руку прикрепить, а на самом деле в конкретной позе и ракурсе видно только один палец или два. В программировании такого не бывает, если нужно написать программу для решения задачи - ты пишешь программу для решения задачи, а не какое-то непонятное пятно в форме задачи.
Ты должен видеть на сквозь. Этому и учат почти все учения по художественному ремеслу.

>Вообще я изначально пытался помочь с принятием программирования
Это не возможно принять, боль и страдания от тильда только в пучины депрессии вгоняют. Чем дольше сидишь, тем больше не понимаешь.
>Тебе не нужно написать десять тысяч программ, это только художнику нужно десять тысяч рисунков сделать, а тебе достаточно научиться писать программы.
Тебе нужно много знать чтобы написать одну программу, а мне чтобы нарисовать один рунок достаточно посмотреть на свою ногу.

>>748160
>>748161
>да, меня бомбит с "кодит сложна, рисувать лигко"
>которым по жизни легко, не понимают как такое может быть
Я если сравнивать с другими худами, даже на средний уровень ещё не вышел. Но даже с таким бэкграундом рисование легче, чем программирование.
>как васян уже сдаёт готовую модельку, ему перезванивают, а мне нет.
Вася потратит на эту подельку в лучшем случае две рабочих недели, из которых спать и есть будет 7 часов. Остальное выдрачивание.

Аноним 13/06/21 Вск 11:01:51 #81 №748168 
image.png
>>748167
Отклеилось. 2 пик там не актуален, посчитал что этот аргумент можно спокойно списать.
Аноним 13/06/21 Вск 12:51:42 #82 №748179 
Есть ли в godot реализация Breadth-first search?
AStar знаю и использую для поиска пути. Но для реализации разведки карты это не подходит, BFS выглядит более адекватным, но не могу найти такой функции.
Аноним 13/06/21 Вск 14:12:51 #83 №748185 DELETED
>>748179
Нет, дружище, в движке нет, если тебе надо я конвертнул первый попавшийся питоновский код
https://pastebin.com/33BVNLRJ
Аноним 13/06/21 Вск 21:20:02 #84 №748227 
>>748185
Спасибо.
Аноним 14/06/21 Пнд 00:45:07 #85 №748277 
Если я делаю так:
>func draw_lines():
>>for i in get_children().size():
>>>var colour = generate_colour(i)
>>>var line_2d : Line2D = get_child(i).get_node("Line2D")
>>>yield(generate_colour(i), "completed")
>>>line_2d.set_modulate(colour)
>
>func generate_colour(number : int):
># yield(get_tree(), "idle_frame")
>>var colR := randf() 2
>>var colG := randf()
2
>>var colB := randf() 2
>>var colour = Color(colR, colG, colB, 2)
>>return colour
то будет ошибка
>First argument of yield() not of type object.

А если сделаю так (раскоменчу yield в generate_colour):
>func draw_lines():
>>for i in get_children().size():
>>>var colour = generate_colour(i)
>>>var line_2d : Line2D = get_child(i).get_node("Line2D")
>>>yield(generate_colour(i), "completed")
>>>line_2d.set_modulate(colour)
>
>func generate_colour(number : int):
>>yield(get_tree(), "idle_frame")
>>var colR := randf()
2
>>var colG := randf() 2
>>var colB := randf()
2
>>var colour = Color(colR, colG, colB, 2)
>>return colour
То будет ошибка
>Invalid type in function 'set_modulate' in base 'Line2D'. Cannot convert argument 1 from Object to Color.
Аноним 14/06/21 Пнд 00:48:00 #86 №748280 
>>748277
А если не ставить yield нигде, то будет ошибка
>Invalid type in function 'set_modulate' in base 'Line2D'. Cannot convert argument 1 from Nil to Color.
Аноним 14/06/21 Пнд 01:20:50 #87 №748290 
>>748280
Как так получается, что спустя 1 кадр меняется класс с Color на Object?
Аноним 14/06/21 Пнд 02:55:06 #88 №748341 DELETED
>>748277
А что ты пытаешься сделать?
Аноним 14/06/21 Пнд 08:31:02 #89 №748352 
>>748277
Смотри как распидорасило твой код, а ты при этом ещё и корпел над ним, угловыми скобачками отступы симулировал, а про знаки * забыл. Юзай пастебин, Люк!
Аноним 14/06/21 Пнд 08:58:46 #90 №748353 
>>748277
Значит, смотри сюда, когда ты юзаешь yield, то метод, в котором он вызван, перестаёт возвращать любые значения, кроме корутинного объекта https://docs.godotengine.org/ru/stable/classes/class_gdscriptfunctionstate.html который управляет состоянием функции. Соответственно, до твоего return colour дело не доходит. Если хочешь ебаться таким образом, то делай так: https://pastebin.com/iHN3EcC3
Аноним 14/06/21 Пнд 09:13:10 #91 №748355 
>>748353
Обосрался таки с советом. Замени в строке 8:
>if typeof(ref.color) == TYPE_COLOR:
Потому что нельзя сравнивать разные типы, а я объявил строковую константу и сравниваю с цветом.
Аноним 14/06/21 Пнд 10:30:16 #92 №748358 
>>748277
>>748353
Ну и наконец, барабанная дробь, финальный вариант: https://pastebin.com/1rjs5XDE
sageАноним 14/06/21 Пнд 13:17:07 #93 №748366 DELETED
>>748277
Мне всегда нравилась фраза "какой тут физический смысл"? И я всем советую пользоваться этим приемом.
Какой смысл ты вкладываешь в этот код?
Вот draw_lines вызывается, скажем, раз в кадр. В ней ты запускаешь цикл, скажем, на 10 линий.
И внутри каждой линии ты просишь движок - отсрочь каждую линию на 1 кадр.
WUT? Каждый кадр ты просишь отложить 10 кадров.
А что такое Color(..., 2)? Прозрачность выражается в числах 0.0 .. 1.0. Как и остальные части которые ты умножаешь на 2.
>>748280
Нет, не будет. Только что проверил, перепечатав твой код.
Аноним 14/06/21 Пнд 14:59:56 #94 №748393 
>>748358
Не совсем так, как мне надо, но сделал по твоему подобию, даже йылды оказались не нужны, все заработало, как надо. Тысячи благодарностей.
А вот так
var line_2d : Line2D = get_child(i).get_line_2d()
всегда рекомендуется делать?
Аноним 14/06/21 Пнд 15:01:36 #95 №748394 
>>748366
Эээээээххх!
Аноним 14/06/21 Пнд 15:02:55 #96 №748395 
>>748366
Я просто хотел заставить одну функцию дожидаться завершения другой, чтобы другая не слала null.
Аноним 14/06/21 Пнд 15:09:17 #97 №748397 
>>747514
желтый с фиолетовым плохо сочетается. Погугли, какие цвета хорошо сочетаются и поставь их, а то от этих глаза болят.
мимо
Аноним 14/06/21 Пнд 19:45:11 #98 №748454 
>>748393
> всегда рекомендуется делать?
Вообще говоря, вкусовщина. Твой вариант опрашивает дерево строковым запросом. Диды неодобряе такой подход, но мне как-то в стрингосраче убедительно на миллисекундах показали, что современные строки работают на исчезающе малую величину медленнее, чем числа, и этим можно пренебречь. Мой вариант опрашивает потомка ноды в её массиве потомков, индексы которого инт, то есть везде работа с числами, но не строками. Но на этапе оптимизации вспомни этот момент и сможешь оптимизировать пару лишних фреймов.
Аноним 14/06/21 Пнд 20:30:15 #99 №748473 
>>748454
Вот примерно то, о чём я говорю: https://pastebin.com/gjfLrUpV
Аноним 14/06/21 Пнд 20:32:44 #100 №748474 
https://twitch.tv/videos/1056019833
Аноним 14/06/21 Пнд 22:49:57 #101 №748525 
>>748454
>Но на этапе оптимизации
Хо-хо!
Аноним 14/06/21 Пнд 23:10:45 #102 №748530 DELETED
>>748474
Прикольно, а я сейчас в годоте втубера пилю.
Аноним 14/06/21 Пнд 23:27:56 #103 №748535 
image.png
>>748525
На самом деле такое может случиться, когда фпс начнёт падать меньше 30. Помнится мне, у меня комп обосрался, когда я на годоте сделал реализацию http://stuffin.space/
Жалко, что код при обновлении пекарни не сохранил. Или нет. В следующий раз нормально напишу.
Аноним OP 16/06/21 Срд 00:15:16 #104 №748711 
Проверяем галку ОПа. Были траблы.
Аноним 16/06/21 Срд 00:49:29 #105 №748731 DELETED
>>748711
Можно бекапить куки из браузера, по идее.
Аноним 16/06/21 Срд 12:26:20 #106 №748883 
>>748731
Дак вот восстановленные из бекапа и проверял.
Аноним 17/06/21 Чтв 17:09:32 #107 №749051 
Как можно заставить узлы Label сталкиваться друг с другом, а не перекрывать?
Аноним 17/06/21 Чтв 17:13:39 #108 №749052 
>>749051
У меня несколько персонажей, у каждого Лэйбл над головой, хочу, чтобы Лэйблы не накладывались друг на друга
Аноним 17/06/21 Чтв 17:13:50 #109 №749053 DELETED
>>749051
Добавить их под какой нибудь контейнер, например HBoxContainer, GridContainer...
Аноним 17/06/21 Чтв 17:27:34 #110 №749057 DELETED
>>749052
А, такое. Тут сходу не придумаешь. 2д/3д игра? Могут ли надписи двигаться вверх или только по горизонтали? Что будет если три игрока рядом, насколько далеко надпись может быть оттолкнута? Что должно произойти с надписью когда персонаж пройдет мимо другого слева направо?
Одна из идей пришла такая - сделать отдельный физический слой с прямоугольниками и "таскать" их по невидимому полу.
Или курить алгоритмы расстановки меток на карте.
Аноним 17/06/21 Чтв 17:51:07 #111 №749061 
>>749057
2д, надписи могут двигаться вверх и по-горизонтали. Если три игрока рядом, каждая надпись должна занять ближайшее к своему игроку место.
Я попробовал сделать каждому персонажу дочерний узел RigidBody, а его дочерний узел Label. И все надписи поместил на один Collision-слой. Сначала они сталкиваются, но потом сталкиваются как-то слабо.
Аноним 17/06/21 Чтв 17:53:03 #112 №749062 
>>749061
Скорее вообще не сталкиваются
Аноним 17/06/21 Чтв 20:36:11 #113 №749070 
>>749062
Сделай втупую, сделай в лоб, как я зимой делал: лейбл сидит в ригидбоди, ригидбоди прикручено джойнтом к боде персонажа, когда персы сближаются, все их лейбл-блоки будут отталкиваться физическим движком и занимать удобное для себя положение.
Аноним 17/06/21 Чтв 20:39:20 #114 №749071 
>>749070
аааааа джоинты точно
Аноним 17/06/21 Чтв 20:45:13 #115 №749073 DELETED
>>749071
Или SpringArm
Аноним 17/06/21 Чтв 22:41:21 #116 №749081 
image.png
А помнишь, антуан, как ты помогал кодить платформер?
Я тебе ещё спрайтов нарисую.
Ты только заходи...
хоть иногда...
Аноним 17/06/21 Чтв 22:45:05 #117 №749082 
>>749081
Я ХЗ, ещё как минимум до конца июня ваще никак. Дел не в проворот. Ты пока спрайты рисуй, рисуй.
Аноним 17/06/21 Чтв 22:51:52 #118 №749086 
image.png
>>749082
Рад, что ты жив, цел и орёл
Я сейчас немного другую пиксельную хуйню делаю, туда хоть кодить не надо, но как освободишься, хайдде тоже время найдётся.
Аноним 18/06/21 Птн 11:59:08 #119 №749202 
>>749081
Че там кодить то бля?
Аноним 18/06/21 Птн 12:24:18 #120 №749204 
>>749202
Буквально всё. Я с кодом не очень дружу.
Аноним 18/06/21 Птн 13:07:02 #121 №749211 
>>749202
> Че там кодить то бля?
Подскажи, как сделать в двадэ выглядящее симпатчно и удобно-играбельное вскарабкивание по вертикальным поверхностям. Это одна из фишек Хайди. Делать двадэ-клон Хайди без реализации её фирменной фичи, это будет хуйня какая-то. Очередной митбой.
Я пока что рассматриваю вариант с физикой: По бокам от капсулы персонажа расположены два физических тела в форме квадрата, которые двигаются вверх-вниз и немножко подворачиваются внизу к центру, что на тестовых сценах выглядит весьма няшно.
мимо тот самый кодер
убегаю, чмоке фсем в чати
Аноним 18/06/21 Птн 22:57:31 #122 №749347 
Делаю сейвы по гайду https://docs.godotengine.org/en/stable/tutorials/io/saving_games.html.
Получается не очень. Можно сохранять данные в словарях, но не сгенерированную заранее по известным значения карту, потому что инстанцируется всё рантайм из кода.
Вот как это инстанцирование сохранять? Вручную все-все-все параметры вытаскивать и сохранять? Или как-то можно всё дерево сохранить?
Аноним 18/06/21 Птн 23:52:54 #123 №749372 
>>749347
upd.
Нашёл другой способ и реализую сейчас его. Это вообще валидно, или костыль какой?
https://godotengine.org/qa/903/how-to-save-a-scene-at-run-time
Аноним 20/06/21 Вск 19:01:12 #124 №749723 
У меня 2D персонаж приходит в последнюю точку NavigationPath2D и начинает трястись. Точнее он может прямо в нее прийти, почему-то, поэтому трясется. Как это лучше пофиксить? Двигается с помощью velocity = move_and_slide(velocity )
Аноним 20/06/21 Вск 19:08:53 #125 №749727 
>>749723
>Точнее он не может прямо в нее прийти
Аноним 20/06/21 Вск 19:16:12 #126 №749729 
>>749723
Пальцем в небо: у него длина "шага" больше расстояния до точки, вот он её и перешагивает. Надо если расстояние меньше определённой величины - телепортировать
Аноним 20/06/21 Вск 19:21:56 #127 №749732 DELETED
>>749729
>если расстояние меньше определённой величины - телепортировать
Двачую. Везде где вещественные числа - только так. Можно сравнить с гольфом - ты бьешь в сторону лунки, шар перелетает, приходится бить обратно, и так бесконечно.
Аноним 20/06/21 Вск 20:35:37 #128 №749750 
>>749729
>>749732
Ага
Аноним 21/06/21 Пнд 01:26:47 #129 №749775 DELETED
А есть ли какой-то пример как загружать прямо dll-ку? Не gdnative. Ну или возможно через обертку gdnative. Если я не хочу ни собирать модулем в составе движка, ни вставлять в нее всякие годот-хидерс, а только дергать ее c++ функции.
Аноним 21/06/21 Пнд 02:40:31 #130 №749776 
Противники дерутся и в какой-то момент один из них погибает через queue_free. Почему-то проверки "if enemy:" не работают, хотя в отладчике вижу, что var enemy = null, ставлю везде проверку на "is_instance_valid(enemy)". Во дела.
Аноним 21/06/21 Пнд 03:49:16 #131 №749777 DELETED
>>749776
Написано же в доках - переменные, ссылающиеся на объект, за тобой оно чистить не будет. Второй абзац.
Аноним 21/06/21 Пнд 04:20:53 #132 №749778 
>>749777
Ааааааааааааа
Аноним 21/06/21 Пнд 09:03:15 #133 №749781 
>>749777
Надо юзать референс. Референсы чистит автоматом.
Аноним 21/06/21 Пнд 13:32:08 #134 №749798 DELETED
>>749781
Надо просто самому следить, где у тебя что хранится и что живое и что активное. Я считаю все эти queue_free, idle_frame, call_deferred костылями, да, нужными костылями на границе между скриптовым языком и c++ кишочками, чтобы программа не падала, но не надо их делать основными рабочими инструментами.
В данном случае - когда вызываешь queue_free, зануляй и переменную.
Если из-за архитектуры сложно добраться до этой переменной - удаляй не через queue_free, а свою функцию, в ней делай queue_free и посылай свой сигнал, а саму переменную подписывай на него примерно так
my_variable.connect("before_destroyed", self, "set", ["my_variable", null])
Аноним 21/06/21 Пнд 21:14:38 #135 №749953 
>>749798
> когда вызываешь queue_free, зануляй и переменную
А ещё лучше, как диды, сделать себе утилитарную функцию free_and_nil (у дидов в стандартных либах было, нам же придётся где-нибудь в утилитарном синглтоне объявить)
> func free_and_null(obj : Object, queue : bool = true):
> > if queue:
> > > obj.queue_free()
> > else:
> > > obj.free()
> >obj = null

Аноним 21/06/21 Пнд 21:20:43 #136 №749955 
>>749775
> Если я не хочу
На нет и суда нет. Всё тобой вышеупомянутое сделано не просто так. Движок не просто так зовётся движком. У движка архитектура. Благодаря архитектуре ты встраиваешь в готовый продукт (в нашем случае игру) сторонние компоненты не абы как, а в строго определённые места и строго определёнными способами. Если бы ты мог просто импортнуть длл-ки, то какой же это движок? Так, голое ИДЕ.

Через шарп можно.
Аноним 21/06/21 Пнд 22:09:22 #137 №749971 DELETED
>>749955
Лень сейчас думать, жара. Просто у меня сейчас работает передача данных через сокеты. Чувствую что это излишне, ведь на обоих концах программы на c++ и они могли бы просто передавать указатель и заполнять переданный буфер. Кроме того я сейчас понял что та dll-ка грузит 6 других, я еще и там могу обломаться.
С шарпом кстати неплохой вариант, тоже потом попробую.
Аноним 21/06/21 Пнд 22:59:33 #138 №749988 
https://github.com/godotengine/godot/pull/49744/

Может кто пояснить что за изменения будут?
Аноним 21/06/21 Пнд 23:36:56 #139 №749995 
у
Аноним 22/06/21 Втр 01:31:23 #140 №750013 DELETED
Сделал с оберткой gdnative. Как ни странно, все заработало с полтычка.
Основная DLL собрана своей билдсистемой без знаний о годоте
GDNative собран сконсом по оф документации под конкретную версию движка
В native-плагине делаем тупо #include <windows.h> LoadLibrary(path); (myFnPtr)GetProcAddress("fun_name"); скопипащеное со стековерфлоу
LoadLibrary автоматом загрузила все остальные DLL зависимости основной DLL, найдя их рядом с exe-шником
Native-плагин создает char buffer[1024], дергает fnPtr(buffer) DLLки и получает буффер заполненный правильными данными.
Завтра только многопоток потестирую, но вроде проблем быть не должно, если точка вызова одна.
Аноним 22/06/21 Втр 13:20:40 #141 №750075 
>>750013
Ну вот, видишь. Всё не так страшно. Но зато у тебя уже есть готовый адаптер (твой натив-плагин), который может распарсить полученные данные и распихать их по нодам годота.
Аноним 23/06/21 Срд 21:27:17 #142 №750370 DELETED
>>750075
Отлаживать это, конечно, мама дорогая.
Но std::cout из самой DLL пишет в терминал, который с редактором годота запускается.
Аноним 24/06/21 Чтв 20:25:06 #143 №750621 
>>750370
Да стандартный вывод он и в африке стандартный. Было бы удивительно, если бы он не заработал.
Идея адаптера ( https://ru.wikipedia.org/wiki/Адаптер_(шаблон_проектирования) ) же в том, что твоя сторонняя либа ничего не знает о годоте. Годот ничего не знает о либе. А вот натив-плагин (адаптер) знает обоих и может через интерфейс годота обмениваться данными с годотом, а через интерфейс сторонней либы - с ней.
Аноним 24/06/21 Чтв 22:46:53 #144 №750631 
Как заставить Control-узел расширяться при расширении размеров его детей? У меня узел Panel, в нем HBoxContainer, в нем TetureRect и Label. Размер Panel не меняется, текст в Label выходит за рамку.
Аноним 24/06/21 Чтв 23:05:15 #145 №750632 
>>750631
И как уменьшить, если текст стал короче?
Аноним 24/06/21 Чтв 23:32:18 #146 №750635 DELETED
>>750631
Там надо какое-то уведомление посылать вроде было
https://github.com/godotengine/godot/issues/20623#issuecomment-654605616
Аноним 25/06/21 Птн 07:08:16 #147 №750646 
Безымянный.png
Справа от 959 и 620 по сигналу появляются стрелочка и число. Хоть и ХБоксКонтейнер, а похуй, накладывается, зато панель, на которой это все находится, расширится, ну что за хуйня бляха!
Аноним 25/06/21 Птн 08:05:15 #148 №750652 
>>750646
Ай, я там использовал Панель, а надо было ПанельКонтейнер
Аноним 25/06/21 Птн 09:07:48 #149 №750655 
А почему вот это не работает?
if child extends Container :
Ошибка:
Parse Error: ':' expected at end of line.
Аноним 25/06/21 Птн 09:09:29 #150 №750656 
>>750655
А, надо
if child is Container :
Аноним 25/06/21 Птн 09:11:59 #151 №750657 
Почему в классе Control есть функция rect_size(), а в ее дочернем PanelContainer ее нет?
Аноним 25/06/21 Птн 10:31:28 #152 №750661 
Двущ, за тайлмап поясни.
Хочу взять нод, запихнуть тайлмап, отчертить комнату.
И сделать таких комнат штук 5-6, чтобы потом склеивать ноды в разном порядке, чтобы строить уже уровни.
Говно идея? Может есть что по лучше из вариантов?
Аноним 25/06/21 Птн 10:43:17 #153 №750663 
>>750661
По мне лучше комнаты закодировать в текстовом виде, и на основе этого текста отрисовывать без лишней мороки с гуём.
Аноним 25/06/21 Птн 10:48:56 #154 №750664 
>>750663
Я когда-то в csv файлах хранил заготовленные комнаты.
Для рогалика збс, пара файлов - пара слоёв(пол\стены\враги\предметы), но чот для годота это хуета как по мне.
Или я может долбаёб и не разобрался ещё до конца.
Аноним 25/06/21 Птн 14:27:06 #155 №750691 
>>750657
Прячет.
>Очень часто потребность в сокрытии методов получения и установки значений возникает в связи с разработкой более богатого интерфейса, предоставляющего дополнительное поведение.
https://refactoring.guru/ru/hide-method
Аноним 25/06/21 Птн 14:31:09 #156 №750693 
>>750664
> я может долбаёб и не разобрался ещё до конца
Ставлю бочку нефти на это.

В нескольких прошлых тредах я неоднократно убеждал анонов, что данные игрового мира должны быть платформонезависимы, в случае с годотом платформой является сам годот, его иерархия классов и его дерево сцены. Ты должен хранить данные уровней без привязки ко внутренним потрохам годота. То есть, ни о каком тайлмапе описательный язык твоего файла данных знать не должен.
Аноним 25/06/21 Птн 20:33:40 #157 №750730 
Почему, когда PanelContainer раздувает в стороны при изменении в Remote любого значения margin контейнер ужимается до размера содержимого, а при изменении в коде не ужимается?
Аноним 25/06/21 Птн 21:52:35 #158 №750733 
>>750730
Потому что ему сигнал об изменении размеров не приходит. Пришли ему вручную этот сигнал.
Аноним 26/06/21 Суб 01:06:42 #159 №750750 
>>750733
Да вроде приходит. Послал вручную, не помогло.
Пускал сигнал в _процессе - тоже не помогает.
Если законнектить и в _on_resized() изменять марджин, случается Stack Overflow (Stack Size: 1024).
Как сделать-то
Аноним 26/06/21 Суб 01:11:06 #160 №750752 
>>750750
Короче, если сделать вот так
>func _process(delta):
>>emit_signal("resized")
>>margin_right -= 1
>>margin_right += 1
то сжимается, но это происходит не моментально, вижу сперва большую рамку, а потом тут же она становится маленькой.
Аноним 26/06/21 Суб 01:29:07 #161 №750753 
>>750752
Даже вот так достаточно
>func _process(delta):
>>margin_right -= 1
>>margin_right += 1
Аноним 26/06/21 Суб 03:16:14 #162 №750754 
>>750752
Происходило не моментально, потому что я удалял старые лэйблы через queue_free. Поставил просто free и ничего больше не дергается. И даже процесс не нужен. Во дела.
Аноним 26/06/21 Суб 06:03:40 #163 №750757 
Мужики, здарова. Смотрите, у ноды Button два сигнала: button_down() и mouse_exited().
Mouse_exited() сам по себе хорошо отрабатывает, когда курсор покидает кнопку,
но при зажатой кнопке (когда прошёл сигнал button_down()), mouse_exited() не срабатывает когда курсор выходит за пределы кнопки.
Точнее сработает спустя какое-то время, когда отпустишь кнопку на мышке за пределами Button.

Это можно как-то порправить?
Аноним 26/06/21 Суб 09:55:31 #164 №750761 
У меня камера2д, а точнее ее позишн, выходит за правый и нижний предел и если дошел до правой стороны экрана и хочу передвинуть экран влево, мне приходится ждать, пока позишн вернется. А если он уедет слишком далеко вправо или вниз или вправо-вниз, то вообще непонятно где камера и куда нажимать, чтобы она вернулась. Короче очень уродливо это все получается.
Аноним 26/06/21 Суб 12:26:18 #165 №750766 
>>750761
для камеры существуют лимиты
Аноним 26/06/21 Суб 12:32:35 #166 №750770 
>>750766
Лимиты установлены. Позиция камеры спокойно уходит за правый и нижний лимит.
Аноним 26/06/21 Суб 12:49:33 #167 №750776 
>>750770
Если совсем невмоготу и не фиксится, попробуй закостылить.
Когда камера обнаруживает какую-то деталь на правом нижнем лимите, включается скрипт "если позиция камеры > максимальный лимит, то позиция камеры = максимальный лимит"
Меня бы за такое половина кодеров выебла с особой жестокостью, а ЯнДев бы одобрил.
мимокрокодил
Аноним 26/06/21 Суб 14:54:00 #168 №750796 DELETED
>>750757
Хм, думаю что настройками не поправить, только написать свою проверку по типу такой https://github.com/godotengine/godot/issues/20881#issuecomment-839388929
Я так понимаю, объясняют это тем, что если бы mouse_exited срабатывал то тут же начинали бы нажиматься соседние кнопки, при том что первую ты еще не отпустил.
Аноним 26/06/21 Суб 16:45:30 #169 №750829 
Безымянный.png
Есть какой-то способ сжать использование видеокарты текстурой, кроме как сжать под видеокарту или изменить масштаб?
Аноним 26/06/21 Суб 17:03:37 #170 №750831 DELETED
>>750829
Если у тебя building_color просто меняет цвет домикам, то ты можешь выкинуть эти обе текстуры, перекрашивая шейдером какой-то заданный цвет.
Если у тебя вокруг домиков много пустого места, как на пике, то можно как-то компактнее их хранить
Аноним 26/06/21 Суб 17:28:57 #171 №750836 DELETED
>>750829
Посмотрел на твою картинку в соседней теме и вообще думаю - а не дешевли ли будет просто создавать на каждый вид постройки свою сцену, и выводить ее на нужных координатах тайлмапа.
Например видно что деревья у тебя одни и те же.
(Все еще считаю что такое еще легковеснее было бы в лоуполи с одноцветными текстурами)
Аноним 26/06/21 Суб 18:59:33 #172 №750851 
>>750831
Каким образом шейдер узнает является ли это на рисунке домиком первого или второго игрока? Это только если здания выделять как указывает автор ниже.
>>750836
Для видеокарты - да, возможно дешевле. Для упрощения кодовой базы и вычислений - хуже. Грузить каждое изображение гораздо дороже, чем тайлмап.
Ведь как то раньше делали огромные тайлсеты под юнитов в героях 3. С кучей картинок и анимаций. И ничего, не лагало.
Аноним 26/06/21 Суб 19:00:20 #173 №750852 
>>750836
Эм, как ты видишь, видеокарта жрет на каждый пиксель 1 байт. Ей пофиг лоуполи там или нет. Она никак не оптимизирует изображение.
Аноним 26/06/21 Суб 19:08:03 #174 №750853 DELETED
>>750852
Я имел в виду 3д. Текстуры бы там не весили почти ничего, модельки из нескольких вершин - тоже не больше килобайт.
Аноним 26/06/21 Суб 19:12:31 #175 №750854 
>>750853
Ну, у меня не 3д. И вряд ли будет 3д.
Аноним 26/06/21 Суб 19:13:47 #176 №750855 DELETED
>>750851
>Каким образом шейдер узнает является ли это на рисунке домиком первого или второго игрока?
Для этого шейдеру передается параметр через varying, по сути это переменная в шейдере. Выставлять ее можно из скрипта, который знает в каком тайле какой игрок, так что тут все тривиально. Сейчас накидаю пример
Аноним 26/06/21 Суб 19:17:30 #177 №750856 
>>750855
Это бы очень помогло. Я пытался писать такой шейдер, но тайлмапе было грустно от таких попыток.
Аноним 26/06/21 Суб 19:21:14 #178 №750857 
>>750855
Правда есть нюанс. Передние объекты могут цветом залезть на заднюю ячейку, где другой цвет игрока. Я могу как-то взяв ячейку с текстуры ее перекрасить?
Аноним 26/06/21 Суб 20:06:51 #179 №750863 DELETED
>>750856
У меня самого пока не получилось, возьму таймаут подумать.
Аноним 26/06/21 Суб 20:11:40 #180 №750864 
>>750863
Давай, удачи
Аноним 26/06/21 Суб 21:59:47 #181 №750879 
>>750776
Да похоже сами разработчики так рекомендуют делать
https://github.com/godotengine/godot-proposals/issues/685#issuecomment-611671983
Аноним 26/06/21 Суб 23:31:44 #182 №750884 
>>750836
В общем, я покопался и нашел самый дешевый способ. Через вижуал сервер делать канвас итемы, которые будут брать из дикта RECT'ы для обрисования тайла. После этого к ним прикрепляется один из шейдеров замены цвета у игрока. После этого канвас итемы можно перемещать и делать с ним что угодно.

Выигрыш:
- 150 мб видеокарты минимум
- Оперативка не заспамлена бесполезными параметрами объектов
-Все работает очень быстро, т.к. ты идешь напрямую в вижуал сервер.

Минусы:
- Если понадобится анимация, то работа с нодами будет проще чем канвасы.
- Распределять и перерисовывать в файлике все минимум сутки.
- Канвас итемы жрут ноды. После 4.2х тысяч нод годот превращается в тыкву (в билдах 3.2 тестил, сейчас хз). Можно рисовать на обычном канвасе, но на сколько понял, придется его перерисовывать, если объект надо нарисовать сзади.
Аноним 26/06/21 Суб 23:56:57 #183 №750887 
>>750879
О, немного горжусь собой.
Аноним 27/06/21 Вск 01:50:51 #184 №750889 
Доступ к размеру размеру видимой игровой области это get_viewport().size.
А если я зуммировался, то как размер видимой области получить?
Аноним 27/06/21 Вск 16:59:20 #185 №750933 
>>750889
>А если я зуммировался
get_porrige()
Аноним 27/06/21 Вск 17:30:54 #186 №750936 
674567457.jpg
>>750933
Аноним 28/06/21 Пнд 06:30:11 #187 №750984 
Я четыре дня делал камеру
Аноним 28/06/21 Пнд 06:42:45 #188 №750985 
>>750936
Пацаны я зуммировался ((((((((((
Аноним 28/06/21 Пнд 07:47:40 #189 №750987 
>>750933
>get_porrige(porrige)
Пофиксил тебя. Хотя я всё равно не согласен, что для пориджа отдельная функция, уж лучше get_meal(porrige) если конкретный порридж, или get_meal(GLOBAL.MEALSARRAY.PORRIGE) если в принципе
Аноним 28/06/21 Пнд 08:28:53 #190 №750989 
>>750933
>>750987
porridge
Аноним 28/06/21 Пнд 14:29:49 #191 №751017 DELETED
>>750987
Это не про meal
Аноним OP 28/06/21 Пнд 16:13:05 #192 №751034 
1624885978058.mp4
> зуммировался
> порридж
> порридж
Аноним 28/06/21 Пнд 16:50:43 #193 №751043 
>>751034
Оооо зумера порвалооооооооооо
Аноним 29/06/21 Втр 05:14:42 #194 №751128 
Как запускать редактор в фулскрине по-умолчанию?
Аноним 29/06/21 Втр 07:34:30 #195 №751131 
2021-06-29 07-26-38Trim.mp4
Пытаюсь заставить спрайты отображаться поверх других таких же спрайтов при наведении на спрайт мышкой. При наведении на красный спрайт почему-то выскакивает зеленый раньше красного. В одной точке есть и красный, и зеленый спрайты. Может мне кто-нибудь объяснить почему так выходит?
https://pastebin.com/eT6XRcYi
Аноним 29/06/21 Втр 07:44:13 #196 №751132 
godot.windows.opt.tools.64z3gRbiScJF.png
>>751131
Аноним 29/06/21 Втр 08:10:27 #197 №751134 
>>751131
А в самой игре срабатывает только когда курсор на границе прямоугольника CollisionShape
Аноним 29/06/21 Втр 09:49:56 #198 №751137 
>>751134
У меня Ареа2Д имеет детей-Контрол ноды. Поставил им всем майус фильтр Игноре, заработало.
Аноним 29/06/21 Втр 12:44:12 #199 №751145 
1624959852864.png
>>751128
В свойствах ярлыка, не?
Аноним 29/06/21 Втр 12:55:30 #200 №751146 
>>751145
Не. Я про shift+11.
Аноним 29/06/21 Втр 12:55:58 #201 №751147 
>>751131
Посмотри этот урок. Там малеха попроще
https://www.youtube.com/watch?v=L5QjuFe5Gys
Аноним 29/06/21 Втр 12:58:55 #202 №751148 
>>751146
Это чушь, о чем сказал Хуан здесь https://github.com/godotengine/godot/issues/1218
Не нервируй меня, движкосрачер, блядь! Зарепорчу!
Аноним 29/06/21 Втр 13:02:42 #203 №751149 
>>751148
Да я нубяра какой я движкосрачир )))))
Аноним 29/06/21 Втр 13:17:18 #204 №751152 
1624961836855.png
>>751149
Смотри мне!
Аноним 29/06/21 Втр 14:49:52 #205 №751168 
>>751152
ну что за клоунада
Аноним 30/06/21 Срд 14:54:24 #206 №751347 
>>751147
У меня дети в разных узлах находятся
Аноним 30/06/21 Срд 21:03:21 #207 №751406 
>>751347
Ты всерьёз считаешь это проблемой? И неприменимостью туториала?
Аноним 01/07/21 Чтв 20:28:43 #208 №751500 
>>751406
Да!
Аноним 01/07/21 Чтв 20:38:53 #209 №751504 
Подскажите нубу в чём проблема.
Я из одного скрипта добавляю скрипт к другой ноде.

Первый скрипт:
> extends Node
> func _ready():
> > $"/root/Node/Sprite".set_script(load("res://Sprite.gd"))

Скрипт, который приаттачиваю:
> extends Sprite
> func _init():
> > print("Yop")
> func _input(event):
> > if event is InputEventMouseButton:
> > > print("Yep")

Функция _init() печатает Yop, что как бы говорит, что скрипт добавлен. А _input(event) не пашет. Хотя если скрипт добавлять вручную, а не кодом, то всё нормально.
Аноним 01/07/21 Чтв 21:08:47 #210 №751507 
>>751504
У меня работает...Скинь скриншот сцены полностью, что ли.
Аноним 01/07/21 Чтв 22:13:44 #211 №751511 
>>751504
Я рекомендую не использовать load для загрузки скриптов в ноды, если ты в точности не уверен, что хочешь именно загружать скрипты в ноды.
Лично для меня, после того, как Хуан ввёл именование классов, этот функционал стал deprecated. Load пусть грузит ресурсы (в том числе packed-сцены), а объекты я теперь создаю через языковые механизмы:
> class_name MySprite extends Sprite
и
> $"/root/Node".add_child(MySprite.new())

Однако, у тебя скорее всего Спрайт - это отдельно загруженная упакованная сцена без скриптов, к которой ты хочешь грузить разные скрипты. Тут надо крепко задуматься, всё ли ты правильно делаешь? ИМХО, загрузка скриптов в ноды - это утилитарный функционал движка и даже скорее редактора. В игре тебе надо всё иначе организовать. Заготовить скрипт с параметрами в сохранённой сцене. Инициализировать сцену параметрами после загрузки. Я бы так делал.
Аноним 01/07/21 Чтв 22:16:17 #212 №751512 
Screenshot.png
>>751507
Аноним 01/07/21 Чтв 22:32:04 #213 №751513 
>>751511
Задумка у меня простая. На сцене сотня спрайтов, и у каждого скрипт с _input(event) в которой проверяется mouse movement. Я вот думаю, не сильная ли будет нагрузка. По сути достаточно чтобы скрипт работал только у пяти спрайтов в определённый момент времени. Вот и хочу добавлять, убирать скрипты ненужным в данный момент спрайтам.
Аноним 01/07/21 Чтв 22:58:54 #214 №751517 
>>751513
Вводишь марку is_active и все
Аноним 01/07/21 Чтв 23:10:02 #215 №751521 DELETED
>>751513
>>751517
Ну вы чего, в Node же есть штатный set_process_input(true/false)
Аноним 01/07/21 Чтв 23:16:40 #216 №751525 
>>751517
Что это?
Аноним 01/07/21 Чтв 23:21:18 #217 №751526 
>>751521
Спасибо! То что надо.
Аноним 01/07/21 Чтв 23:27:03 #218 №751527 
>>751521
Был бы ты тёлочкой, я бы тебя поцеловал.
Аноним 02/07/21 Птн 00:19:57 #219 №751534 
>>751527
Поцелуй его пабрацке ногомо.
Аноним 02/07/21 Птн 03:58:52 #220 №751547 
>>751521
Нельзя его юзать. Тебе может понадобиться менять визуал у ноды. И этот код смены визуала ты явно будешь хранить в скрипте. А ты его вырубил.
Аноним 02/07/21 Птн 08:49:12 #221 №751557 
>>750796
>Я так понимаю, объясняют это тем, что если бы mouse_exited срабатывал то тут же начинали бы нажиматься соседние кнопки, при том что первую ты еще не отпустил.
Это кстати работает не только для кнопок: к TextureRect приконнектить два сигнала mouse_entered() и mouse_exited(), и они перестают работать, если зажать кнопку мыши, когда курсор находится над TextureRect.

Для себя пока нашёл такое решение: отказался от кнопок, вместо них использую спрайты, на которые вешаю этот скрипт https://pastebin.com/yztZazat
Аноним 02/07/21 Птн 08:55:51 #222 №751558 
>>751547
>И этот код смены визуала ты явно будешь хранить в скрипте. А ты его вырубил.
Хранить этот код в скрипте, который не будешь вырубать. Не?
Аноним 02/07/21 Птн 09:09:43 #223 №751559 
>>751557
>вешаю этот скрипт https://pastebin.com/yztZazat
UPD небольшая правка https://pastebin.com/BwS0wk6s
Аноним 02/07/21 Птн 12:16:20 #224 №751577 
>>751500
Я был не прав
Аноним 02/07/21 Птн 21:11:04 #225 №751644 
Как можно зарендерить 3D меш поверх UI?
Аноним 02/07/21 Птн 21:39:41 #226 №751651 
>>751644
Вьюпортом. В UI-контролах даже есть такой. Во вьюпорте стало быть, рендеришь требуемый меш. Вьюпорт показывается поверх предыдущих нод и позади следующих.
Аноним 03/07/21 Суб 15:05:36 #227 №751709 
Я так понимаю через таймлайн AnimationPlayer'а к синглтоновскому-сеттеру/параметру доступ не получить, да?
Аноним 03/07/21 Суб 18:23:11 #228 №751732 DELETED
>>751709
Через скрипт все работает, а через интерфейс не нашел как добавить.
Наверное можно еще прямо в блокноте tscn отредактировать.
Аноним 03/07/21 Суб 20:11:12 #229 №751739 
1625332273692.png
>>751732
> через интерфейс не нашел как добавить
Через интерфейс плеера анимаций можно вписать абсолютный путь к синглтону. Только есть один нюанс. У меня на 3.3.2. Ключи не добавляет, пишет, что требуется 3 параметра, а добавление вызывается с двумя. поэтому, если прям сильно надо, то сначала настрой анимацию на прокси-ноде того же типа, что и твой синглтон, затем замени путь. Пик рилейтед.
Аноним 03/07/21 Суб 20:12:53 #230 №751740 
>>751651
Да, получилось, спасибо.
Аноним 03/07/21 Суб 20:41:00 #231 №751741 DELETED
>>751739
А, не догадался что можно вписать в поле свойства путь к другой ноде, не той что уже указана. Какой же годот гибкий.
Аноним 03/07/21 Суб 22:09:27 #232 №751749 
>>751741
На твоём месте, если бы мне понадобился анимированный синглтон, я бы добавил анимационный плеер прямо в него, а ещё лучше - сразу связку из плеера и анимационной стейтмашины, всё настроил бы в редакторе, а в игре мой код бы просто делал что-то типа такого:
> Singleton.transit_to("new_state")
Аноним 04/07/21 Вск 00:51:03 #233 №751771 
>>751749
Благодарю за пояснение
Аноним 04/07/21 Вск 00:59:11 #234 №751772 
>>751771
Да, это какое-то очень странное говно, ставлю абсолютный путь, пытаюсь добавить метод/параметр из синглтона, пишет неправильный путь, но если использовать сначала ноду из сцены, добавить метод/параметр и потом переименовать все под синглтон - работает без проблем. Никогда бы не догадался до такого обхода.
Аноним 04/07/21 Вск 13:02:32 #235 №751791 
Что нового?
Аноним 04/07/21 Вск 13:37:20 #236 №751804 DELETED
>>751791
Кто-то пилит пакетный менеджер для аддонов, думаю заюзать.
https://godotengine.org/asset-library/asset/962
Аноним 04/07/21 Вск 15:44:58 #237 №751847 
Никто не знает как сделать кастомный анимейшн плеер?
Аноним 04/07/21 Вск 15:48:06 #238 №751849 DELETED
>>751847
Что именно кастомное?
Аноним 04/07/21 Вск 15:51:10 #239 №751851 
>>751804
Интересненько...
Аноним 04/07/21 Вск 16:58:21 #240 №751864 
>>751772
Ну что тут сказать? Это хак. В его классическом смысле (как лайфхак, только коде-хак). Что-то не задумывавшееся разработчиками. И что интересно, хак этот я придумал читая твой вопрос. Читаю пост, и такой себе думаю, я ж там клацал и открывался текстбокс с вводом пути вручную, а что если туда ебануть абсолютный путь до синглтона? И такой открыл, и такой ебанул, а он такой ключи не добавляет. А я такой путь вернул, ключ добавил, путь переписал, запустил - работает. И я такой - ОооООоо, чеэсвэээ!
>>751791
> Что нового?
Говорят, Хуан в четвёрке все попапы сделает в отдельных окнах. Или не все? Поясните, посаны. Это какая-то хуйня, если он так сделает. Мне например внутриоконные псевдоокна, которые есть сейчас, больше подходят.
Аноним 04/07/21 Вск 17:33:20 #241 №751870 
>>751864
> Мне например внутриоконные псевдоокна, которые есть сейчас, больше подходят.
К хорошему быстро привыкаешь.
Аноним 04/07/21 Вск 18:27:48 #242 №751876 
>>751849
Тики для вызова функций на определенном тике.
Аноним 04/07/21 Вск 18:40:54 #243 №751878 
>>751876
Но ведь это уже есть. Или что ты имеешь ввиду?
Аноним 04/07/21 Вск 18:48:17 #244 №751880 
1625413696135.png
1625413696158.png
1625413696174.png
1625413696175.png
>>751878
Вот же, не?
Аноним 04/07/21 Вск 18:49:44 #245 №751881 
1625413783698.png
>>751880
Третья пикча не та:
Аноним 04/07/21 Вск 19:02:38 #246 №751882 
>>751878
У меня все нарисовано через визуал сервер. Я столкнулся с проблемой апдейта ридов и подсчета тика без таймера через сохранение инты предыдущего тика времени ос.

Крч у меня 2 проблемы.
1. Я хз как обновлять рисунок сделанный через VisualServer.canvas_item_create()
2. Я хз как по времени OS сделать нормальную обработку анимаций через redraw
Аноним 04/07/21 Вск 20:15:26 #247 №751891 
>>751882
По первому пункту ящитаю (с дивана) что редактор так же делает, например, когда в запускаемом проекте ты выставил галочку "показывать коллизии". Он эти коллизии рисует напрямую через АПИ вижуалсервера (осторожно, диван!) поэтому я бы глянул исходники редакторной части движка, чтобы подглядеть, как это реализовано там.
По второму пункту примерно то же, только непонятно зачем тебе время ОС, один хуй там те же тайминги, что приходят в мейнлуп (тоже диванное предположение, требуется проверка, но впадлу).
Аноним 04/07/21 Вск 21:54:57 #248 №751911 
>>751891
Разобрался. Вызов VisualServer'a идет отдельным потоком в движке, и годот прост не успевал почему-то получить новые параметры для перерисовки.

По второму пункту ещё не пробовал. Мне хочется, чтобы object'ы которые висят в памяти и не имеют нод спокойно себя рисовали и анимировали сами, либо через такую же обертку не несущую оверхеда
Аноним 05/07/21 Пнд 01:57:34 #249 №751938 
Может вопрос и глупый, но должен был задать

Вижу, что на оф. сайте можно скачать отдельную версию с поддержкой Mono. Вопрос такой: в стим версии есть вообще поддержка Mono?
Аноним 05/07/21 Пнд 17:38:56 #250 №751994 
>>751938
В чем профит стим версии перед нормальной?
Аноним 05/07/21 Пнд 18:49:11 #251 №752009 
>>751994
Тоже не понимаю. Может Хуан изначально местный ассетстор планировал через стим воркшип организовать, хз.
Аноним 05/07/21 Пнд 21:22:19 #252 №752022 
Как получить дубликат объекта в годоте?
Как сравнить кастомные классы?
Аноним 05/07/21 Пнд 21:47:03 #253 №752025 DELETED
>>752022
>Как получить дубликат объекта в годоте?
var second = first.duplicate()
>Как сравнить кастомные классы?
Наверное написать свою функцию сравнения.
Аноним 06/07/21 Втр 02:44:40 #254 №752036 
>>752025
у object нет метода duplicate.
Аноним 06/07/21 Втр 12:01:20 #255 №752067 DELETED
>>752036
И правда, ну тогда три варианта
1. Наследоваться от Node, Ну это ты можешь посчитать оверхедом.
2. Написать свой duplicate. В питонячьих языках это обычно легко, смотри функцию get_property_list() которая возвращает массив всех полей объекта (в формате словарь name: type)
3. Перейти на C#, там вроде есть MemberwiseClone()
Аноним 06/07/21 Втр 12:59:58 #256 №752075 
>>752067
Но я не могу получить класс кастомного объекта. Я его не создам, не прописав заранее класс в код. А значит не смогу сделать обертку для object на века.
Аноним 06/07/21 Втр 14:26:20 #257 №752084 DELETED
>>752075
Значит, не надо пользоваться object, пользуйся Node или Resource как базой, у них duplicate есть.
Аноним 06/07/21 Втр 15:33:12 #258 №752098 
Вот бы кто нибудь сделал игруху на годоте
Аноним 06/07/21 Втр 22:45:29 #259 №752158 
>>752084
Чтобы тащить гарбадж коллектор за собой? Увольте.
Аноним 06/07/21 Втр 22:49:33 #260 №752159 
>>752098
Вот игра на годоте.
https://2ch.hk/gd/res/747551.html
Аноним 07/07/21 Срд 00:20:59 #261 №752164 
>>752098
Вот как товарищ погромизд освободится, так может и продолжим делать.
Аноним 07/07/21 Срд 00:55:38 #262 №752165 
>>752164
а ты сам кто?
Аноним 07/07/21 Срд 01:06:21 #263 №752166 
>>752165
Пытающийся в графен. Пиксели содомирую, короче.
Аноним 07/07/21 Срд 05:48:36 #264 №752182 
Чот тайлмапы не оч понял.
Делаю одиночные плитки, могу кодом выставлять через set_cell, делаю атлас и могу только первую картинку юзать из атласа.
Типо кодом только одиночными плитками можно пользоваться и автотайлами?
Аноним 07/07/21 Срд 19:00:19 #265 №752328 DELETED
>>752182
Последний параметр опциональный задает координаты тайла с атласа.
Аноним 08/07/21 Чтв 08:50:43 #266 №752416 
>>752328
Тьфу блядь, ещё раз прочитал доку и увидел, спасибо.
Аноним 08/07/21 Чтв 10:31:35 #267 №752417 
2021-04-1618-20-03.mp4
2021-07-08 08-29-36.mp4
Как сделать, чтобы окно вело себя так, как на видео? Чтобы игра и объекты всегда были в центре и не меняли расположение, как на втором видео.
Аноним 08/07/21 Чтв 11:44:32 #268 №752424 
>>752417
anchor или привязки
Аноним 08/07/21 Чтв 13:00:27 #269 №752432 DELETED
>>752417
Есть разные способы
В одной игре делал так
1. Настройки Project->settings->window->stretch
mode=viewport
aspect=ignore

2. В _ready подписан на событие screen_resized
get_tree().connect("screen_resized", self, "_screen_resized")

3. пик
Аноним 09/07/21 Птн 20:53:50 #270 №752750 
>>752432
Спасибо, анонче!
Аноним 09/07/21 Птн 22:40:00 #271 №752759 
У кого-нибудь случайно шейдеров не завалялось, которые бы определенный цвет зеркалили?
Аноним 10/07/21 Суб 03:24:13 #272 №752778 
Почему шецдера со screen_texture не работают? Что за лажа?
Аноним 10/07/21 Суб 12:22:58 #273 №752811 DELETED
>>752778
В Gles2?
Аноним 10/07/21 Суб 14:16:27 #274 №752839 
>>752811
В глес 3 жалуется мне на какой то буфер, блеать. В редакторе работает, в игре нет. Мб я какую настройку в проекте не включил, хз
Аноним 10/07/21 Суб 14:18:07 #275 №752840 
>>752839
Вот такую муйню получаю.

E 0:03:52.159 copytexscreen: Can't use screen texture copying in a render target configured without copy buffers.
<C++ Error> Condition "storage->frame.currentrt->effects.mipmaps[0].sizes.size() == 0" is true.
<C++ Source> drivers/gles3/rasterizercanvasgles3.cpp:1259 @ copytexscreen()
Аноним 10/07/21 Суб 23:37:36 #276 №752956 DELETED
Впервые попробовал live editing, господи как это прекрасно.
И константы, положения на лету меняю, и скрипты.
Аноним 11/07/21 Вск 00:45:47 #277 №752963 
>>752839
Бамп вопросу.
Аноним 11/07/21 Вск 04:41:32 #278 №752971 
>>752963
BackBufferCopy почему-то не работает. Я без понятия как его использовать.
Аноним 11/07/21 Вск 15:47:45 #279 №753017 
>>752839
Бамп вопросу.
Аноним 11/07/21 Вск 16:53:31 #280 №753030 
>>753017
>>752963
Бля, анон, я не знаю ответа на этот вопрос. Прости!
Аноним 11/07/21 Вск 17:15:00 #281 №753038 DELETED
>>752971
Тоже не пользовался анон.
Вот эту оф демку смотрел? https://godotengine.org/asset-library/asset/122
Аноним 11/07/21 Вск 19:55:56 #282 №753077 
>>753030
Мне даже в чате годота не отвечают. Это очень странно
Аноним 11/07/21 Вск 20:04:44 #283 №753079 
Безымянный.png
>>753038
Я не понимаю что происходит. Я взял шейдер из оф демки, поместил на спрайт и получаю ошибки
Аноним 11/07/21 Вск 20:22:59 #284 №753084 
>>753079
В оф демо работает, кстати. И пока я хуй знает почему.
Аноним 11/07/21 Вск 21:02:33 #285 №753091 
Так, было в какой-то настройке дело. Теперь правда все равно нихуя не работает. Но это хотя бы не очень раздражает.
Аноним 11/07/21 Вск 21:14:29 #286 №753092 
Безымянный.png
Шейдер если видит что угодно кроме цвета заднего фона, красит воду в бело-красный (чтобы виднее при тесте) цвет. В зависимости от угла наклона камеры, шейдер либо работает, либо нет. Что блять странно и уродливо. Кто-то с этим сталкивался?
Аноним 11/07/21 Вск 21:17:30 #287 №753094 
>>753092
Шейдеры - штука капризная, если ты конкретно не знаешь, что именно ты делаешь - шейдеры тебя выебут. И они тебя судя по постам уже ебут, ибо ты копипастишь. Что посоветовать тут? Совет может быть один: пиши свой шейдер с нуля.
Аноним 11/07/21 Вск 21:58:38 #288 №753103 
>>753094
Я и пишу свой шейдер с нуля. Есть что по делу сказать? Почему шейдер у которого логика "вода наехала на что угодно фоном != цвета фона сделай белым" - не работает на весь экран?
Аноним 11/07/21 Вск 22:21:02 #289 №753105 
1626031262296.jpg
>>753103
> Есть что по делу сказать?
Есть.
> Почему шейдер не работает
Потому что ты не разобрался в вопросе и не знаешь, что ты делаешь.
Это не троллинг.
Это мой личный опыт, в геймдеве, в годоте и вообще в айти.
Предлагаю тебе пикрелейтед.
Аноним 11/07/21 Вск 22:24:46 #290 №753106 DELETED
>>753092
>В зависимости от угла наклона камеры
Что ты имеешь в виду? Разве у тебя не 2д спрайты?
Аноним 11/07/21 Вск 22:32:11 #291 №753109 
>>753106
У меня канвасы которые нарисованы через visual server поверх node2d. Чтобы их выстраивать попорядку, я использую z index, но что-то мне подсказывает, что у годота есть на z-index оптимизон, отрубающий получение скрин текстуры? потому что шейдеры работающие непосредственно с текстурой канваса - в порядке.
Угол наклона камеры, эт я конечно шизофразно спиздел. В общем в зависимости от положения камеры шейдеры либо включаются, либо отключаются, хотя канвасы ещё в камере (но видимо годот думает, что уже нет).

>>753105
Естественно я не разобрался в вопросе. Потому что я нахуй не понимаю, что происходит. Я делаю шейдер, на тестовом полигоне он работает как надо. Сую в мейн сцену, а игра думает, что моя камера не смотрит на объект и вырубает работу шейдера нахуй. Покажи мне пожалуйста документацию, где описано такое поведение, чтобы я разобрался.
Аноним 11/07/21 Вск 22:33:36 #292 №753110 
>>753109
> Покажи мне пожалуйста
Мне лень. Я лучше пивка ещё ёбну за твои успехи. Давай, успехов там тебе! И хорошего настроения!
Аноним 11/07/21 Вск 22:44:07 #293 №753112 
>>753110
Ага, спасибо.
Аноним 11/07/21 Вск 23:34:05 #294 №753118 
>>753109
Отбой. Мысль про z-index не верная. Все равно нихуя не пашет
Аноним 12/07/21 Пнд 16:13:26 #295 №753194 
4.0 всё еще не вышел?
Аноним 12/07/21 Пнд 16:47:51 #296 №753200 
>>753194
Waiting 4 4
Аноним 12/07/21 Пнд 20:02:41 #297 №753251 
>>753194
Зачем он? По сути в 3.3 есть все что нужно для разработки игр.
Аноним 12/07/21 Пнд 20:03:57 #298 №753252 
>>753251
Нет предела совершенству.
Аноним 12/07/21 Пнд 22:52:37 #299 №753279 DELETED
Ох какую красивую опечатку словил
Вроде бы в C# тут ошибка, а в C++ варнинг
Аноним 13/07/21 Втр 01:04:14 #300 №753289 
Кто-то сталкивался с 15 screen_texture шейдерами под андроид? У меня жуткие лаги от них.
Аноним 13/07/21 Втр 01:57:06 #301 №753295 
>>753289
Судя по всему:
- backbuffercopy уникален на каждый рид, тем самым превращая устройство андроид, где больше 10+ шейдеров с SCREEN_TEXTURE в лагающее говно.
- Каждый текст до сих пор вызывает draw call, будь то label или что-то иное, вроде draw_text().
- Канвас итем если состоит из нескольких текстур - вызывает 3 дравкола. Да, движку не интересно склеить все текстуры в одно внутри канвас итема и реюзать.

Вопрос в следующем, когда оптимизон от движкопись?
Аноним 13/07/21 Втр 02:36:50 #302 №753299 
>>753295
У меня до сих пор бомбит, что на рисование 30 символов выделяется 20 мб оперативы.
Аноним 13/07/21 Втр 21:10:01 #303 №753475 
>>753295
> когда оптимизон от движкопись?
Форкай и делай сам. Не жди Хуана.
Как только ты напишешь "зачем мне форкать, у меня есть юнити/уеч/гамак/итп" - на тебя моментально от меня летит репорт за движкосрач со всей любовью, побрацке, ногомо.
Аноним 13/07/21 Втр 22:26:48 #304 №753484 
Годотеры, когда альфа 4 версии будет?
Аноним 13/07/21 Втр 23:22:25 #305 №753495 
>>753484
Кочай бетку прямо сейчас https://downloads.tuxfamily.org/godotengine/testing/ не будь лохом! Не жди альфу.
Аноним 13/07/21 Втр 23:39:33 #306 №753498 
1626208768240.png
>>753495
Кубы содомируются на Вулкане.
Аноним 13/07/21 Втр 23:45:07 #307 №753499 
>>753475
Бле, я так то на годоте игру хотел доделать без форков. А то я сейчас форкану, починю эту залупу или хотя бы методы себе в годот выведу, а за это время движкописи новой версией починят другие баги, на которые я натолкнусь завтра.
Может есть кто знает фишку/костыль чтобы это обойти или имеет влияние в кругах движкопись,чтобы они в работу взяли?
Аноним 14/07/21 Срд 00:08:48 #308 №753501 
>>753499
Нужно быть кабанчиком. Если ты кабанчик, ты подскочишь, порешаешь вопросики, Хуан и Акиен мигом твои пулл реквесты одобрят.
Аноним 14/07/21 Срд 18:29:30 #309 №753668 DELETED
Не помню чтобы проскакивало в новостях, это что порталы завезли?
Аноним 14/07/21 Срд 23:17:31 #310 №753825 DELETED
В 3.4 немного поломали треды (что ломает пару аддонов), я пока баг репорт не отправлял, воркэраунд простой - добавить третий аргумент thread.start(self, "func_name", [])
Аноним OP 14/07/21 Срд 23:24:17 #311 №753835 
>>753825
Спасибо за совет. Это важно.
Аноним 15/07/21 Чтв 00:12:47 #312 №753855 
>>753668
Так они были всегда.

А что в 3.4 будет? Никак не могу найти заявленных фич
Аноним 15/07/21 Чтв 02:59:41 #313 №753866 DELETED
>>753855
>Так они были всегда.
Нет, был кастомный модуль lportal, теперь его автор другую лучшую реалищацию в сам движок впилил
https://github.com/godotengine/godot/commit/eb6f98ec559b3df1d1346d88ae4f94323db2d383
Аноним 15/07/21 Чтв 19:14:55 #314 №754035 
Для spatial:
rotate_object_local ( Vector3 axis, float angle ) - вращение в координатах самого объекта (object space)
global_rotate ( Vector3 axis, float angle ) - вращение в координатах world space

rotate ( Vector3 axis, float angle ) - это вращение в координатах родительского объекта (parent space), правильно?
Аноним 15/07/21 Чтв 19:40:09 #315 №754044 DELETED
>>754035
Вроде бы да.
Аноним 15/07/21 Чтв 20:39:31 #316 №754063 
>>754044
Спасибо.
Аноним 17/07/21 Суб 13:30:43 #317 №754712 
>>750984
Хвала Cinemachine. Аой...
Аноним 19/07/21 Пнд 15:53:40 #318 №755373 
Тут есть ребята которые умеют красивые шейдеры писать желающие помочь-проконсультировать?
Аноним 19/07/21 Пнд 16:44:24 #319 №755407 
>>755373
Я не умею, братюнь, сорян. Попробуй видосики на ютубе.
Аноним 19/07/21 Пнд 16:45:58 #320 №755408 
>>755407
Я от туда могу только копировать. А я хочу понять.
Аноним 19/07/21 Пнд 16:48:13 #321 №755410 
>>755408
Чтобы понять, следует читать матчасть. На твоём месте я бы загуглил GLSL и там уже по ссылочкам читал джва месяца.
Аноним 19/07/21 Пнд 17:05:31 #322 №755414 DELETED
>>755373
Задавай сразу конкретные вопросы, если знают - ответят.
Аноним 19/07/21 Пнд 18:31:37 #323 №755464 
>>755414
Есть атлас 900х900.
Есть выбранная картинка 300 на 300.
Как шейдером разделить картинку на 8 равных частей?

Как перевернуть изображение через шейдер?
Аноним 19/07/21 Пнд 21:02:36 #324 №755541 
Вот есть у меня VBoxContainer нулевого размера.
Потом я добавляю в него Label-ы через код, по идее его margin-ы и размер должны измениться же?
Потому что все показывается нормально, но в коде эти переменные не обновляются после добавления Label-ов.

Как в связи с этим получить актуальные размеры контейнера?
Аноним 19/07/21 Пнд 21:27:12 #325 №755554 DELETED
>>755464
В шейдере действуют координаты от 0.0 0.0 до 1.0 1.0
Также там подается что-то на вход, и что-то на выход.
Пик 1 - самый простой вариант это вручную задавать цвет.
Пик 2 - это читать цвет из текстуры по координатам UV и возможно как то его преобразовывать.
Пик 3 -Это значит что читать можно по любым координатам, например вот тут я перевернул по вертикали полоску второй четверти.
Пик 4 - насколько я понимаю, if в шейдерах плохо, а математика на параллельных ядрах хорошо. Поэтому есть такая функция как step(a,b), она возвращает 1.0 если a > b, в остальных случаях 0.0
Надеюсь тебе это поможет сориентироваться.
Аноним 19/07/21 Пнд 21:36:25 #326 №755564 DELETED
>>755554
Ну и чтобы управлять этим всем, надо завести переменную, например, вектор. Переменная в шейдерах называется uniform, и выставлять ее можно через скрипт.
Аноним 19/07/21 Пнд 22:18:45 #327 №755605 
>>755564
UV атлас текстуры работает не так. Он разделит всю текстуру на 8 частей, а не выделенную часть.

Аноним 19/07/21 Пнд 22:26:20 #328 №755618 DELETED
>>755605
Ну я не спорю, я в твою задачу особо не вникал.
Если тебе надо вырезать кусок с текстуры, то умножение и сдвиг UV координат и вперед.
Может быть есть более штатные способы какие-то специально для атласов, хз.
Аноним 19/07/21 Пнд 22:32:53 #329 №755625 
>>755618
Нет, атлас текстура уже порезала мне на 9 элементов 300 на 300.
Я беру по случайному куску 300х300 UV и получаю UV по всей текстуре, а не по этому куску. И соответсвенно этот кусок не могу поделить штатными методами.
Аноним 19/07/21 Пнд 22:43:58 #330 №755634 DELETED
>>755625
То есть ты имеешь в виду что атлас все равно передает всю текстуру 900 в шейдер целиком.
Если у тебя отдельные объекты, спрайты, то ты можешь передавать в шейдер через униформ, какой именно кусок. Если тайлмап, то я способов не придумал.
Аноним 19/07/21 Пнд 23:36:05 #331 №755663 
>>755634
Тайлмап. И атлас. И не передаёт в шейдер, а один раз на видюхе закешил и берет от туда регионы. По крайней мере так должен делать нормальный движок.
Аноним 20/07/21 Втр 12:44:47 #332 №755733 
>>755663
Чел деление на регионы делается на проце, какой нахуй шейдер, кеш и ещё какая залупа. Просто, если нужно отрисовать несколько регионов этой тайлмапы, создаётся батч и эта текстура уходит на отрисовку, где каждый регион указывает свой прямоугольник. Всё. Никакой хуйни. Так работает любой тайлмап под капотом в любом движке, фреймворке, библиотеке.
Аноним 20/07/21 Втр 13:11:17 #333 №755755 
>>755733
Блэт треды перепутал. Ну да похуй.
Аноним 20/07/21 Втр 13:45:31 #334 №755772 DELETED
>>755663
В тайлмапе зеркаливание реализовано. Завязывай с оверинжинирингом.
Аноним 20/07/21 Втр 14:08:58 #335 №755787 
>>755772
Каким овериндженерингом? Я шейдер пишу под тайлмапу.
Аноним 20/07/21 Втр 20:14:11 #336 №755898 
А тем временем, в бункере Петюни:
https://www.youtube.com/watch?v=hQ1j5R5IG6g
Аноним 21/07/21 Срд 06:21:42 #337 №755980 
Прикольно смотреть на то как они оправдывают удаление GLES2 при том что он работает лучше чем GLES3 и поддерживает больше устройств https://godotengine.org/article/about-godot4-vulkan-gles3-and-gles2
Аноним 21/07/21 Срд 06:35:39 #338 №755982 
лутший движок для игр
Аноним 21/07/21 Срд 11:37:23 #339 №756015 
>>755980
Рано или поздно от этого старья придется отказываться. Сейчас лучше сосредоточиться на Vulkan.
Аноним 21/07/21 Срд 12:13:18 #340 №756024 
1626858797635.png
>>755980
> оправдывают удаление GLES2
Но ведь удаляют глес 3. Пруф пик:
Аноним 21/07/21 Срд 13:50:15 #341 №756048 DELETED
>>755980
> поддерживает больше устройств
На момент выхода 4-ки это будет уже не большинство.
>GLES2 работает лучше
Если только в примитивных играх. Ну например террейна под него нет. Некоторых спецэффектов тоже.
Аноним 22/07/21 Чтв 23:51:47 #342 №756495 DELETED
Оригинально.
Аноним 23/07/21 Птн 20:04:41 #343 №756770 
Блдь а как сглаживать line2d, polygon2d и тд?
Аноним 23/07/21 Птн 20:10:02 #344 №756775 
>>756770
> line2d.antialiased = true
Аноним 23/07/21 Птн 22:11:30 #345 №756814 
>>756775
Да, но не меняется ничего же
Анончик 23/07/21 Птн 23:14:00 #346 №756838 
Кто-нибудь использует этот движок для производства игр на андроид, иос? Хочу вкатиться в движок, прочитал, что есть возможность такая, если я правильно понял
Аноним 24/07/21 Суб 00:06:45 #347 №756862 
>>756838
Появляются тут такие аноны, но редко, на быструю помощь не рассчитывай. Рикаминдую ютуб. Сканера знаешь? Он делал подробный туториал по сборке на андроид.
Аноним 24/07/21 Суб 00:09:39 #348 №756863 
>>756814
Выключи HDR или жди мержа.
https://godotengine.org/qa/53982/noticed-that-antialiased-setting-polygons-doesnt-anything
Аноним 24/07/21 Суб 05:01:55 #349 №756886 
>>756838
Хбт сделано под андроид на годоте. Под айос года полтора назад были баги в 3.1. Возможно поправили.
Анончик 24/07/21 Суб 05:35:55 #350 №756888 
>>756862
>>756886

Благодарю
Аноним 24/07/21 Суб 07:34:16 #351 №756892 
>>756863
Пробовал, шейдеры дохнут(
Аноним 24/07/21 Суб 14:19:48 #352 №756935 
1.jpg
годоти, поясните сложный прикол. почему созданный встроенный меш всегда повернут на 90 градусов? это "фича"?
Аноним 24/07/21 Суб 14:25:26 #353 №756938 
>>756935
почему ось X направлена ВЛЕВО?
Аноним 24/07/21 Суб 17:01:33 #354 №757008 
можно ли как-то перезагрузить ВСЮ игру? Закрыть и сразу же открыть.
Аноним 24/07/21 Суб 18:52:06 #355 №757053 
>>757008
get_tree().reload_current_scene()
Аноним 24/07/21 Суб 19:13:32 #356 №757062 
>>757053
Спасибо конечно, но я же специально выделил слово ВСЮ. Грубо говоря так же, если бы я закрыл и открыл игру.
Аноним 24/07/21 Суб 20:14:12 #357 №757086 DELETED
>>757062
get_tree().change_scene("res://my_launch_scene.tscn")
Аноним 25/07/21 Вск 00:07:18 #358 №757219 
>>757062
> если бы я закрыл и открыл игру
OS.execute("path/to/game")
get_tree().quit()
Аноним 25/07/21 Вск 12:08:07 #359 №757396 
>>757219
Круто, очень близко к тому что я хотел. Я пытался сделать настройки, которые включаются только при перезапуске игры. В итоге сделал временно костыльный недоспособ, но пока хватит.
Аноним 25/07/21 Вск 17:36:16 #360 №757524 
Передаю текст в скрипт и делаю reload();
Если ошибка отсутствует, все норм. Если присутствует - все крашится к хуям. Не хочу, чтобы крашилось.
Как сделать так, чтобы это говно начало мне возвращать ошибку?
Аноним 25/07/21 Вск 18:43:53 #361 №757532 
Безымянный.png
>>757524
Вот тут не возвращается ошибка, что меня раздражает. Он просто роняет игру и все.
Аноним 25/07/21 Вск 20:37:19 #362 №757582 DELETED
>>757532
А если без true?
Аноним 25/07/21 Вск 20:49:19 #363 №757586 
пытаюсь вкатиться, ебался с движением по склону часов пять. Ничего нормального нагуглить не смог
Аноним 25/07/21 Вск 21:00:54 #364 №757587 
>>757586
https://www.youtube.com/results?search_query=godot+stop+on+slope
Учи инглиш.
Аноним 25/07/21 Вск 21:19:45 #365 №757593 
>>757582
Тоже. Эта хуйня всегда возвращает 0. Ей норм. А потом берет и роняет игру с ошибкой. Сука, ебаный хуан.
Аноним 25/07/21 Вск 21:36:18 #366 №757600 DELETED
>>757593
А что должно, по твоему происходить, проверка гдскрипта на синтаксис?
Аноним 25/07/21 Вск 21:41:47 #367 №757607 
>>757587
все уже просмотрено, про прыжки нигде не говорят, а у меня именно они косо работают, впрочем похуй, решил своей головой думать и переписать с нуля.
Аноним 25/07/21 Вск 22:12:27 #368 №757629 
>>757600
Конечно, и возврат ошибки о ней. Но хуан на столько жесток, что РОНЯЕТ НАХУЙ ВСЕ при проверке на парсинг, и возвращает ошибку только если при компиляции срабатывает какая-то переменная can run. Я в шоке. Кто-нибудь знает как поправить код и перекомпилить годотю? А то я на С++ на винде заебусь пакеты качать.
Аноним 25/07/21 Вск 22:13:24 #369 №757631 
>>757629
Если кто-то знает как из годота достучаться до:
GDScriptParser - буду благодарен.
Аноним 25/07/21 Вск 22:22:24 #370 №757636 DELETED
>>757629
Да вроде бы сам годот себя ведет точно так же, он просто остановится на ошибочном скрипте, не проверяя заранее.
>>757631
Не факт что он вообще попадает в экспорт. Шаблоничики-то собираются с tools=no. Может быть кто-то gdnative модуль делал где просто копипастнул туда весь парсер.
Аноним 25/07/21 Вск 22:42:07 #371 №757646 
err.png
>>757636
Я хочу сам написать этот код на гдскрипте и вкинуть куда-нибудь в консоль или в текстовую ноду.
Как пользоваться нативскриптом так и не разобрался. Если есть норм примеры, дай плз. Тогда я тупо попробую скопировать парсер и анализатор.
Аноним 25/07/21 Вск 23:26:38 #372 №757656 DELETED
>>757646
Я в такое вписываться сейчас не готов.
Видел на гитхабе пару-тройку парсеров гдскрипта на питоне, может быть как костыль запускать их как внешнюю прогу и смотреть успешно ли распарсилось?
Аноним 26/07/21 Пнд 00:19:04 #373 №757661 
>>757656
Я гдскриптом буду запускать питонопарсер, чтобы понять запустился ли гдскрипт?
Аноним 26/07/21 Пнд 00:29:06 #374 №757663 DELETED
>>757661
Ну, я вижу твою цель так -
1. загрузить скрипт (тут годот не сингализирует об ошибках в самом скрипте, а только о факте загрузки файла),
2. ??? (проверка на ошибки в скрипте)
3. запустить, но если есть ошибки, то годот падает

На п.2 ты хочешь достать с++ код из движка, я предложил альтернативу.
Можно еще, вроде бы, запускать сам годот чтобы он выполнял скрипт, хз как это работает, пикрил

Вообще, я все равно вижу проблему в подходе. Ок, ты проверишь на ошбики. Но пользователь все равно может написать что-то вроде
var x = null
x.some_func()
это все равно упадет же, не? Способа игнорировать ошибки для какой-то ноды я не нашел.
Аноним 26/07/21 Пнд 00:29:48 #375 №757665 DELETED
>>757663
О, там даже скрипт чекер есть
Аноним 26/07/21 Пнд 00:42:22 #376 №757669 
>>757665
Я попробовал через ос экзекют, он орет с незнакомого символа юникода. Если у тебя есть работающий пример - будет хорошо.

Я бы хотел попробовать сделать прототип, где каждый игрок пишет скрипт своему персонажу, чтобы проходить уровни. Я могу запустить нормальный скрипт, но не могу отловить ошибку чтобы показать, что скрипт кривой. А так же не могу отловить ошибку, чтобы откатить выполнение скрипта, чтобы игрок мог продолжить исправлять скрипт.
Последнее что я хочу - это писать свой лексер и парсер)
Аноним 26/07/21 Пнд 00:45:31 #377 №757670 
>>757669
Вообще, как только кто-то накостылит плагин/ещё что-то позволяющее пользакам адекватно встраивать скрипты в твою игру, это позволит расширить аудиторию годота, хотящих побырому наверстать такого рода игры. Возможен даже асинхронный опенвлрлд, где каждый пишет свой объект и грузит скрипт на сервер, чтобы другие игроки их выкачали.
Аноним 26/07/21 Пнд 00:46:50 #378 №757671 DELETED
>>757670
Я видел какие то игры, где можно писать скрипты, но там упрощенный язык созданный для игры.
Может быть взять C#? Под него есть парсеры, и по крайней мере там можно взять в try catch
Аноним 26/07/21 Пнд 00:55:45 #379 №757672 
>>757671
Это устанавливать студию и мучится с прикреплением ее к годоту. Поэтому проще тогда уж на юнити.
Аноним 26/07/21 Пнд 01:00:53 #380 №757673 
>>757672
В общем, тяжёлый пакет говна и то и другое. В гдскрипте прелесть в том, что он весит мало и запускается на любом калькуляторе.
Аноним 26/07/21 Пнд 01:04:54 #381 №757675 DELETED
>>757673
Я нашел ту игрулю, автор пишет как он обрабатывает свой язык построчно
https://www.reddit.com/r/godot/comments/msodaw/finally_got_the_basics_of_my_ingame_scripting_done
Аноним 26/07/21 Пнд 01:21:23 #382 №757676 DELETED
>>757669
гдскрипт все равно упадет если игрок напишет
move(0/0)
Напиши свой мини-язык, в котором будут только нужные функции, типа move(x, y), shoot, raycast, может быть циклы, условия, переменные. За пару дней реально.
Аноним 26/07/21 Пнд 01:26:48 #383 №757677 
>>757676
Ну да, только как писать токены на кондишены и на for() я пока не знаю.
>>757675
Выглядит здорово!
Аноним 26/07/21 Пнд 01:45:44 #384 №757678 DELETED
>>757677
Давно не занимался языками, там будет что-то типа
IF cond_expr : cod_block
FOR var_name IN array : code_block
Аноним 26/07/21 Пнд 01:52:01 #385 №757680 
>>757678
Ну на псевдоязыке такие паттерны я тоже могу к чему угодно написать) А вот как дело до областей видимости дойдет, там не все так просто.
Аноним 26/07/21 Пнд 02:08:26 #386 №757685 DELETED
>>757680
Если ты для твг делаешь то нафиг надо области видимости.
За область видимости же не лексер все равно отвечает. Ну а там парсер посмотрит, что это имя уже есть в списке используемых и выдаст ошибку.
Аноним 26/07/21 Пнд 02:26:55 #387 №757686 
>>757685
Не для твг. Твг я уже не успею.
Аноним 26/07/21 Пнд 02:53:43 #388 №757688 
Обожаю все что связано с геймдевом в C#
\.nuget\packages\godot.net.sdk\3.3.0\Sdk\Sdk.props(29,3): Не удается найти пакет SDK для .NET. Убедитесь, что пакет установлен и версия, указанная в файле global.json (если он имеется), соответствует установленной.
Аноним 26/07/21 Пнд 03:14:46 #389 №757689 
>>757688
Короче т.к. папочка была ещё на 86х, хуанокод не мог залезть в 64х. Я в шоке.
Аноним 27/07/21 Втр 19:51:19 #390 №758124 DELETED
В глубинных интернетах наткнулся на фичу, но не понял ее назначение.
На вложенной сцене ставим галочку Load as Placeholder, и хопа, она больше не загружается при старте сцены.
Зато ее можно загрузить ручками ($Player as InstancePlaceholder).replace_by_instance()
Плюс: можно сделать отложенную загрузку, при этом не надо писать имена файлов из res://
Минус: сигналы не загрузятся, надо подключать руками после загрузки
Аноним 28/07/21 Срд 03:18:55 #391 №758242 DELETED
Сто раз говорил себе - теперь писать буду только на C#.
Ну и чо, очередную игру дописываю на гдскрипте.
Удобно, быстро, просто, мать его.
Аноним 28/07/21 Срд 15:35:59 #392 №758373 
Почти дописал свой парсер языка на с#.
Сделал математические, логические и операции сравнения. Установку/получение переменных. Вызов дефолтных функций с любым количеством параметров (без возврата/с возвратов значения). Ифы.
Остались циклы, объявление функций и вызов функци игрока. Потом полировка и все, можно писать игры на программирование.
Аноним 28/07/21 Срд 15:45:56 #393 №758388 
1627476355906.png
>>758373
> Почти дописал свой парсер языка
>>757669
> Я бы хотел попробовать сделать прототип, где каждый игрок пишет скрипт своему персонажу, чтобы проходить уровни.
В шапке описан вариант, как такое сделать без танцев с бубном. Правда из-за полного доступа к скриптингу, такой проект будет беззащитен против крыс.
>>747202 (OP)
> - Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Имя файлу можно задать любое. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории. Для запущенного таким образом проекта папка res:// становится доступна для записи (если это не ограничено правами доступа в системе).
Данный метод прямо позволяет не ебаться с подгрузкой скриптов в рантайме, а просто модифицировать весь проект на лету (в том числе редактором, и даже лучше редактором), а потом перезапускать "game.exe" в корневой папке проекта.
Аноним 28/07/21 Срд 17:47:57 #394 №758475 DELETED
>>758388
Чувак... Он делает игру, где игрок пишет скрипт во время игры, а не пакует зипы и перезапускает экзешник.
Аноним 28/07/21 Срд 21:27:32 #395 №758620 
>>758475
Чувак... Я ни слова не сказал о паковании зипов.
Аноним 28/07/21 Срд 21:49:59 #396 №758626 
>>758620
Ты про аддон диалоговой системы который работает на экспрешенах?
Аноним 28/07/21 Срд 23:13:38 #397 №758651 
Короче уже не важно. У меня работает нода for, нода while.
Осталось функции запилить и отлаживать. Возможно, будет работать в разы быстрее чем гдскрипт, лол.
Аноним 29/07/21 Чтв 03:42:19 #398 №758681 
>>758651
Так, вызов пользовательских функций и скопы сделал. Осталось потестить пару дней и можно в релиз, писать игру вокруг всего этого.
Аноним 29/07/21 Чтв 07:49:49 #399 №758689 
>>758626
Я про шаблон экспорта, который по сути является запускным файлом игры. Когда ты делаешь "экспорт", редактор пакует все файлы проекта в PCK кладёт его в указанную тобой папку и рядом кладёт "шаблон экспорта", который по сути является запускным файлом игры. Однако, как написано в ОП-посте, если просто положить в папку с проектом шаблон экспорта, и кликнуть по нему, он запустит игру прямо из проекта.

Таким образом, внутри игры не нужно делать загрузку скриптов, а достаточно только открывать, изменять и записывать файлы GD, после чего перезапускать связанные с ними сцены. Тоже внутри игры. Первоначальную отладку сделать в редакторе, а дальше хуярить внитриигровыми инструментами. При этом моддерам твоей игры весь редактор годота станет доступен как редактор игры. Что в некотором роде небезопасно.

Это уже будет не моддинг, а чистое комьюнити-редактирование игры целиком. Тут уж впору организовывать контроль версий и апрувить пуллреквесты.
Аноним 29/07/21 Чтв 08:11:16 #400 №758690 
>>758689
Я как бы могу скрипты и из годота релоадить. Твои шаблоны экспорта ошибки позволяют отлавливать в коде?
Аноним 29/07/21 Чтв 08:18:25 #401 №758691 
>>758690
> Твои шаблоны экспорта
> Твои
> Твои
Мопед не мой. Я просто разместил объяву.
Аноним 29/07/21 Чтв 09:17:30 #402 №758692 
Порекомендуйте плагин для Google Play In-App Review, которым пользуетесь.
Аноним 29/07/21 Чтв 09:19:41 #403 №758693 
image.png
Это что ещё за хуйня на шарпе?
Аноним 29/07/21 Чтв 09:32:21 #404 №758695 
>>758692
Порекомендуй свой, Бардинов, хуле скромничаешь?
>>758693
Телепаты в отпуске. Я позвонил им, они говорят
> пусть пакет нацеливания переустановит
> пусть восстановит удалённые сборки
> пусть перезапустит годот
Аноним 29/07/21 Чтв 09:42:33 #405 №758696 
>>758695
>Порекомендуй свой, Бардинов, хуле скромничаешь?
Чиво блять?
Аноним 29/07/21 Чтв 10:02:54 #406 №758700 
>>758696
Таво, блять. Не отпирайся. Запостил свой вопрос с правильно написанным Google Play In-App Review по которому в гугле первым постом вылезает годот-плагин на гитхабе за авторством некоего И. Бардинова. Рекламируешь свой плагин? Распиши его плюсы и минусы ИТТ.
Аноним 29/07/21 Чтв 10:25:15 #407 №758708 
>>758700
Шизоид, что ты несёшь. https://developer.android.com/guide/playcore/in-app-review
Аноним 29/07/21 Чтв 10:32:09 #408 №758710 
1627543928868.png
>>758708
Зачем обзываешься, Бардинов?
Аноним 29/07/21 Чтв 10:55:50 #409 №758715 
616216313613.png
>>758710
Странный человек, сам какой плугин используешь?
Аноним 30/07/21 Птн 04:52:06 #410 №758839 
>>757669
>Последнее что я хочу - это писать свой лексер и парсер)
Попробуй сделать имплементацию Forth. Вся машина пишется примерно за день-два.
>не могу отловить ошибку чтобы показать, что скрипт кривой
У Форт-машины очень мало ошибок, которые легко отловить:
- стек пуст (попытались снять число с пустого стека)
- стек переполнен (практически неактуально на современных ПК)
- слово не найдено (обратились к слову, которого нет в словаре)
Такие вещи как деление на ноль обрабатываются самими словами, а не Форт-машиной. В твоём случае обработка подобных ошибок будет на GDScript, что-то вроде "вызвали слово деления, но второе от вершины слово - ноль, значит нужно кинуть ошибку деления на ноль". Хотя можно сделать и на самом Форте (собственно Форт пишется на Форте, не считая самых примитивных слов)...

Плюс Форта для игры - не нужно никакого GUI и подсветки синтаксиса, достаточно имитации консольки. Правила языка настолько просты, что разберётся любой человек, особенно если он ничего про программирование не слышал.

Далее, ты можешь описать базовые игровые слова, например: идти поворот толкнуть открыть проверить закрасить и т.д. Каждое слово может использовать некоторое количество чисел со стека, например, слово идти берёт со стека число клеток, на которое нужно передвинуть фигурку персонажа в направлении его взгляда, а слово поворот берёт направление поворота (0/1 или 0-3). Игрок может мгновенно взаимодействовать с персонажем вот так:
>10 идти 0 поворот толкнуть 5 идти
Получается "пройти 10 клеток, повернуть налево, толкнуть препятствие, попытаться пройти ещё 5 клеток вперёд", при этом игровой персонаж выполнит эту программу после нажатия enter. Далее можно использовать подпрограммы - слова:
>: пройти-по-кругу ( диаметр -- ) dup идти 0 поворот dup идти 0 поворот dup идти 0 поворот идти ;
>2 пройти-по-кругу 5 пройти-по-кругу 10 пройти-по-кругу
Здесь мы объявляем слово пройти-по-кругу, которое возьмёт одно число со стека и ничего на стек не положит (см. комментарий в круглых скобках, общепринятый формат "берёт -- отдаёт"), в процессе оно дублирует (dup) число на вершине стека для своей работы, но это уже детали реализации. А дальше самое интересное - ходим кругами (квадрат тоже круг, только квадрат) с диаметрами 2, 5 и 10, или ещё сколько угодно. Можем использовать это слово в другом слове. А можем переписать этот код так:
>: влево ( -- 0 ) 0 ;
>: идти-и-повернуть ( направление расстояние -- направление расстояние ) dup идти swap dup поворот swap ;
>: пройти-по-кругу ( диаметр -- ) влево swap идти-и-повернуть идти-и-повернуть идти-и-повернуть идти drop ;
Кстати, повторное объявление пройти-по-кругу перезапишет предыдущее, и в результате в последующем коде мы будем обращаться к самому свежему объявлению этого слова, а на весь предыдущий код это переопределение никак не влияет, что очень удобно в некоторых случаях.
Данный код, во-первых, стал читабельнее, во-вторых, теперь можно будет использовать слово идти-и-повернуть в других словах, например, в хождении зигзагом:
>: вправо ( -- 1 ) 1 ;
>: зигзаг ( длина-шага шаги -- ) 0 do влево swap идти-и-повернуть drop вправо swap идти-и-повернуть drop loop ;
>5 10 зигзаг
Тут использован цикл со счётчиком, который позволяет выполнить код указанное число раз. Всё просто и понятно, если предварительно ознакомиться со стандартными словами и порядком аргументов.

Короче, Форт очень хорошо подошёл бы для программерской игрушки любого уровня сложности. Вместо набора слов можно использовать визуальные фишки, которые размещаются мышкой в последовательность (те же условия и циклы можно заменить крупными фишками с "окошками" под фишки), в общем, есть простор для упрощений. А главное что Форт-машина легко пишется на любом ЯП и по сравнению с современными языками крайне быстрая и экономная, в идеале даже быстрее компилируемых ЯП высокого уровня (если сама Форт-машина на ассемблере, но это не наш случай), а компиляция выполняется по отдельным словам в момент их написания (это не так страшно, как звучит). В качестве базовых слов можешь использовать что угодно, ты не обязан следовать стандарту Форта, у тебя свой язык под свою задачу.

мимо джва+ года мечтаю о такой игре с Фортом
Аноним 30/07/21 Птн 05:08:35 #411 №758840 
>>758839
Так и знал, что ошибусь в коде, вот исправленная версия:
>: зигзаг ( длина-шага шаги -- ) 0 do влево swap идти-и-повернуть swap drop вправо swap идти-и-повернуть swap drop loop drop ;
По-русски:
- изначально вершина стека выглядит так: ... длина-шага шаги
- первое число с вершины (шаги) вместе с 0 "съест" do как начало цикла (аналог for)
- потом кладём на вершину "влево" (0), и обмениваем местами (swap) с "длина-шага"
- выполняем слово "идти-и-повернуть", которое сохранит вершину стека нетронутой
- однако "влево" нам больше не нужно, поэтому сбрасываем его (swap drop)
- и теперь кладём на вершину "вправо", снова крутим (swap)
- выполняем второе "идти-и-повернуть", снова сбрасываем направление (swap drop)
- повторяем цикл (loop) пока не досчитаем до "шаги"
- сбрасываем оставшееся "длина-шага" (drop)
Кажется что слишком сложно, но на самом деле всё просто, ощущение сложности создаёт количество операций со стеком и обратная польская запись, но ко всему привыкаешь и принимаешь это как единственно возможное решение любых задач)
Аноним 30/07/21 Птн 06:06:48 #412 №758843 
>>758840
Это очень интересный комментарий, потому что я уже написал свой компилируемый парсер для годота который умеет в базовые конструкции люого языка. Почему твой комментарий интересный? Потому что он интерпретатор. Но уже не охото переделывать.
Аноним 30/07/21 Птн 09:14:04 #413 №758852 
>>758843
>он интерпретатор
Что интересного в простом интерпретаторе? Правда, Форт-машина - не простой интерпретатор, от интерпретатора в ней только интерактивный режим (как в консоли питона или консоли JS), а все новые слова компилируются в шитый код по мере их поступления (из консоли или из файла). В интерактивном режиме Форта невозможно делать некоторые вещи, например, нельзя напрямую использовать ветвление и циклы (только в составе вызываемых слов). Но для простого управления персонажем этого должно быть достаточно, а для чего-то большего описываешь слова и они моментально компилируются.

А что ты сделал? Как так "умеет в конструкции любого языка"? Некоторые языки очень сильно отличаются друг от друга.
Аноним 30/07/21 Птн 10:26:13 #414 №758864 
>>758852
У меня есть:
- создание кастомный функций пользователем
- вызов этих самых функций
- вызов подкапотных функций написанных мной
- обязательность функции Мейн откуда пойдет начало скрипта
- циклы форич, вайл
- ифы
- области видимости
- переменные интового и булевого типа
- математические формулы (плюс, минус, умножить)
- логические операторы - энд, ор, нот
- операторы сравнения - равно, не равно, больше, меньше, больше или равно, меньше или равно

Ну дальше надо дотестить и мб массивы добавить для удобства.
Аноним 30/07/21 Птн 15:14:33 #415 №758955 
>>758864
func main(){
@b = 5;
@g = 1;
for @tile_num in tiles(){
@b = @b+@tile_num;
}
g(@b, @g);
}
func g(@a, @g){
if (@g == 1){
print(@g);
}
print(@a);
}"
Аноним 30/07/21 Птн 15:14:50 #416 №758956 
>>758955
Крч такой код обрабатывает.
Аноним 30/07/21 Птн 17:43:12 #417 №758988 
>>758955
Собачки в коде нахуя? Обоснование есть?
Аноним 30/07/21 Птн 18:58:55 #418 №759015 DELETED
>>758988
Очевидно, он так детектит переменные, упрощая парсер, и не вводя ключевые слова var, let
Аноним 30/07/21 Птн 19:40:13 #419 №759039 
>>759015
Вначале была явная инициализация, через вар. Но потом мне показалось это скучным и лишь мешающим пользователю. Плюс переменные с собачками явно видно.
Аноним 30/07/21 Птн 20:47:10 #420 №759059 
В общем ищу программиста, который бы продолжил делать мой проект с написанием кода для игрока. Я не могу сейчас его делать, т.к. два проекта не потяну. Пишите свои тгшчки. У меня гениальная геймдизайнерская задумка.
Аноним 30/07/21 Птн 21:29:33 #421 №759080 
>>759015
> упрощая парсер
Каким образом он упрощает парсер? Вместо case else (в который попадают переменные в парсерах здорового человека, когда все ключевые слова обработаны, а значит остались только объявляения переменных) у него дополнительный case @.
>>759039
> скучным и лишь мешающим пользователю
Очередной аутист, блять.
Аноним 30/07/21 Птн 22:18:33 #422 №759098 
>>759080
Жаль что ты неуч ебаный, который ни одного парсера в глаза не видел и выдумывает как оно работает.
Аноним 30/07/21 Птн 22:28:10 #423 №759099 
Разве это говно может быть красивее, чем предыдущее с собаками?
func main(){
b = 5;
g = 1;
for tile_num in tiles(){
b = b+tile_num;
}
g(b, g);
}
func g(a, g){
if (g == 1){
print(g);
}
print(a);
}
Аноним 30/07/21 Птн 22:44:19 #424 №759100 DELETED
>>759080
>Каким образом он упрощает парсер?
Когда читаешь токен, сразу знаешь, что если он начинается с @ то это имя переменной.
Аноним 30/07/21 Птн 23:03:05 #425 №759105 
>>759098
> ты неуч ебаный, который ни одного парсера в глаза не видел
Смешные заявления от неуча, видевшего ОДИН парсер-...
>>759100
..-.токенизатор
Аноним 30/07/21 Птн 23:32:22 #426 №759114 
>>759105
Смешно читать заявления от неуча, который экстрополирует свою проблему на других.
Аноним 30/07/21 Птн 23:39:40 #427 №759116 
>>759114
> ты неуч, яскозал
Аргументация - моё почтение.
У меня нет проблем с парсерами, такшта мне нечего экстраполировать на залётного тролика, демагогящего редукцией к невежеству.
Аноним 31/07/21 Суб 00:10:13 #428 №759126 
>>759116
Ты поздно с детского сада приходишь. Троллики у него, нет ты дурак. Просто пиздец.
Аноним 31/07/21 Суб 05:34:08 #429 №759172 
>>758695
>>758693
Бамп проблемой. не помогло.
Аноним 31/07/21 Суб 06:13:14 #430 №759173 
>>759172
Нужно удалить в програм файлсе 86 папку с net залупой, если она присутствует в х64. + скачать говно именно той версии, которую поддерживает годот.
Аноним 31/07/21 Суб 08:28:25 #431 №759175 
>>759173
Не помогло. Снёс нахуй, короче.
Аноним 31/07/21 Суб 09:04:24 #432 №759178 
>>759175
Опять годот виноват в том, что залётный движкосрачер вкатился в опенсорц на инвалидной коляске, свалился на первой же кочке и был выебан древним, отточенным механизмом опенсорца на потеху всех УМВР-пасанов.
Аноним 31/07/21 Суб 21:48:33 #433 №759318 
в 4вермии будет прорыв?
Аноним 31/07/21 Суб 21:54:53 #434 №759320 
Пахом.jpg
>>759318
Уже, блять, ты видел как рендерит ахуенно?
Аноним 31/07/21 Суб 21:59:00 #435 №759322 
>>759320
а что еще?
Аноним 31/07/21 Суб 22:04:36 #436 №759325 
>>759322
Да это уже много, до этого годот был непригоден просто к 3д, а сейчас сразу считай твердочёткий прорыв. Рывок со дна поносного до альфа центавры. Вопрос по производительности остаётся. Осталось заменить гдскрипт на сишарпу. Хотя надо узнать, они же там что-то переделывали, производительность может увеличилась?
Аноним 01/08/21 Вск 12:54:09 #437 №759483 
подскажите как настроечки сделать, допустим я хочу подрубить msaa внутри игры. Я нагуглить не могу, разучился
Аноним 01/08/21 Вск 21:05:26 #438 №759607 
>>759483
Берешь в поиск убиваешь msaa и ставишь галочку.
Аноним 04/08/21 Срд 03:18:52 #439 №760542 DELETED
Скоро будет как в блендере
Аноним OP 04/08/21 Срд 16:20:58 #440 №760758 
1628083259595.png
Блять, за что мне это? Хуан, за чтоооо??? Нахуй ты поп-апы поломал? Неужели нельзя было оставить псевдооконные классы в зелёных нодах, как сейчас в трёшке, и выводить их в отдельное окно через встраивание в выделенный класс на скриншоте? Вот уёбок, прости господи.
Аноним 04/08/21 Срд 17:47:03 #441 №760791 
Безымянный.png
Пацаны, годот ставит мне залупу 6.5 версии, а она не работает на 18 жаве. Как мне поднять её до 7.1?
Аноним 05/08/21 Чтв 04:54:13 #442 №761041 
Бля, прошел 9 кругов ада, но все же все запустилась. Но при добавлении адмоба в модули андроида проект фаталит. Кто знает почему?
Аноним 05/08/21 Чтв 12:45:56 #443 №761091 DELETED
>>760791
Зачем тебе 18 жава?
Аноним 05/08/21 Чтв 23:40:47 #444 №761509 
>>761091
Я думал надо выбирать версию под размер челена.
Аноним 08/08/21 Вск 14:45:15 #445 №762542 
Можно ли как-то без viewport в качестве фона сделать текстуру или градиент? На переднем плане 3D модель.
У меня сейчас в настройках Environment: Background - Color+Sky. Могу менять цвет фона, но хотелось бы туда присобачить текстуру.
Аноним 08/08/21 Вск 16:34:30 #446 №762628 DELETED
>>762542
Написано делать так
Environment: Background - canvas
Canvas Layer с глубиной -1
И уже на него кидать свой задник
Аноним 08/08/21 Вск 18:39:57 #447 №762712 
>>762628
Про Sky там ничего не написано? а то мне без него никак.
Аноним 08/08/21 Вск 18:56:24 #448 №762720 DELETED
>>762712
Может тебе просто билбоард поставить?
Да и во вьюпортах нет ничего страшного.
Аноним 08/08/21 Вск 19:54:37 #449 №762732 
>>762720
Спасибо, это мне подходит. Сейчас буду учиться растягивать его на весь экран.
Аноним 09/08/21 Пнд 01:20:04 #450 №762822 
>>762720
>во вьюпортах нет ничего страшного
Они мне фпс просаживают.
Аноним 09/08/21 Пнд 14:03:00 #451 №762882 
пук.png
Хочу рендерить много-много квадратиков разных размеров, некоторые в будущем могут иметь текстуру и коллизии. Я знаю про компонент TileMap2D, но для него нужно создавать тайлсет, а это создаёт лишние трудности. Короче, хочу рисовать вручную, как на пикриле (я уже делал более сложный код, этот для примера).

Вопросы:
1. Чё как с оптимизацией? Я читал про то, что _draw() выполняется один раз (обновить можно только вызовом update()) и результат кэшируется, но что на счёт видимости на экране - кулинг есть?
2. Как прикручивать физику? Создавать отдельные ноды статикбоди с кучей коллижншейп под каждую зону? Тайлмап ведь именно так делает, только скрытно от юзера?
3. Стоит ли вообще смотреть в сторону тайлмап, если мне не нужна сортировка по Y, разворачиваю тайлы я через код (я пробовал автотайлы, там нужно много лишнего рисовать, не умеет он использовать один тайл в 4 ракурсах сразу, очень жаль), а необходимость делать все тайлы заранее и одного размера меня сильно ограничивает? Заполнение и настройка тайлмапы выглядит как лишние телодвижения, если я могу просто спамить draw_rect().
4. Я правильно понял, что если какой-то тайл имеет полупрозрачность, нужно создавать отдельную тайлмап, на которой будет фоновый тайл? Что-то я не нашёл переключения слоёв, как, например, в Tiled. Полупрозрачность нужна для совмещения разных типов тайлов, но без нескольких слоёв ничего совместить не получится. Довольно странно создавать отдельный тайлмап, при том что вручную я мог бы нарисовать гораздо быстрее (в один проход).
Аноним 09/08/21 Пнд 15:41:15 #452 №762927 DELETED
>>762822
Фпс просаживает не вьюпорт, а рендер всей сцены его камерой.
Т.е. если у тебя обычная сцена (все равно тратит 1 корневой вьюпорт) + еще один вьюпорт, например для зеркала или камеры наблюдения, то это будет 2 рендера сцены. А если ты основную сцену перенесешь во вьюпорт, отрендеришь в текстуру и выведешь поверх спрайта, то вроде ничего серьезного просаживать не должно.
Аноним 09/08/21 Пнд 16:14:01 #453 №762943 
>>762927
>основную сцену перенесешь во вьюпорт, отрендеришь в текстуру и выведешь поверх спрайта
Кстати, это возможно как-то сделать без мерцания экрана? Я пробовал сделать рендер мира в контрол на экране, но если просто перенести сцену во второй вьюпорт, вьюпорт ничего не рендерит до следующего кадра (чёрная картинка на выходе). Если использовать yield (ожидание следующего кадра), то на экране видно мерцание из-за того, что основной вьюпорт рендерит пустую сцену один кадр, пока сцена не вернётся из второго. Так и не понял, как от этого избавиться, и просто нарисовал весь мир простыми формами на картинке, но всё равно интересно, как это правильно делать, чтобы ничего не мигало.

другой анон
Аноним 09/08/21 Пнд 16:36:34 #454 №762950 
>>762943

>Если использовать yield, то на экране видно мерцание
В том числе и из-за этого тоже отказался от вьюпорта, это даже хуже чем снижение fps.

тот самый анон
Аноним 09/08/21 Пнд 16:43:27 #455 №762953 
>>762950
Ещё про фпс: почему-то на линуксе и в html5 drawcalls в два раза больше, чем на андроиде для одной и той же игры.
Аноним 09/08/21 Пнд 20:15:45 #456 №763000 
>>762882
>Я читал про то, что _draw() выполняется один раз (обновить можно только вызовом update()) и результат кэшируется, но что на счёт видимости на экране - кулинг есть?
Ээээ, короче, я потестил. Кэширование и кулинг действительно присутствуют, но есть и нюанс...
1. В "кэш отрисовки" судя по всему, загоняются вызовы функций, а не текстура. То есть если 64 квадрата полностью закрывают большую площадь - норм, если квадратов 4096 на той же площади - у меня просадка до 16 фпс. Я ожидал кэширование в виде текстур...
2. Если ни одного кусочка нарисованного на экране нет, то оно и не рисуется, фпс на 75. Как только на экране появляется хотя бы один пиксель, все эти 4096 вызовов вступают в бой и просаживают фпс. То есть кулинг идёт по целой ноде, а не тому, что нарисовано. Тут я ничего хорошего не ожидал, т.к. ожидал кэширование текстурой.

Из этого следует вопрос, как превратить нарисованное в текстуру, не извращаясь с вьюпортами? Мне бы функцию типа get_texture() или convert_to_texture(), но я не нашёл. Когда ищу "how to draw to texture" поисковик выдаёт обсуждения на тему "как рисовать во вьюпорт", но мне не нужен вьюпорт, мне нужно кэшировать рисунок в текстуру.

Кстати, на SDL2 это делалось очень легко, быстро сделал чанковую отрисовку с кэшированием через текстуры, фпс был очень хорошим. А здесь что-то непонятное...
Аноним 10/08/21 Втр 00:15:24 #457 №763034 
>>763000
>мне не нужен вьюпорт, мне нужно кэшировать рисунок в текстуру
Ладно, не важно, я уже сделал через вьюпорт. Похоже, вьюпорт - единственный способ рендерить в текстуру. Правда, потом приходится повторно вызывать _draw() для очистки рендерера, т.к. пусть даже его не видно в основном вьюпорте, он всё равно рендерится во втором.
Аноним 10/08/21 Втр 08:50:07 #458 №763052 
>>763039
Какой?
Аноним 10/08/21 Втр 12:29:18 #459 №763073 
А можно как-то дождаться выполнения update() или _draw()?

У меня такая система получилась:
- в сцене есть второй вьюпорт
- в нём камера и node2d
- нода содержит скрипт рендеринга в текстуру
- чтобы отрендерить что-то:
1. передаём ноде информацию о том, что рендерить
2. вызываем у ноды update() и делаем yield(VisualServer...)
3. в _draw() происходит отрисовка
4. там же делается yield(VisualServer...)
5. текстура из вьюпорта сохраняется в last_texture ноды
6. нода переключает себя в режим очистки
7. снова вызывается update() и yield(VisualServer...)
8. в _draw() ничего не рисуется (очистка кэша)
9. возврат к п.2, переносим текстуру из last_texture в спрайт

Что я ожидаю:
1. Тот, кто запрашивает рендер, ждёт текстуру.
2. Нода-рендерер делает текстуру и возвращает её.
3. Запрашивавший текстуру получает её и довольно урчит.
4. Нода-рендерер чистит свою _draw(), не трогая текстуру.

Что получается: текстура рендерится, но запрашивающий получает неактуальную текстуру, а предыдущую. Если запрашивающий делает два yield(VisualServer...) подряд, то ВНЕЗАПНО происходит две отрисовки текстуры подряд, что в 2 раза затратнее, чем могло бы быть, но текстура приходит верная. Если запрашивающий не делает yield(VisualServer...) совсем, текстура вообще не приходит или приходит какая-то не та, возможно предпредыдущая, сложно понять.

Как это решить? Мне нужно чтобы _draw() вызывался только два раза, а не четыре, но при этом нужно получить текстуру вот прям сразу, а не в следующий раз. Я пытался делать yield(update(), "complete"), но судя по ошибкам в консоли, update() не является функцией (лолшто).

Вообще читал про yield, странный какой-то механизм, тяжело представить себе его работу.
Аноним 10/08/21 Втр 15:10:30 #460 №763099 
>>763052
UE5
Аноним 10/08/21 Втр 18:00:54 #461 №763122 
>>763073
Ладно, я уже сам разобрался.

>ВНЕЗАПНО происходит две отрисовки текстуры подряд
Это я сам виноват. У меня отрисовка текстуры происходит по проверке одной переменной, значение которой менялось после yield, в итоге всё это срабатывало дважды. Перенёс одну строчку и теперь всё один раз выполняется, как задумано.

>запрашивающий получает неактуальную текстуру, а предыдущую
А вот это связано с очень странным поведением yield: если вложенная процедура останавливается ждать чего-то, выполнение вызывающей её процедуры продолжается так, будто процедура уже завершилась. Пример:
func f1():
_ f2()
_ print("1")
func f2():
_ yield(VisualServer, "frame_post_draw")
_ print("2")
Вопрос: что будет выведено? 21 или 12? Логично предположить, что должно быть 21, т.к. f2 по идее остановлена и вместе с ней остановлена f1. А нет, на самом деле yield ставит метку "вернись сюда, когда %сигнал%" и всё, дальше программа выполняется как если бы f2 уже завершилась, и ответ будет 12.

Я обнаружил это только после того, как обмазался print() и начал беспорядочно тыкать yield во все места. Потом догадался создать дополнительный signal, чтобы приостановить вышестоящую процедуру (в примере это f1) и всё заработало. Как-то так:
func f1():
_ f2()
_ yield(self, "f2_done")
_ print("1")
func f2():
_ yield(VisualServer, "frame_post_draw")
_ print("2")
_ emit_signal("f2_done")
Мне кажется, что это жуткий костыль, но по-другому будет только костыльнее. Имхо, о таком должны в мануале большими буквами писать, а то даже если это где-то и написано, я не нашёл. Уж точно во встроенной справке ничего об этом нет...
Аноним 10/08/21 Втр 18:26:25 #462 №763129 DELETED
>>763122
Вроде по документации так корутины и работают
https://docs.godotengine.org/en/stable/getting_started/scripting/gdscript/gdscript_basics.html#coroutines-with-yield

Calling yield() will immediately return from the current function, with the current frozen state of the same function as the return value
Аноним 10/08/21 Втр 18:49:33 #463 №763136 
>>763129
Ну да, я читал этот фрагмент, но не так понял.
Аноним 10/08/21 Втр 18:55:11 #464 №763137 
>>763129
Я вспомнил, что меня запутало:
https://docs.godotengine.org/en/stable/tutorials/viewports/viewports.html
>But if you use this in _ready() or from the first frame of the Viewport's initialization, you will get an empty texture because there is nothing to get as texture. You can deal with it using (for example):
># Wait until the frame has finished before getting the texture.
>yield(VisualServer, "frame_post_draw")
># You can get the image after this.
Я зацепился за это "wait" и думал, что весь мой код останавливается, или по крайней мере весь код из одного скрипта. А если выполнение продолжается как после return, то это никакое не "wait", не знаю, как это правильно назвать. Могли хоть предупредить, что "ждёт" только одна конкретная функция...
Аноним 13/08/21 Птн 15:42:38 #465 №763602 
Screenshot2021-08-1315-38-34.png
Screenshot2021-08-1315-40-06.png
Screenshot2021-08-1315-40-33.png
Небо с высоты
Ответ на незаданный вопрос Аноним 14/08/21 Суб 08:32:23 #466 №763781 
1628919142946.png
Нахуй ТВГ. Нахуй геймдев. Нахуй всё.
Аноним 14/08/21 Суб 15:33:28 #467 №763882 DELETED
>>763781
А что так, на тебя короткий дождик так депрессивно подействовал? Я уже прототип сделал.
Аноним 14/08/21 Суб 18:53:07 #468 №763919 
>>763781
Ты чего так расстроился-то?
Ну не успели и не успели, да и хрен с ним! Ещё доделаем.
Аноним 14/08/21 Суб 22:03:33 #469 №763949 DELETED
Аноним 15/08/21 Вск 14:55:53 #470 №764025 
Как лучше обнулять вектора:
= Vector2(0, 0)
или
.x = 0
.y = 0
?
Аноним 15/08/21 Вск 15:39:00 #471 №764030 
>>764025
Таблетки
Аноним 15/08/21 Вск 16:10:39 #472 №764033 
>>764030
Нет ты.
Аноним 15/08/21 Вск 16:39:34 #473 №764034 DELETED
>>764025
= Vector.ZERO
Аноним 15/08/21 Вск 16:42:24 #474 №764037 
>>764025
Очевидно через абстрактную фабрику обнуления векторов.
Аноним 15/08/21 Вск 17:27:57 #475 №764042 
>>764037
а если на фабрике забастовка? как занулять?
Аноним 15/08/21 Вск 21:28:00 #476 №764091 
>>764042
Годогвардейцев пошли, пусть отпиздит шатателей киберлодки.
Аноним 15/08/21 Вск 21:39:33 #477 №764098 
Двач, а как компьютер выводит цвет на экран? Ну вот, допустим, пилю я веб страницу и в css указываю три байта rgb цвета. Как выстроена цепочка событий внутри компьютера, чтобы отобразить указаный мной цвет?
Аноним 16/08/21 Пнд 00:12:56 #478 №764122 DELETED
>>764098
Какой то вопрос уровня собеседования в гугол. В деталях не знаю, сначала браузер собирает все в слои, css от слова каскадные, т.е. цвет берется от предка к наследнику, наворачиваются всякие полутени, прозрачности, потом это все отправляется в либу (в хроме это skia) которая, вроде бы, по строчкам все сканирует и собирает команду paint, эта команда улетает в gpu сервер в песочнице, дальше преобразуется в opengl команду, думаю тут собирается в текстуры разбитые по атласам (чтобы весь экран не перерисовывать когда у тебя только один элемент поменялся), тут опционально если бекэнд ANGLE то конвертируется в команду для vulkan, ну и собственно отправляется в драйвер (тут где-то участвует композитинг операционки, опять же для всяких прозрачных окошек, плюс цветокоррекция, ночные зеленые темы, яркость контрастность в панели нвидия, вот это все), не знаю, участвуют ли тут шейдеры, но шейдеры это просто по сути обработать параллельными ядрами видяхи все вершины и все пиксели текстуры по заданным алгоритмам. Физику мониторов вообще не знаю, это какой то бутерброд из нескольких слоев, где-то там куча почти прозрачных транзисторов, которым выборочно по строкам/столбцам включают прозрачность током, и в которые с торцов светят из трубочных ламп.
Аноним 17/08/21 Втр 12:26:22 #479 №764281 
>>764025
> Как лучше обнулять вектора:
1. Выбираешь несколько способов, предложенных выше.
2. Оборачиваешь каждый способ в функцию.
3. Запускаешь каждую функцию в цикле 999999 раз, подсчитывая время выполнения.
4. Выбираешь ту, которая выполнялась быстрее всего.
Аноним 21/08/21 Суб 17:38:44 #480 №765224 
https://github.com/Shfty/qodot-plugin
Ну и кто вы после этого?
Аноним OP 21/08/21 Суб 20:47:15 #481 №765313 
>>765224
Прости анончик-рокетджамповый-попрыгунчик. Было 10 тредов назад. Никого не заинтересовало (меня тоже). Добавить в шапку?
Аноним 21/08/21 Суб 20:53:24 #482 №765316 DELETED
>>765224
А что? Это же тупиковый путь. "импортить .map кваки, чтобы не учить блендер". Бе.
Аноним 21/08/21 Суб 23:30:40 #483 №765393 DELETED
Scatter https://github.com/HungryProton/scatter/
- мощная штука. Вообще-то она для рассадки травы и деревьев, но заборчик в примерах натолкнул меня на мысль, и действительно, оказалось, что оно отлично подходит для рисования дорог из куска прямоугольника.
Для этого я добавил модификатор Along the path (even) с галочкой Align to Path, модификатор Project on Floor с галочкой Align with floor normal.
Точки ставятся Ctrl+ЛКМ, двигаются ЛКМ, удаляются ПКМ, хэндлы для кривых двигаются Shift+ЛКМ
Аноним 24/08/21 Втр 08:49:32 #484 №765804 
А в годоте есть 2.5д тайлы? Типо как обычные, но которые могут разделяться на слои и перекрывать друг-друга. Если есть, то поставлю годот, gameMaker залупа гойская.
Аноним 24/08/21 Втр 08:56:52 #485 №765805 
Вопрос - я тайлмапу могу натянуть на PlaneMesh, чтобы использовать в качестве террейна?
Аноним 24/08/21 Втр 13:03:22 #486 №765816 
>>765804
Есть

>>765805
Есть 3д тайлмапа.
Аноним 24/08/21 Втр 13:09:53 #487 №765817 
>>765816
Я знаю про гридмапу, мне плоское нужно.
Аноним 24/08/21 Втр 13:23:53 #488 №765822 DELETED
>>765804
Есть 2.5 демка, https://godotengine.org/asset-library/asset/583
Также есть видос как работают искоробочные изометрические тайлы
https://www.youtube.com/watch?v=SteMRdOYrds
Сразу скажу что от встроенного редактора тайлов в годоте жопа горит у многих, так что возможно ты захочешь что-то типа Tiled + импортер https://godotengine.org/asset-library/asset/158
Аноним 24/08/21 Втр 13:33:01 #489 №765824 DELETED
>>765805
Если визуал то можно через вьюпорт сделать
Но ты же наверное коллизии потом захочешь, но для этого можно невидимый гридмап использовать наверное.
Вообще в таких случаях за пару часов можно написать конвертор, который берет графон и коллижны с тайлмапа и генерит по ним гридмапу
Аноним 24/08/21 Втр 13:47:41 #490 №765827 
>>765824
> Вообще в таких случаях за пару часов можно написать конвертор, который берет графон и коллижны с тайлмапа и генерит по ним гридмапу
А есть готовые расширения?
Аноним 24/08/21 Втр 14:01:15 #491 №765832 DELETED
>>765827
Вряд ли.
Ну там правда все несложно - просто пройтись по одному массиву и скопировать в другой массив.
https://www.youtube.com/watch?v=yWfttGYyeSU
С коллижнами чуть посложнее, но там надо просто сделать новый 3д объект, например через CSGPolygon которому задать нужную высоту (через depth) и точки скопировать с 2д полигона тайла. Буду посвободней, могу скинуть код.
Аноним 24/08/21 Втр 14:02:49 #492 №765833 
>>765832
Не надо, я гипотетически спрашивал. В принципе, наверное, даже коллижнов не надо, раз все плоское будет, я их могу отдельно поверху нарисовать.
Аноним 24/08/21 Втр 14:02:51 #493 №765834 
>>765822
> от встроенного редактора тайлов в годоте жопа горит у многих
Горела во времена 3.0. Нынче он стал поюзабельней. И главное - сторонние редакторы, увы, не обеспечат никогда полной поддержки фич.
Аноним 24/08/21 Втр 14:10:56 #494 №765838 DELETED
>>765834
Конечно, поддержку фич можно обеспечить скриптом импорта-экспорта.
Аноним 24/08/21 Втр 15:12:18 #495 №765852 
>>765838
Ну ка покажи мне, как в стороннем редакторе создаются настроенные и функциональные автотайлы. С коллизиями и окклюзиями где надо.
Аноним 24/08/21 Втр 15:32:38 #496 №765855 DELETED
>>765852
Я как-то показывал LDtk от автора Dead Cells. Но в нем нет изометрии.
Автотайлы там крышесносные. Посмотри тут с 15 минуты.
https://youtu.be/ck8ohhC0XdM?t=902
Да и в Tiled вроде автотайлы были.
Коллизии мне не понравилось рисовать в годоте полигонами. Мне нужен более точный контроль, так что я генерил их из скрипта сам все равно. Я 2д играми не занимаюсь, но если бы делал, то все равно рисовал бы отдельный слой в ldtk под коллизии. Мне все равно не хватает когда коллайдеры привязаны к визуалу. Бывает нужен визуал без коллайдеров (например когда анимация постройки здания), бывает коллайдер без визуала (когда что-то стало прозрачным или потолки скрыты)
Аноним 26/08/21 Чтв 04:40:54 #497 №766067 
Есть примеры на годоте хорошие имитаций древних софтварных псевдо и ранних 3д рендеров, без фильтрации текстур, с пиксельными тенями и прочим?
Аноним OP 26/08/21 Чтв 14:53:53 #498 №766116 
>>766067
Не знаю. Не интересуюсь древностью, не испытываю ностальгии. С удовольствием играю в ремастеры денди-игор, без уёбищных пикселов. Ненавижу уёбищное лоуполи плойка-стайл. Извини, не могу тебе помочь.

Тем временем близится время, то самое время, время перекатывать штрендовс. Давайте припомним, кто что хотел в шапочку вшить?
Аноним 26/08/21 Чтв 15:00:15 #499 №766118 
>>766116
Нахуй ты отвечаешь тогда, говна кусок? Всем глубоко насрать, что ты там не испытываешь и во что ты там с удовольствием не интересуешься, человек конкретный вопрос задал, если тебе нечего по теме ответить - молчи в тряпочку.
ПЕРЕКАТ Аноним OP 26/08/21 Чтв 15:09:35 #500 №766123 
1629979773886.png
>>766118
> Нахуй ты отвечаешь тогда, говна кусок?
Чтоб добить до бамплимита, очевидно же!

ПЕРЕКАТ
>>766120 (OP)
>>766120 (OP)
>>766120 (OP)
Аноним 26/08/21 Чтв 15:10:17 #501 №766124 
>>766118
Он тебе ответил, чтобы ты не чувствовал себя одиноко.
Аноним OP 26/08/21 Чтв 15:31:23 #502 №766142 
>>766124
Тоже, кстати, да. А он ругаться сразу. Злые анончики.
comments powered by Disqus

Отзывы и предложения