Главная Юзердоски Каталог Трекер NSFW Настройки

Gamedev

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 541 231 58
Godot #72 Аноним # OP 06/12/25 Суб 10:57:10 1063666 1
345Кб, 1280x1280
1280x1280
1765007824047.png 41Кб, 762x394
762x394
1765007824049.mp4 800Кб, 640x360, 00:00:14
640x360
1765007824049.mp4 14763Кб, 1440x1080, 00:00:32
1440x1080
Аноним 06/12/25 Суб 11:02:05 1063668 2
>>1063666 (OP)
Хочу сделать как на 4 вебм! Это сложно/долго? Есть опыт с юньки.
Аноним 06/12/25 Суб 11:03:09 1063669 3
>>1063668
На опыте за пару рабочих дней сделаешь.
Аноним 06/12/25 Суб 11:04:43 1063671 4
вы уже тред перекатили а я ещё не распаковал архив >>1063339 →
Аноним 06/12/25 Суб 11:08:45 1063672 5
1765008525918.png 1025Кб, 1800x1200
1800x1200
>>1063671
Депрессивная апатия небось, м?
Аноним 06/12/25 Суб 11:10:50 1063674 6
image.png 1219Кб, 1280x720
1280x720
Аноним 06/12/25 Суб 12:01:19 1063683 7
>>1063674
По этому случаю, тем кто не знает сообщаю.
На канале Godot Engine проводятся стримы Godot Tomorrow
https://www.youtube.com/@GodotEngineOfficial/streams
на которых довольно приятный Эмилио лампово рассказывает о нововведениях и отвечает на вопросы из чата, так что посещайте
Аноним 06/12/25 Суб 12:32:16 1063686 8
>>1063683
Хуя, сколько вокруг годота тусовался - ни разу про это не слышал. Посмотрю.
Аноним 06/12/25 Суб 14:07:20 1063708 9
image.png 165Кб, 480x360
480x360
Аноним 06/12/25 Суб 14:11:19 1063711 10
>>1063708
Я начал смотреть, в общем часть про машины (автоматы из SV и некоторые другие темы) в платной версии на сайте, ну в общем вот так.
Аноним 06/12/25 Суб 19:07:44 1063745 11
Аноним 07/12/25 Вск 00:46:25 1063773 12
Screenshot1.png 96Кб, 321x324
321x324
Я думал что смогу упростить разработку нейронками, просто сгенерить модель и довести до ума в блендере. А я по итогу этот блендер уже видеть не могу, как же от него тошно
Аноним 07/12/25 Вск 01:27:17 1063788 13
>>1063773
Пытаться лбом пробить стену тупая затея. Обмануть работу мозга не получится. За любой работой стоит беграунд опыта.
Хочешь меньше тратить усилий на моделинг? Набей руку в этом.
Аноним 07/12/25 Вск 02:01:55 1063805 14
бабы не люди.JPG 132Кб, 1275x635
1275x635
>>1063773
юзай готовые, как любой уважающий себя говнодел порно-новеллок со стима!
Аноним 07/12/25 Вск 10:07:35 1063826 15
>>1063805
Хочу модельку курьера с желтой коробкой верхом на электровелосипеде, где такую найти?
Аноним 07/12/25 Вск 10:35:24 1063828 16
>>1063826
совмести три модельки: человек, самокат и коробка

человека в плаще найти не проблема, коробку и самокат замоделить легко
Аноним 07/12/25 Вск 14:13:08 1063860 17
Screenshot43.png 419Кб, 551x817
551x817
5b423a4a7ec792e[...].jpg 26Кб, 736x619
736x619
>>1063773
Пересилил себя снова открыть редактор. Почти закончил ретопологию, теперь нуно скачать какую-нибудь халявную голову. Как же блять этим заниматься.
Аноним 07/12/25 Вск 14:33:15 1063867 18
>>1063860
Судя по модельке, в которой полигонов больше чем во всей моей игре, которой понадобится скелет, куча сложных анимаций и дохуя какой контроллер - ты уже порвал штаны, братан. Снижай скоп раз в 10.
Аноним 07/12/25 Вск 18:02:22 1063879 19
Аноним 07/12/25 Вск 18:45:33 1063882 20
>>1063879
Пробовал. И отдельным софтом и плагином для блендера. Возни получается не меньше, а то и больше, в нейронке я хотя бы просто промт вбиваю и жду подходящий результат без ебли с ползунками для каждой титьки.
Аноним 07/12/25 Вск 19:07:17 1063883 21
>>1063882
А, ну тогда да, лол. Продолжай вайбмоделить. Не буду тебя отвлекать.
Аноним 07/12/25 Вск 20:07:45 1063887 22
>>1063860
Да норм же, че ты ноешь.
Неожиданно разработка игр это работа.
Аноним 07/12/25 Вск 20:12:43 1063889 23
>>1063887
а я (не он) хотел, чтоб вареники сами в рот прыгали
обещали, что с нейронками так и будет, а оно не так
Аноним 07/12/25 Вск 20:26:27 1063891 24
>>1063889
Оно так. С нейронками все равно в 10 раз легче и быстрее. Но это не избовляет от личного дискомфорта от работы с художкой.
Аноним 07/12/25 Вск 20:55:40 1063895 25
>>1063867
какая разница скока полигонов? не на пс1 же игру делает
Аноним 07/12/25 Вск 21:42:07 1063898 26
>>1063895
Чем выше детализация, тем сложнее делать. Он там голову отлепить-прилепить не может, и, скорее всего, с 3д вообще не работал, но сразу йоба-графон хочет на нейросетях.

Надо здраво оценивать уровень своих скиллов и начинать с посильного.
Аноним 07/12/25 Вск 21:56:09 1063899 27
image.png 4Кб, 216x86
216x86
Долго думал что не так
Аноним 07/12/25 Вск 22:12:08 1063903 28
1765134722688.png 2235Кб, 1439x1075
1439x1075
>>1063899
Ты дальтоник штоле? Белые штаны от красных не отличаешь?
Аноним 08/12/25 Пнд 00:03:51 1063918 29
изображение.png 284Кб, 446x532
446x532
Прошёл курс по годоте от gamedev.tv. Руки чешутся идти и делать идею-проект мечты, но понимаю что охуею от сложности идеи и дропну. Чё делать дальше?

мимо ньюфек
Аноним 08/12/25 Пнд 00:21:49 1063920 30
>>1063918
Сделай микропроект микромечты. И доведи до релиза, с оформлением и всем-всем.
Аноним 08/12/25 Пнд 00:23:06 1063921 31
1765142586605.png 42Кб, 556x436
556x436
>>1063918
> Чё делать дальше?
А вот тебе гайд. Пошаговый:
Аноним 08/12/25 Пнд 01:01:00 1063924 32
>>1063918
Подрочить для ясности ума.
Аноним 08/12/25 Пнд 02:31:22 1063929 33
>>1063918
> Чё делать дальше?
Очевидно не делать, потому что:
>понимаю что охуею от сложности идеи и дропну

>мимо ньюфек
Вообще, я подумал что это бот с авто рассылкой спама, если бы не приписка (если не ответит, значит качественный бот)
Аноним 08/12/25 Пнд 03:10:39 1063933 34
0133-2010.mp4 10719Кб, 1508x1080, 00:00:31
1508x1080
Окей, сделал лоуполи голову. Так же сгенерил референсы через нейронку, затем по этим референсам сгенерировал хайполи модель, вокруг которой уже строил лоуполь. В итоге основа персонажа готова.
Каждый раз как сюда поныть захожу нет-нет, да что-то сделаю. Надо чаще тут ныть.
Аноним 08/12/25 Пнд 07:57:38 1063946 35
>>1063933
> сгенерил референсы через нейронку, затем по этим референсам сгенерировал хайполи модель, вокруг которой уже строил лоуполь
Вот против этого я и возражал всю дорогу, пока ты приходил ныть. В мейкхумане автоматически искаропки подставляется тебе лоуполи моделька, когда тебе надо выгрузить. Затем просто в блендере доделываешь особые приметы. А с появлением блендер-адона (ссылка выше) и вовсе переезжать не надо. Сразу в блендере генеришь модельку.
Нужно просто день посидеть разобраться, вместо того чтобы ебаться с нейронкой, выгадывая бесплатные токены, а то и приплачивая. Признайся, проплатил премиум, а, а?
Аноним 08/12/25 Пнд 11:46:10 1063961 36
m2-res1072p.mp4 2214Кб, 1920x1072, 00:00:13
1920x1072
Делайте игры. Алсо, в следующий перекот.
Аноним 08/12/25 Пнд 12:14:20 1063967 37
>>1063946
Чем быстрее эти вкатунцы нажрутся говна, тем быстрее ИИ пузырь лопнет и перестав окупаться. Эти гандоны уже и так память накрутили в 8-10 раз, даже старые плашки, которые на вряд ли используют, hdd стоит как SSD ппц.

Так что все норм, пусть говно страдает. Мне потребовалось меньше дня с перебором, чтобы понять, насколько это в реале кал (правда в другой области).
Аноним 08/12/25 Пнд 15:13:27 1063996 38
>>1063967
>перестав окупаться
Так там и нет окупания, каждая генИИ компания пока просто сжигает деньги инвесторов. Но нет, как бы оно не лопалось, оно здесь, с нами, навсегда, и надо приспосабливать свой воркфлоу чтобы не отстать. Я например активно перевожу свою игру на годоте с помощью ИИ. Даже откопал старую ММО, в которую когда-то гонял, и зашел спросить у еще живых испанских и португальских гильданов, насколько им перевод - сказали заебись, как нативно.

Указывать тег "ИИ" в стиме я, конечно же, не буду.
Аноним 08/12/25 Пнд 15:41:55 1063997 39
153635915516774[...].jpg 145Кб, 700x838
700x838
0068-0100.mp4 632Кб, 704x832, 00:00:02
704x832
Screenshot45.png 24Кб, 1078x134
1078x134
>>1063946
Какие бесплатные токены, о чем речь? Все генерится из коробки в ComfyUI на видюхе с пк который собрал в сентябре. Вся сборка 80к из которых видюха 20. Да, не 4к генерация, но 1024х1024+ тянет. Короткие видосики в малом разрешении на случай необходимости анимировать спрайт, даже с прозрачным фоном, какая-никакая музыка, надомная или на основе понравившегося тебе автора с CC0 лицензией.

Пробема с MH в том что я опять вынужден работать с художкой, от которой уже тошно. А с нейронками я превращаю прцоесс в конвейер автоматических действий.
Аноним 08/12/25 Пнд 15:56:01 1063998 40
>>1063997
> пк который собрал в сентябре
Эх, а у меня не было денег на пк в сентябре. А щас и подавно нет. И в ближайшие годы не будет. Буду пилить тривряды и тетрисы на годоте, потому что зион-комплект и ПЕЧ 1060
Аноним 08/12/25 Пнд 18:25:46 1064026 41
>>1063997
Проиграл с сегореты, застрявшей в шубе. АИ квалити ебать.
Аноним 08/12/25 Пнд 19:03:42 1064041 42
>>1063997
Эту анимацию быстрее сделать самому, чем попробовать объяснить болванчику чтобы он пофиксил зловещую долину.
Аноним 08/12/25 Пнд 19:14:40 1064045 43
progetto-meme-d[...].png 399Кб, 1000x585
1000x585
Аноним 08/12/25 Пнд 19:52:25 1064049 44
>>1064026
Ну чел же сказал что на тостере делал. К чему придирка?
Аноним 09/12/25 Втр 19:54:35 1064177 45
godoth.png 1990Кб, 1024x1024
1024x1024
Аноним # OP 09/12/25 Втр 20:16:58 1064182 46
Ahti - Yötön Yö.mp4 9159Кб, 640x360, 00:04:05
640x360
>>1064177
Я бы послухал... 🤘😈
Аноним 09/12/25 Втр 22:24:43 1064200 47
NetaYumeLumina3[...].png 599Кб, 800x1024
800x1024
Кто тут топит за MH, заебень мне персонажа как на пикрил. Не один в один модель, а базовую чиби которую нужно будет просто оденть. И я уверую и буду тунелить MH.
Не понтов ради, сейчас серьезный вопрос во что вкладывать больше времени. Нейронки пока выигрывают.
Аноним 10/12/25 Срд 00:14:39 1064211 48
>>1064177
То что мертво, упасть не может.
Аноним 10/12/25 Срд 00:17:00 1064212 49
Кто практиковал svg без конвертации? ИИшка говорит низя и плохо. А по мне так годнота. Он же один раз конвертирует в спрайт при старте?
Аноним 10/12/25 Срд 02:12:25 1064217 50
Screenshot50.png 131Кб, 658x627
658x627
Screenshot51.png 101Кб, 445x564
445x564
0131-6597.mp4 35476Кб, 1696x942, 00:01:47
1696x942
Screenshot52.png 273Кб, 775x691
775x691
Растапырил таки руки в Т-позу, вроде получилось окей. Закинул модельку в миксамочтобы прочекать как пойдет анимация. Думаю, результат приемлемый, смысла задрачивать модель еще больше нету, все равно не художник.
Нашел модельку электро колхозника на скетчфабе, повезло. Модель курьерского рюкзака заделать будет несложно. Почистил лишнюю топологию и у него все равно 20к треугольников. Скорее всего тупо из-за колес, нужно подумать как сделать зубастый протектор менее полигональным.

Теперь надо думать как текстурить персонажа. Гляну решения от нейронки.
Аноним 10/12/25 Срд 02:23:33 1064218 51
>>1064217
Прикольно вышло. Моя первая тня была хуже

>Теперь надо думать как текстурить персонажа. Гляну решения от нейронки.
Ненад. Хуйня выйдет. Покрась сам в сабстенсе. Там никаких специфичных кистей или текстур нихуя не надо. АО, градиенты, генераторы и ручная правка. За 20 минут сделаешь.
Аноним 10/12/25 Срд 08:32:51 1064227 52
>>1064217
Протекторы делай через нормали и всё...
Аноним 10/12/25 Срд 10:44:56 1064235 53
>>1064212
В смысле растеризация свг в пнг на уровне движка? Насколько понимаю оно вообще при импорте делает, один раз.
Аноним 10/12/25 Срд 11:29:32 1064245 54
image.png 188Кб, 1646x979
1646x979
Аноним 10/12/25 Срд 12:43:22 1064253 55
изображение.png 1347Кб, 2559x1439
2559x1439
Где почитать-посмотреть, как делать скайбокс как на пикриле (смена дня и ночи, звезды, движение луны и солнца)?
Аноним 10/12/25 Срд 13:07:42 1064257 56
>>1064218
> Ненад. Хуйня выйдет. Покрась сам в сабстенсе.
Он не воспринимает советов. Нейрослоп уже пожрал его мозги.
Аноним 10/12/25 Срд 13:09:17 1064258 57
>>1064253

> Где почитать-посмотреть, как делать скайбокс как на пикриле
В гугле.
> (смена дня и ночи, звезды, движение луны и солнца)?
godot dynamic skybox with day and night, sun, moon, stars
Аноним 10/12/25 Срд 13:16:51 1064260 58
>>1064257
Вы не шарите. Надо прост чтобы ему нейронка посоветовала. Это как голоса в голове - приоритет выше, чем у посторонних.
Аноним 10/12/25 Срд 13:43:01 1064266 59
>>1064235
А, да? Правда как минус он все скрытые слои достает, надо референсы выпиливать из сохранения (и все варианты). Что не очень практично.
Аноним 11/12/25 Чтв 05:51:12 1064349 60
Есть кто глубоко разбирается в API и кодинге?

В общем, хочу тик менеджер времени. Подобный как у игр параходов или римволд (1,2,3 скорость игры).

Идея в том что один тик - один _physics_process(). Но проблема, что при ускорении времени в 3раза, все решения предлагают прогнать tick три раза в _physics_process (в цикле). Что как бы зло и вроде как просрет всю физику (три вычисления за вызов _physics_process).

У меня вопрос, а что если сделать чтобы ускорение х3 было базовой скоростью в игре (1 tick == _physics_process), а при включение скорости 1х ты просто меняешь Engine.time_scele = 1 / 3 (соответственно тик для логики вызываешь 1 раз из 3)?

Насколько это вообще нормально сделать тик систему основываясь на замедлении Engine.time_scele?
Аноним 11/12/25 Чтв 10:33:58 1064368 61
>>1064349
>Насколько это вообще нормально сделать тик систему основываясь на замедлении Engine.time_scele?
Обычный подход. У меня используется для фриз-фреймов при ударе. Time Scale это не что-то обскурное, в демках и туториалах я его регулярно встречал.

>при ускорении времени в 3раза, все решения предлагают прогнать tick три раза в _physics_process (в цикле)
>(в цикле)
Вот этот твой маневр я не понял. Ты хочешь сам, циклом, повторять physics_process? Чтобы что?
Аноним 11/12/25 Чтв 11:17:18 1064371 62
>>1064368
>Вот этот твой маневр я не понял. Ты хочешь сам, циклом, повторять physics_process? Чтобы что?

Нет, там реализуют так:1 тик на 1 physics_process вызов (чтобы потом делать некоторые вызовы при 250 и 2500 тиках - так в римке), но во время ускорения, например в 3 раза, они дергают tick три раза в одном вызове physics_process. Это советуют как ИИшки все, так и не которые пасты в инете.
Но у меня прям душа не лежала.

В общем, я адаптировал тики совместно с Engine.time_scele и вроде все норм. Получилось даже проще.
Аноним 11/12/25 Чтв 11:46:59 1064374 63
>>1064371
> но во время ускорения, например в 3 раза, они дергают tick три раза в одном вызове physics_process
Не улавливаю зачем. Римворлд на юнити, возможно какие-то её особенности.
Аноним 11/12/25 Чтв 12:20:42 1064375 64
>>1064368
>обскурное
Просто я засомневался, тут реализация в том что большая часть геймплея будет на 1/2 и 1/3 скорости. Но так как это просто множитель дельты, то думаю ничего страшного.

>Не улавливаю зачем. Римворлд на юнити, возможно какие-то её особенности.
Чтобы ускорить игру в 3 три раза, это обычное ускорение времени. Менеджер тиков нужен чтобы распределять нагрузку, чтобы сложные расчеты дергать реже (проблема начинается для одного тика во время ускорения).

В доке пишут, если ты ускоряешь через Engine.time_scele, нужно ускорить и physics_ticks_per_second. Возможно по производительности это выйдет даже хуже, чем просто кастомный цикл в дергать в _physics_process, но мне лень тестить, мне нужно было только замедление (сверх ускорение только для дебага).
Аноним 11/12/25 Чтв 12:24:31 1064376 65
>>1064375
>Просто я засомневался, тут реализация в том что большая часть геймплея будет на 1/2 и 1/3 скорости.
Хотя я забыл про звук. Не зря засомневался.
Аноним 11/12/25 Чтв 12:37:21 1064379 66
image.png 1288Кб, 1280x720
1280x720
Аноним 11/12/25 Чтв 14:15:46 1064416 67
1765451745459.png 724Кб, 1208x1140
1208x1140
1765451745478.png 611Кб, 958x1077
958x1077
1765451745480.png 764Кб, 1118x1130
1118x1130
1765451745484.png 710Кб, 1001x1149
1001x1149
>>1064260
Да уж. Это жиза. Мне голоса в голове советуют кошкодевочек исключительно в мейкхумане моделить.
Аноним 11/12/25 Чтв 15:46:11 1064459 68
image.png 27Кб, 828x324
828x324
Аноним 11/12/25 Чтв 19:08:26 1064505 69
Аноним 11/12/25 Чтв 22:41:59 1064532 70
Аноним 12/12/25 Птн 03:33:42 1064564 71
Как отключить перемещение спектатора к ноде по даблклику в списке нод? Я заебался уже до белого каления.
Аноним 12/12/25 Птн 05:57:40 1064567 72
Input.is_action_pressed
Input.is_action_pressed
Input.is_action_pressed
Input.is_action_pressed
Input.is_action_pressed
Та еще мина замедленного действия.
Зло во плоти.
Аноним 12/12/25 Птн 07:29:42 1064568 73
Аноним 12/12/25 Птн 07:41:57 1064570 74
>>1064459
Ради этого я готов покупать оперативку х10
Аноним 12/12/25 Птн 07:48:50 1064571 75
image.png 11Кб, 217x78
217x78
>>1064568
Лол, еще 5-10 лет и сайты будут только по подпискам.
Аноним 12/12/25 Птн 11:09:23 1064572 76
image.png 90Кб, 813x617
813x617
image.png 997Кб, 926x849
926x849
>>1064570
>>1064564
На помощь спешит самый умный-последний Gemini. Сохраню вам минуту - такой настройки нет.
Аноним 12/12/25 Птн 13:45:57 1064584 77
>>1064532
> Нет ты.
Оперативки по оверпрайсу закупил, хуила?
Аноним 12/12/25 Птн 14:03:05 1064586 78
Screenshot2025-[...].jpg 283Кб, 1220x2335
1220x2335
>>1064572
"Вы просто не умеете их готовить"©
Аноним 12/12/25 Птн 14:24:01 1064588 79
>>1064586
На самом деле способ есть - отредачить сорцы и пересобрать. Я себе так всякие ебучие попапы варнингов в редакторе выключаю.
Аноним 12/12/25 Птн 14:36:47 1064589 80
>>1064588
Завидую тем кто так может, потому что у меня лично моно wasm шаблоны 3.6 нихуя не собираются, хотя вроде следую инструкции.
Аноним 12/12/25 Птн 23:44:49 1064629 81
Почему многие сидят на 3 версии?
Аноним 12/12/25 Птн 23:48:30 1064631 82
>>1064629
"Стабильность"©™. Ну а еще изза нормального шарпика
Аноним 13/12/25 Суб 00:02:06 1064635 83
>>1064629
Шарпиком не пользуюсь, нахуй нужен, просто имею релизнутые игры, которые надо поддерживать, плюс допиливаю еще одну большую, которую начал еще при 3.3 и поленился обновлять до 4.х.

Прекрасен будет день, когда получится взяться за новый проект на 4.х. Хотя кто знает, вдруг и 5.х успеют к тому моменту.

3.7 быть, кстати.
Аноним 13/12/25 Суб 00:21:56 1064638 84
>>1064586
Я сначала завидовал, мол как раньше сложно было искать инфу и как повезло новому поколению. А сейчас я им сочувствую.

Сейчас гугл по стейт машине выдал код (я его не просил, просто думал вдруг в движке уже есть апи). Он написал код на gsdcript через match.

Для тех кто не знает, стейт машина в какой-то степени нужна чтобы не запутаться в портянке if...else для сложных систем/состояний.

То есть, раньше мы выгрызали знания - но это были реальные знания, то сейчас эпоха шизофазии, знания легко доступны, но они нередко замешены с бредом.
Аноним 13/12/25 Суб 04:45:36 1064654 85
>>1064638
Это для художников, которые не могут в программирование. Так же как я генерирую модели и арты, так как не могу в художку.

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

Ебаные лицемерные пидарасы.
Аноним 13/12/25 Суб 06:19:10 1064657 86
>>1064654
>Это для художников, которые не могут в программирование
Что бы не мочь в программирование нужны быть лоботомизированым не меньше, а вот
>так как не могу в художку
Проблема распространенная, вот вас и говнят
Аноним 13/12/25 Суб 06:41:43 1064658 87
Что я понял о годот: сообщество годот - такое же токсичное сообщество недочеловеков которые срут друг на друга.
Чего я не понял о годот: почему его сообщество на серьезных щах себя считает более дужелюбным, когда это такое же сборище выродков как и везде, а то и хуже.
Аноним 13/12/25 Суб 07:44:53 1064661 88
>>1064658
Пошел отсюда!!
Нафиг тебе сообщество годот? Пиши игры, общение находи в другом месте.
13/12/25 Суб 09:42:18 1064668 89
>>1064567
Да, было в прошлом или позапрошлом треде, event.is_action_pressed надо
Аноним 13/12/25 Суб 10:43:52 1064672 90
m2-res720p.mp4 1480Кб, 1280x720, 00:00:06
1280x720
Делайте игры
Аноним 13/12/25 Суб 11:13:09 1064675 91
>>1064672
Я думал оно так чавкает, а это косточки звенят?
Аноним 13/12/25 Суб 13:56:43 1064690 92
Почему с текстурами в 3д всегда настолько геморройно работать. Анвраппинг этот, UV1, UV2, нормал мапы, ORM. Рот ебал. Худшая часть тридешенья просто.
Аноним 13/12/25 Суб 16:16:18 1064713 93
image.png 153Кб, 442x473
442x473
Кто работал с гексами? Насколько сложная и попабольная тема?
Аноним 13/12/25 Суб 16:32:22 1064716 94
>>1064713
Это в первую очередь для игроков с айсикью больше ста. Вот в чем главная проблема..
Изменить координаты UV сетки на одном меше Аноним 13/12/25 Суб 18:37:20 1064729 95
Всем привет. У меня в блендере есть одна и та же модель с одинаковым материалом, но с разным координатами UV сетки. Я как то могу в самом годоте задавать UV координаты для модели чтоб не засорять сцену мешами, а закинуть один и в скрепте изменять ему координаты? Может есть видео с объяснениями или такого нельзя сделать в годот? Я просто новичё и не совсем понимаю. А забив в поисковик гуг, он меня отпраляет в блендр или иной 3д редактор
Аноним 13/12/25 Суб 20:30:24 1064733 96
>>1064729
Привет. Я хз братан.
Аноним 13/12/25 Суб 21:03:51 1064736 97
Аноним 13/12/25 Суб 21:47:57 1064738 98
Аноним 13/12/25 Суб 23:45:26 1064745 99
а ты бы мог кинуть какой ни будь видос или документацию где об этом говориться ?
Аноним 14/12/25 Вск 10:16:24 1064775 100
image.png 62Кб, 232x176
232x176
>>1063666 (OP)
Годот подменяет эти зеленые вставки переменной (кэширует), или каждый раз дергается get_node("timer"), get_node(...)?

Это же накладно очень (в процессах)
Аноним 14/12/25 Вск 10:31:43 1064777 101
>>1064775
В трёшке каждый раз дёргалось, да. В чётверке не проверял.
Аноним 14/12/25 Вск 10:56:23 1064779 102
А что если сделать стены с анимированными текстурами?
Аноним 14/12/25 Вск 10:58:01 1064780 103
Аноним 14/12/25 Вск 11:01:41 1064782 104
image.png 44Кб, 259x194
259x194
>>1064779
Я тебе текстуру нашел.
14/12/25 Вск 11:27:38 1064787 105
>>1064775
По логике - каждый раз, иначе оператор @onready не всрался бы никому
Аноним 14/12/25 Вск 13:04:11 1064796 106
image.png 358Кб, 720x631
720x631
>>1064782
Уже сделал через анимированную текстуру альбедо, но вам не покажу.
Аноним 14/12/25 Вск 13:51:24 1064800 107
image.png 65Кб, 761x633
761x633
В общем gdscript позволил закрыть все задачи, чутка были затыки, есть претензии немножо, но в целом всё хорошо.
Самое бесячее - не совместимость PackedStringArray и Array[String] несмотря на то, что у Array есть конструктор такой
var t: PackedStringArray = ["1","2","3"]
var tt: Array[String] = t
причём это райнтайм проверка. На второй строке будет
> Trying to assign a value of type "PackedStringArray" to a variable of type "Array[String]".
Аноним 14/12/25 Вск 20:20:45 1064891 108
>>1064800
Ты сын Зака Адамса?
Аноним 14/12/25 Вск 21:00:53 1064897 109
>>1064891
Это Advent of Code - ежегодный челендж по решению задач
Аноним 14/12/25 Вск 21:30:31 1064903 110
Аноним 14/12/25 Вск 21:46:08 1064908 111
Вкатываюсь в годотю, возник вопрос - как лучше отделять плеер контроллер от персонажа игрока:
1. PlayerInput как часть сцены Character (т.е., по сути компонент, который управляет персонажем). Вероятно, это нарушает принцип "signal up, call down" и плеер контроллер начинает знать о деталях имплементации родителя, что пахнет говной.
2. PlayerController как родитель над Character, который получает ссылку на Character и, соответствует, двигает персонажа как ему заблагорассудится через вызов публичных методов.
3. Забить и делать всё в одной сцене - и инпут, и всё остальное по персонажу.
Аноним 14/12/25 Вск 21:47:27 1064910 112
>>1064903
Зачем что?
Зачем на gdscript?! - Просто так. Заодно посмотреть позволяет ли он решать такие задачи + напороться на разные грабли, например что Vector2i держит int32 и ничего не говорит о потере данных.
Зачем решать в принципе - чтобы стать лучше и это интересно, многие задачи так или иначе пересекаются с играми.
Аноним 14/12/25 Вск 22:37:04 1064918 113
>>1064908
Отдельная сцена:

CharacterBody2D - главный скрипт
---Node - скрипты с импутами
---Node - скрипты с чем нибудь еще
---Node - скрипты с чем нибудь еще
---Node - скрипты с чем нибудь еще
---CollisionShape2D
---Sprite2D
---Еще ноды, много нод
------Ноды в нодах
---------Ноды в нодах в нодах
Аноним 14/12/25 Вск 22:39:38 1064920 114
>>1064918
А теперь сложное

---Нода где хранятся ноды со скриптами!!!
------Node - скрипты
------Node - скрипты
------Node - еще одна "папка" c нодам, да что же он творит, остановите его!!!
------------Node - скрипты
------------Node - скрипты
Аноним 14/12/25 Вск 22:43:18 1064921 115
image.jpg 3635Кб, 4032x3024
4032x3024
Сделал на годоте подобие ренпай, так как не хотел нбаться с лицензиями. Ебало мое представили когда руками для трех локалей и структурой: основной скрипт + 4 концовки заполнял? Нет? А я вот да

Если достаточно востребовано будет: могу урезать проект без своих шейдеров и чистый билдер в безвозмездное пользование дать. Только вот зачем.
Аноним 14/12/25 Вск 22:46:53 1064922 116
image.jpg 3757Кб, 4032x3024
4032x3024
>>1064921
Основная проблема: ЕБУЧИЕ МАТРЕШКИ
Да, визуально можно сделать и структуру с поинтами на концовки и вторую структуру с конкретными выборами, которые собирают финальный рут. Но изначально я думал что визуально будет проще собирать. А эта вложенность. Я её маму ебал
Аноним 14/12/25 Вск 23:04:28 1064925 117
image.png 16Кб, 404x111
404x111
>>1064910
>Зачем что?
Зачем мериться письками? Ну типа в промышленном программирование надо чтобы кабанчик выбрал самую красивую на конкурсе красоты олимпиаде. А тут ради чего? Мы пишем игры для себя.

> Заодно посмотреть позволяет ли он решать такие задачи
Язык полный по Тьюрингу - может.

>например что Vector2i держит int32 и ничего не говорит о потере данных.
Какие потери? Там между векторами нет преобразования, или зачем тогда я писал "обрезатель" без округления (пик)

>Зачем решать в принципе - чтобы стать лучше
Чел, если навык не поддерживать он рассосется в голове, ты свой код через год откроешь (да какой год, месяц) - там будет как-будто другой человек писал. Это как с мышцами, они атрофируются. В геймдеве не надо продавать себя кабанчикам, просто делай игры.
Аноним 14/12/25 Вск 23:19:10 1064926 118
>>1064910
>>1064925
А то что int в скриптах 64бит, а многое апи работает с 32бит?
Это да, это ппц не только в векторе есть. Чувствуется рука питономакак.
Аноним 14/12/25 Вск 23:21:42 1064929 119
>>1064921
> подобие ренпай
>так как не хотел нбаться с лицензиями
???
Ты маладца что сделал, конечно, но ренпай - свободный и опенсорный софт, как и годот под МИТ лицензией.
Аноним 14/12/25 Вск 23:26:54 1064935 120
>>1064926
Еще один повод читать документацию, а не бегло юзать код, ожидая одинаковое поведение.

Но я согласен, это просчёт и надо помнить.
Как например что randi() возвращает unsigned int, а FastNoiseLite работает только в диапазоне signed int и в доках об этом нет инфы (забавно видеть как рисунки не совпадают но в целом все работает).
Аноним 14/12/25 Вск 23:30:07 1064937 121
>>1064922
Да, говнина. Поэтому нужно было тщательнее выбирать дилоговый аддон прежде чем начинать делать проект.
Аноним 14/12/25 Вск 23:36:54 1064940 122
image.jpg 2818Кб, 4032x3024
4032x3024
>>1064937
Какой аддон? Все руками на чистом гдскрипт

>>1064929
Был соблазн накачать всяких ассетиков и готовых решений, а ебаться с лицензиями не хотелось. Плюс остальные игры тоже на годоте. Решил сделать билдер и заодно некоторые наработки потом переиспользовать
Аноним 14/12/25 Вск 23:52:54 1064944 123
>>1064925
>Зачем мериться письками?
На AoC ты мереешься писькой только с собой, с этого года так точно, т.к. убрали таблицу лидеров, т.к. в прошлом году вот те самые меретели писькой писали автоскрипт скармливания задания АИ говну

>А тут ради чего?
Я сказал уже, чтобы стать лучше, но это не поймёшь пока сам не попробуешь.

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

>Какие потери? Там между векторами нет преобразования, или зачем тогда я писал "обрезатель" без округления (пик)
var a:int = 999999999999
var b: Vector2i = Vector2i(a,a)
print(b)
простыми словами a:int это a:int64 тогда как b это Vector2i(int32, int32)

>ты свой код через год откроешь (да какой год, месяц) - там будет как-будто другой человек писал
спасибо за мнение конечно, но думаю у меня опыта побольше
Аноним 14/12/25 Вск 23:53:45 1064945 124
>>1064940
А, понял тебя. Круто. Я себе похожее делал, но проще. У меня и диалоги попроще - линейные и без выебонов. Зато саунд прикрутил к typewriter effect.
Аноним 15/12/25 Пнд 00:00:35 1064947 125
image.jpg 3572Кб, 4032x3024
4032x3024
>>1064945
Да таймер это самое нежное, что из ебки тут было.
Все начиналось тоже с линейных диалогов. Это сделал за вечер. Новелла как промо к основной игре. Потом мне сказали что линейная новелла на 15 минут хуета. Ну и в итоге появились и концовки, и сторипоинты и тепловизоры и шейдеры огня и ANXIETY LEVEL где сгенерированный голосом звук усиливает писк в ушах во время стресса
Ебал я эту разработку короче. Надо было на Юнити из готовых ассетов хоррор бродилки с записками делать
Аноним 15/12/25 Пнд 00:04:53 1064948 126
>>1064940
> Какой аддон? Все руками на чистом гдскрипт
Ой, сорян, мельком взглянул и показалось похоже на Dialogic.
Аноним 15/12/25 Пнд 00:07:37 1064950 127
>>1064948
Там наверное кроме как через логику инспектора и создание в схожем стиле и не сделать графический сторителлер. Думал попробовать сделать аналоги блюпринтов из анрила только для сборки диалога и эвентов через ноды. На новогодних если будет время - попробую
Аноним 15/12/25 Пнд 00:15:29 1064952 128
1765746928395.jpg 111Кб, 1280x720
1280x720
>>1064950
Логика инспектора - нет.
Аналоги-блюпринтов - нет.
ИМХО, конечно, но если делать, то только на своих виджетах, и форму выводить отдельным табом в редактор, как делают все диалоговые аддоны.

Я предпочитаю типа такого https://github.com/nathanhoad/godot_dialogue_manager чтобы аддон предоставлял не визуальные ноды, а декларативный описательный язык.
Аноним 15/12/25 Пнд 02:13:02 1064969 129
Мужыки, выручайте. Отвалился скрипт

E 0:00:06:559 _printerr: res://scenes/путь/сцена.tscn:7 - Parse Error: [ext_resource] referenced non-existent resource at: res://scripts/скрипт.gd.
<C++ Source> scene/resources/resource_format_text.cpp:40 @ _printerr()

Просто на ровном месте отвалился и нихуя не хочет возвращаться. Я уже и кеш чистил, и скрипт переименовывал и лез в сцену в текстовом формате менял там пути и айдишники. Нихуя не помогает. Так же думал, что ошибка в скрипте, но проверил все 10 раз - все нормально, да и до этого все месяцами работало. Как понять произошедшее? Жиды не хотят чтобы я выпустил игру?
Аноним 15/12/25 Пнд 04:05:06 1064975 130
>>1064944
>спасибо за мнение конечно, но думаю у меня опыта побольше
С этим феноменом сталкиваешься когда начинаешь сопровождать код, то есть работать программистом (или поддерживать многолетнюю разработку, пускай и свою), у меня большие вопросы по твоему опыту.

>чтобы стать лучше
Судя по попыткам самоутвердиться и проблемам юношеского максимализма тебе еще 25 нет. Либо ты старше, но у тебя до сих пор не сформировалась лобная кора головного мозга, отвечающие за критическое мышление.

>убрали таблицу лидеров,
И ты решил нам эту помойку из аськки графики сюда принести? Зачем? Чтобы похвалили или что? Молодец, осилил гдскрипт. Лучший.
Аноним 15/12/25 Пнд 04:09:06 1064976 131
image.png 51Кб, 61x350
61x350
>>1064940
Удачной отладки.
Когда отвалиться "хард"-ссылка, ты об этом узнаешь сразу, когда не будет работать сигнал, ты узнаешь об этом не скоро
Аноним 15/12/25 Пнд 06:22:58 1064981 132
я нихуя не понимаю, кроме if else и var. чему учиться, как вообще полировать механики, ну не все же строится на if и else
и блять почему у меня такая уёбищная гравитация и рывки
extends CharacterBody2D

const SPEED = 175.0
const JUMP_VELOCITY = -400.0
const DASH_SPEED = 400.0
const DASH_ACCEL = 5000.0
const DASH_DECEL = 4000.0
const MAX_DASH_TIME = 0.2

var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
var is_dashing = false
var dash_time = 0.0
var dash_direction = 0

func _physics_process(delta: float) -> void:

if not is_on_floor():
velocity.y += gravity delta


var direction := Input.get_axis("ui_left", "ui_right")


if Input.is_action_just_pressed("ui_reject") and direction != 0 and not is_dashing:
is_dashing = true
dash_time = MAX_DASH_TIME
dash_direction = direction



if is_dashing:
dash_time -= delta


velocity.x = move_toward(velocity.x, dash_direction
DASH_SPEED, DASH_ACCEL delta)


if dash_time <= 0:
is_dashing = false

else:

if direction:
velocity.x = move_toward(velocity.x, direction
SPEED, SPEED 10 delta)
else:
velocity.x = move_toward(velocity.x, 0, SPEED 5 delta)


if is_dashing and not Input.is_action_pressed("ui_left") and not Input.is_action_pressed("ui_right"):
is_dashing = false
velocity.x *= 0.3


if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY

move_and_slide()
Аноним 15/12/25 Пнд 06:37:58 1064982 133
image.png 1Кб, 40x31
40x31
>>1064981
>кроме if else
Ну... match еще есть. Крутая штука

>var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
get_gravity() не пробовал?

Дальшее не читал. Без табуляции сам разбирайся в своей хуйне. Можешь скрины просто прикрепить
Аноним 15/12/25 Пнд 06:53:02 1064983 134
>>1064982
match он че делает?
по поводу get_gravity() спасибо
и что такое табуляция
Аноним 15/12/25 Пнд 06:59:11 1064984 135
>>1064983
>match он че делает?
Матчит, лол. Синтаксис следующий
var test: int = 3
match test:
1: return false
2: nihuya()
3: funkciya()
Думаю интуитивно ясно, что он делает.

>и что такое табуляция
Не пизди, ты не можешь этого не знать. Пробелы перед кодом, своего рода { }
Аноним 15/12/25 Пнд 06:59:22 1064985 136
>>1064975
>И ты решил нам эту помойку из аськки графики сюда принести? Зачем? Чтобы похвалили или что?
Чтобы у тебя жопа сгорела, получается. Я её ещё в шапку треда занёс. Не видел?! Странно. Ты видимо не очень внимательный.

>Судя по попыткам самоутвердиться
Попытки?! Так самоутвердился, 12 из 12. А ты на мне пытаешься самоутвердиться, рассказывая какой ты опытный и знающий и отвечая "от всего треда"?!

>С этим феноменом сталкиваешься когда начинаешь сопровождать код, то есть работать программистом (или поддерживать многолетнюю разработку, пускай и свою), у меня большие вопросы по твоему опыту.
Трудовыми книжками хочешь померяться?
Аноним 15/12/25 Пнд 07:03:09 1064986 137
>>1064984
блять, я настолько тапок, что не понял match
а табуляция, ты имеешь в виду эти стрелки перед текстом кода? как я понял, они разбивают отдельные действия и делают "дочерние". или устанавливают зависимости. или пошел я нахуй
Аноним 15/12/25 Пнд 07:08:54 1064988 138
>>1064986
>или пошел я нахуй
Это. Иди смотри гайды
Аноним 15/12/25 Пнд 08:45:11 1064996 139
>>1064976
Объясни, пожалуйста, куда надо кнопки нажать чтобы СИГНАЛ отвалился
Аноним 15/12/25 Пнд 08:49:32 1064997 140
Аноним 15/12/25 Пнд 10:02:05 1064999 141
Аноним 15/12/25 Пнд 10:24:16 1065002 142
IMG0526.jpeg 3070Кб, 4032x3024
4032x3024
image.jpg 5807Кб, 4032x3024
4032x3024
>>1064999
Маленький эльф который помогает не обосраться
Аноним 15/12/25 Пнд 10:28:16 1065005 143
>>1064969
Хз, не встречал. Удали скрипт полностью через файловый док движка (предварительно скопируй контент), и создай новый, с другим названием. Поможет - был некий баг с кешем/uid или чем-то таким. Не поможет - надо смотреть контент скрипта. В вебдеве, например, говнюки любят пихать тебе в инпут непечатаемые символы и прочие радости, которые сводят с ума начинающих макак.
Аноним 15/12/25 Пнд 11:04:22 1065007 144
>>1065002
Кинь картинку в 8к со своим говнокодом, 4к маловато будет блять
Аноним 15/12/25 Пнд 11:09:51 1065008 145
>>1065007
Отнеситесь с пониманием. Скриншоты не работают; фотографирую на телефон
Аноним 15/12/25 Пнд 11:51:03 1065018 146
>>1064985
>Я её ещё в шапку треда занёс. Не видел?! Странно. Ты видимо не очень внимательный.
Ты настолько жалок, что перекатил тред со свой чепухой? Ну ты же понимаешь насколько это все плохо?

>Трудовыми книжками хочешь померяться?
Чем еще будем компенсировать, ты же не покажешь?
Чел ты попал в ловушку переполнения 32битного инта, зная что под капотом API на плюсах. Первое что ты должен был проверить, это стали ли они переписывать на плюсовые int64_t (нет не стали).
О чем ты, джунище :)

Я не думаю, что людям интересно читать наш срачь, поэтому покормил последний раз (но трудовую жду, оператор эвм).
Аноним 15/12/25 Пнд 11:57:35 1065019 147
>>1064996
Добавить сцену в другую сцену.
@onready var v = $Dependecy
тебя сразу по рукам ударит, по сигналам даже не узнаешь что реализовано что нет
Аноним 15/12/25 Пнд 12:00:18 1065020 148
>>1065018
Очевидный вайбкодер пердикс, делающий неверные предположения буквально по всем вопросам и несущий чушь. Да, говорить с тобой не о чем,
Аноним 15/12/25 Пнд 12:04:54 1065022 149
image.png 548Кб, 735x486
735x486
Аноним 15/12/25 Пнд 12:30:05 1065031 150
image.png 273Кб, 640x634
640x634
Охуели? Ну-ка дружелюбно себя ведите. И игры делайте.
Аноним 15/12/25 Пнд 12:34:52 1065035 151
image.png 609Кб, 1017x1017
1017x1017
О, нашел новую годетту.
Аноним 15/12/25 Пнд 12:39:41 1065036 152
0174-2375.mp4 11133Кб, 900x900, 00:00:36
900x900
depthmap00001.png 694Кб, 2000x2000
2000x2000
ComfyUI00086.png 1149Кб, 1000x1000
1000x1000
>>1064217
>Теперь надо думать как текстурить персонажа. Гляну решения от нейронки.
Вот ето да, что нейронка могет прямо из блендера. Да, косяков навалом, но 80% работы с текстурой автоматизируется, остается только запечь и отпалировать стыки, пальцы, швы, мелкие детали.

Процесс оказался намного тривиальнее чем я думал:
1. Скрипт рендерит карту глубин с нескольких камер в разных ракурсах.
2. С каждой камеры скрип генерирует UV развертку в процекции камеры.
3. Скрипт передает каждую отрендеренную карту глубины в ComfyUI для генерации на ее основи изображения по прому.
4. Скрип строит замысловатый материал, который накладывает каждую сгенерированную картинку на персонажа и суммирует с остальными проекциями получая итоговый результат.


Собсно на пикриле тот же самый процесс только вручную, сначала отрендерил карту глубин модели в разных проекциях с разных камер, затем сгенерировал персонажа по этой карте глубин в ComfyUI, после чего можно накладывать эту картинку в Blender и запекать на модели с последующей шлифовкой. Но аддон StableGen просто автоматизирует рутину и мне остается только этам шлифовки.
Аноним 15/12/25 Пнд 12:49:08 1065038 153
>>1065036
Не уговорите вы меня в свое три_дэ!
Аноним 15/12/25 Пнд 12:59:19 1065042 154
>>1065019
> по сигналам даже не узнаешь что реализовано что нет
Эмм.., что? Сигналы для того и нужны, чтобы им было похуй, реализованы они или нет. Если не реализовано - ничего не произойдёт. Это суть сигналов.
Аноним 15/12/25 Пнд 13:02:47 1065044 155
>>1065008
> Скриншоты не работают
А вот это уже интересно. Почему не работают?
Аноним 15/12/25 Пнд 13:34:19 1065052 156
>>1065042
Одно дело когда они правда опциональны, другое когда завязана логика как на картинке.

Правда если кодом коннектить - связь тоже хардовая, что хорошо (тут я не прав).
Аноним 15/12/25 Пнд 19:02:52 1065153 157
>>1065052
Я предпочитаю шину сигналов. Вместо того чтобы объявлять кучу разномастных сигналов в различных игровых системах и менеджерах, я один раз делаю шину и прописываю её в автозагрузках. Все могут сказать шине:
> пш-пшш, йоба в эфире, я скозал, йоба в эфире 11
> bus.emit(yoba, 11)
А так же все могут сказать шине:
> если кто-то скажет в эфир про йобу, я выполню вот этот метод, и если в сообщении будет число, передай его мне аргументом
> bus.connect(yoba, func(x): print(x))
И всё. Система непотопляема. Даже объяснять лень.
Аноним 15/12/25 Пнд 19:12:28 1065159 158
>>1065153
На самом деле, даже прописывать в автозагрузках не обязательно (ИТТ многие боятся этого), можно сделать класс, скажем, SignalBus у которого будет внутренняя переменная bus, которой присваивается ссылка на корневую ноду ($"/"), далее все операции класс производит с этой шиной. При коннекте сигналов, он лениво создаёт на шине кастомный сигнал, если того не было, и подписывает поданный коллбэк на этот кастом-сигнал. При эмите сигналов он смотрит, есть ли сигнал с указанным кодом, если есть, переизлучает этот сигнал с поданным на вход аргументом. Если сигнала нет, можно насрать в лог, я разрешил, если уровень логгирования в проекте - подробный. Элегантно же, ёпт. Мы спрятали целый синглтон на самом видном месте, цена синглтона - ноль, потому что мы его не создавали. Это корень дерева, и он создаётся самим движком.
Аноним 15/12/25 Пнд 20:17:21 1065173 159
>>1065153
Только не забывай делать единый источник истины для данных. Например глобальный кеш. События должны оповещать об изменении данных в источнике, а не передавать все что вздумается. Если ты начнешь синхонизировать локальные состояния, то это ивент говно быстро перестанет быть отлаживаемым и вообще понимаемым что в нем приосходит.

мимо сенька 10 лет попыта.
Аноним 15/12/25 Пнд 20:25:25 1065174 160
>>1065005
Вопрос решил. Рассказываю.
У меня в коде упоминался мой класс. Условно
if some_node is MyDegenerateClass:
По какой то причине годот передумал конпилировать этот класс раньше скрипта, в котором содержится его упоминание (как я понял эту процедуру) и по этому на уровне инициализации, еще при запуске движка, игнорировал этот файл как скрипт. Решилось мягкой проверкой
if some_node.get_class() == "MyDegenerateClass":
Аноним 15/12/25 Пнд 20:30:33 1065176 161
>>1065036
Замечательное говно получилось. А теперь открывай сабстенс и делай сам.
Аноним 15/12/25 Пнд 22:29:56 1065202 162
>>1065174
Спасибо, тренировочный датасет нейросетей тебя не забудет.
Аноним 15/12/25 Пнд 23:05:13 1065203 163
>>1065153
Потребность в шине, в микросервесной архитектуре является скорее костылем решающие проблемы этой архитектуры. Но в бэкенде там настоящие независимые сервисы. В годоте смысла вообще нет, у тебя игра это и так монолит, у тебя не будет одна игра к другой подключаться, то что у тебя полоска хп игрока в HUD как то независима от игрока, ну ок, а что это дает? Это остается частью элемента персонажа, просто вынесено отдельно для удобства (ты ее не переиспользуешь нигде).
Аноним 16/12/25 Втр 07:54:18 1065221 164
1765860858563.webp 3Кб, 285x230
285x230
>>1065173
Полностью подтверждаю. Это действительно так.

>>1065203
> у тебя полоска хп игрока в HUD как то независима от игрока, ну ок, а что это дает?
Возможность работать над UI в отдельной сцене, настраивать и отлаживать на болванчиках, не трогая основные сущности и системы.
Это удобно даже в соло-разработке.

А так же можно: Полностью заменить весь UI не трогая остальной проект. На лету менять разные отображения UI по мере игры, отражая развитие сюжета. В монолитном проекте, где зелёная нода прибита гвоздём к красной/синей ноде - это будет пиздец.
Аноним 16/12/25 Втр 08:02:44 1065222 165
>>1065174
Ох как же годот-команда ещё обожжётся об uid-дрисню, которую они внедрили. Самый пиздец ещё впереди. Критикуя предлагаю: идентификаторы сериализованных ресурсов хранятся прямо внутри текста файлов. Поэтому и в скриптах нужно было так же сделать. Добавить первой строкой uid-коммент, который вырезается редактором из отображения скрипта, который создаётся, если отсутствует. В настройках добавить галку "отображать uid в скриптах" для любителей всё держать под контролем. Но вот эти добавочные файлы - это... это пиздец.
Аноним 16/12/25 Втр 09:27:00 1065225 166
>>1065222
То что ты предлагаешь - пиздец куда больший, оно будет руинить файлы, не будет давать возможность открывать пнгшки внешними редакторы изза внедряемой годотом хуйни. Нормально работающие юиды - куда меньшее зло чем стандартное "путевое" решение и уж тем более если сравнивать этот вариант с твоим предложением.
Аноним 16/12/25 Втр 11:39:16 1065234 167
>>1065222
И тут прихожу я с внешним редактором, и вижу эту дрысню в начале каждого файла в своем вскоде/зеде. А потом еще охуеваю от моих сломанных жсонов, которые я использую как дататейблы, ведь их теперь парсер не ест, сообщая мне что в их начале сидит неведомая ебаная хуйня. А еще у меня в проекте пара бинарников и файлов на питоне, которые я не дергаю напрямую из годота, а запускаю из консольки для генерации того или этого. Слышь, нафига мой бинарник сломал?

Они ну ооочень долго обсуждение вели, как и бывает у годота, рассматривая разные подходы. Но вообще не думаю что у того анона проблема из-за uid всплыла. Может регрессия какая. По-хорошему надо четко поймать как повторяемый баг и нести на гитхабю
Аноним 16/12/25 Втр 14:17:40 1065256 168
preview-spring-[...].webm 100Кб, 600x400, 00:00:02
600x400
preview-bone-co[...].webm 92Кб, 600x400, 00:00:02
600x400
Аноним 16/12/25 Втр 14:21:13 1065259 169
>>1065221
>Возможность работать над UI в отдельной сцене, настраивать и отлаживать на болванчиках, не трогая основные сущности и системы.
Ты это можешь и так сделать, если у тебя сцена.
Плюс коннект имеет так же хардовую ссылку (что в реале плюс).
Коннект в коде и зеленная ссылка - не имеют архитектурной разницы, это просто разный подход.
Аноним 16/12/25 Втр 14:41:45 1065266 170
>>1065256
>1
Музыку наложить и в тикток.
Аноним 16/12/25 Втр 21:50:35 1065331 171
0001-0841.mp4 1079Кб, 400x400, 00:00:14
400x400
>>1065266
>Музыку наложить и в тикток.
Аноним 16/12/25 Втр 22:17:04 1065333 172
>>1065331
Мне не нравится, переделывай.
Аноним 16/12/25 Втр 23:19:08 1065339 173
1765916346151.mp4 15311Кб, 600x400, 00:03:22
600x400
>>1065333
Это какой-то тролль насрал. Но я заметил, что она как-то знакомо двигается. Вспомнил ритм, вот он.
Аноним 17/12/25 Срд 00:08:32 1065340 174
Дваче, не подскажете, как у label работает autowrap mode? Включаю его - выскакивает предупреждение, мол настрой минимальный размер, ибо в контейнере находится. Настраиваю, нихрена не переносится. Тупо текст улетает за границы экрана.
Этот label находится в margincontainer. Как настроить ебанный перенос слов?
Аноним 17/12/25 Срд 00:13:05 1065341 175
>>1065340
сука какой же я еблан, я случайно не ту сцену выбрал, которая по структуре идентична нужной. Ебанный хуй бля. Дваче, спасибо
Аноним 17/12/25 Срд 00:16:39 1065342 176
>>1065340
Обращайся, дружище. Я как-то минут 10 правил не тот исходник, не понимая почему баг не уходит, хотя вот он, починен.
Аноним 17/12/25 Срд 00:27:01 1065343 177
>>1065342
Да, кстати, есть такой форумный эффект, который на двачах тоже проявляется в полной мере. Когда расписываешь свою проблему, решение приходит само, иногда даже когда запостить не успел.
Аноним 17/12/25 Срд 00:39:37 1065344 178
image.png 1466Кб, 2000x1125
2000x1125
Аноним 17/12/25 Срд 01:34:56 1065349 179
Аноним 17/12/25 Срд 09:24:05 1065364 180
>>1065342
> Я как-то минут 10 правил не тот исходник
Я как то запустил юнити и минуты ждал его прогрузку, а потом вспомнил что проект на годот и юнити я больше не использую.
Аноним 17/12/25 Срд 09:26:21 1065365 181
>>1065339
>Вспомнил ритм, вот он.
Ага, песню "Вишневая дама" группы "Современный базар" включи фоном
Аноним 17/12/25 Срд 10:54:34 1065367 182
>>1065339
Нормально, ОП бери на шапку.
Аноним 18/12/25 Чтв 01:10:58 1065439 183
1751062139071895.mp4 1392Кб, 720x720, 00:00:20
720x720
учитесь в лоуполи чтобы не лагать
Аноним 18/12/25 Чтв 07:44:23 1065452 184
>>1065439
> лоуполи, чтобы не лагать на нищесборочке зиона
Вот нам и будущее, которого мы заслужили.
Аноним 18/12/25 Чтв 11:47:57 1065472 185
>>1065439
Текстуры хороши, с ними и не видно что настолько лоуполи.

>>1065452
Слышь тебе и нам щас еще рам порежут, на 640 килобайт геймдевить придется.
Аноним 18/12/25 Чтв 11:56:59 1065473 186
А ведь в новых хардкорных по железу условиях индюки в выигрыше. ААА графон в одно ебло все равно не сделать, а нищеебов на нищесборках становится все больше и больше - как раз наша аудитория. Там уже Ларианы ноют, что им беднягам, видите ли, приходится ОПТИМИЗИРОВАТЬ под РАМ.
Аноним 18/12/25 Чтв 13:40:21 1065482 187
>>1065472
> геймдевить придется
Будем просить своего ИИ-ассистента, написать готовый код, спроектировать готовые модели, анимировать, текстурировать, написать готовые квесты, сюжет написать, сгенерировать катсцены, и - не придётся гейдевить самим. Вот житуха будет!
Аноним 18/12/25 Чтв 14:33:33 1065495 188
image.png 951Кб, 1024x768
1024x768
>>1065439
Я не силен в 3д, но тут же шейдеры какие-то, которые грани скрывают? Как-будто есть секрет или нет?
Ну и сглаживание, на лопу поли без сглаживания 4х-8х будет же больно? А это убьет весь выигрыш от лоуполи?
Аноним 18/12/25 Чтв 14:39:18 1065496 189
image.png 606Кб, 800x447
800x447
Аноним 18/12/25 Чтв 14:43:47 1065497 190
image.png 315Кб, 1280x720
1280x720
image.png 69Кб, 314x201
314x201
>>1065495
Там smooth shading и современное освещение, плюс относительно HD текстуры. У Ларки тоже smooth shading, но при этом старое вертексное освещение.
Аноним 18/12/25 Чтв 15:02:56 1065499 191
>>1065497
Понятно, спасибо. все равно боюсь в 3д лезть
Аноним 18/12/25 Чтв 15:06:58 1065500 192
>>1065499
Если исключить еблю с текстурами - 3д гораздо приятней чем 2д. А самый ебучий стиль это 2д пиксель арт, пиздос просто, три игры в нем сделал и рот его ебал, идеальная ловушка новичков нахуй.
Аноним 18/12/25 Чтв 16:35:09 1065503 193
Аноним 18/12/25 Чтв 17:11:28 1065507 194
image.png 10Кб, 799x335
799x335
image.png 15Кб, 440x352
440x352
image.png 4Кб, 158x176
158x176
>>1065503
Анимировать ебанись. Копья 1 и головы сверху повернуты алгоритмом, алгоритм неидеален - выглядит всрато. Копья 2 и чувак - фейковый пиксель арт, пиксельные спрайты внутри 2д (не вьюпорт) игры, как следствие пиксели не снапаются по внутренней пиксельной сетке игры и не совпадают с неповернутыми пикселями других спрайтов. Головы снизу это единственный правильный вариант, и они явно были дорисованы/исправлены руками. У них и пиксели по сетке, и артефактов нет.

Кроме самого арта еще с разрешением окна ебаться чтобы недайбох сабпиксели не вылезли, с движением камеры, с y-sort'ом, со слоями, с тенями. Если спрайт сложный, широкий-высокий-диагональный, то его скорее всего придется нарезать на куски, чтобы разные его элементы правильно сортировались, когда игрок вокруг них бегает. Тогда как в 3д это все практически нахаляву.
Аноним 18/12/25 Чтв 18:36:46 1065509 195
>>1065507
Ещё вспомнил. Пиксель арт нельзя скалировать, только перерисовывать. Проебался с масштабом? Перерисовывай. Хочешь монстру сделать младшего братана? Перерисовывай. В обычном 2д и в 3д скалируй как хочешь, и обычное дело когда в ААА десяток разных камней это, на самом деле, один и тот же камень, повернутый и отскалированный по разному.

Короче, пиксели это стиль-наебка, заманивает нюфагов и ебет их кучей подводных. Лучше уж обычный 2д.
Аноним 18/12/25 Чтв 19:38:44 1065513 196
>>1065509
В лоуполи 3д тоже не шкалируют. Деревце поменьше должно сотстоять из меньшего числа полигонов чем деревце побольше.
Ты конечно можешь монстров уменьшать чисто масштабом, но это выглядит как халтура
Аноним 18/12/25 Чтв 19:42:20 1065514 197
Но пиксельарт действительно только для крутанов. Нельзя просто сделать говно, назвать это стилем и все сожрут...
Аноним 18/12/25 Чтв 20:01:43 1065516 198
>>1065513
Не так критично как пиксели, меньше бросается в глаза. Но да.
Аноним 18/12/25 Чтв 21:07:43 1065521 199
>>1065513
если деревце поменьше ключевой объект, то нет
Аноним 18/12/25 Чтв 21:12:33 1065522 200
5.gif 6452Кб, 616x346
616x346
>>1065514
В представлении быдла широких масс пиксель-арт это самая примитивная графика, которую любой школьник намалюет в пейнте. Вон недавно марвеловский пиксельный битемап выходил с охуенными анимациями с кучей кадров, а в комментах на дтф многие комменты были уровня:
>ну и халтура ебаная, графон за миска рис
Аноним 18/12/25 Чтв 21:47:02 1065523 201
>>1065522
В представлении быдла и игры делать легко, залетаешь такой с гениальной идеей, и хопа, соулслайк экшон эрпоге готов. Хуево когда такие мнения раскидывают популярные ютуберы, сами ни одну игру не сделавшие. И люди им верят, а потом от тебя, индюка ебаного, требуют непомерного.

Я бы кончил радугой, будь у меня стиль с твоего пика.
Аноним 18/12/25 Чтв 22:32:46 1065526 202
>>1065509
>Проебался с масштабом? Перерисовывай. Хочешь монстру сделать младшего братана? Перерисовывай
А если рисовать в векторе?
Аноним 18/12/25 Чтв 22:54:15 1065528 203
>>1065526
Время вектора ещё не пришло. Ностальгия по флеш-играм (которые вовсю эксплуатировали векторную графику) ещё не вызрела. Флешеслав не в счёт, он опережает своё время.
Аноним 18/12/25 Чтв 23:28:52 1065530 204
>>1065528
Я хуёво выразился, имел ввиду пиксельный вектор.
Аноним 19/12/25 Птн 00:19:48 1065533 205
изображение.png 466Кб, 1013x756
1013x756
изображение.png 483Кб, 1680x839
1680x839
изображение.png 282Кб, 736x414
736x414
изображение.png 279Кб, 1366x768
1366x768
>>1065528
в вебдизайне с 2013 года уже 5+ итераций/поколений моды на вектор прошло, в геймдеве отстали немног.
Аноним 19/12/25 Птн 11:34:39 1065548 206
image.png 56Кб, 474x237
474x237
>>1065530
Это не поможет "распилить" 1 большой пиксель на n пикселей нужного размера. Новые пиксели вектор не добавит, ты просто возьмешь первую морковку, сделаешь ей зум, и поставишь на место третьей морковки.
Аноним 19/12/25 Птн 12:23:29 1065553 207
image.png 105Кб, 428x513
428x513
image.png 184Кб, 499x507
499x507
image.png 188Кб, 581x460
581x460
image.png 162Кб, 544x459
544x459
>>1065507
>>1065509
>>1065500
Я пробую себя в векторе/растор, пиксель арт мне тоже не по душе. 3Д слишком долго для соло (для меня). Но главная проблема 3Д - это плохая моделька или текстура сразу въедается в глаза даже если стиль лоу поли, то есть выглядит дешевым (или у меня опыта мало и надо фильтрами обмазать, хз).
Аноним 19/12/25 Птн 13:05:33 1065556 208
image.png 2615Кб, 1600x2000
1600x2000
image.png 1081Кб, 736x981
736x981
image.png 568Кб, 914x795
914x795
image.png 150Кб, 536x531
536x531
>>1065533
Вектор это необязательно страшные минималистичные рекламные клипарты.
Аноним 19/12/25 Птн 13:37:47 1065557 209
>>1065553
На твоей пикче даже не понятно сразу трава это или ядерные боеголовки или охапка карандашей.

Поворачивать спрайты вокруг z координаты не всегда надо. В изометрии не нужно совсем. Там нужны 4 - 8 вариантов одной анимации. Это да. С учетом зеркальной симметрии по Y можно 3 - 5 вариантов делать.
Аноним 19/12/25 Птн 13:39:59 1065558 210
>>1065557
>трава это или ядерные боеголовки или охапка карандашей
Почему не все сразу? Это же прекрасно, один спрайт и сразу столько применений!
Аноним 19/12/25 Птн 13:43:02 1065559 211
>>1065557
>симметрии по Y
по Х конечно
Аноним 19/12/25 Птн 14:23:43 1065560 212
image.png 16Кб, 272x343
272x343
image.png 21Кб, 268x626
268x626
>>1065557
Переиспользование травы, это главная фишка вектора.
У меня главный персонаж из травы сделан. Вот и думай.
Аноним 19/12/25 Птн 15:13:16 1065568 213
>>1065553
>>1065560
>то есть выглядит дешевым
То что у тебя щас это следующий уровень дна\дешевизны, как флешки которые в нулевых распространялись на дисках.
Аноним 19/12/25 Птн 15:21:09 1065569 214
image.png 56Кб, 605x306
605x306
>>1065568
> как флешки которые в нулевых распространялись на дисках.
Так в этом и замысел же
Аноним 19/12/25 Птн 15:43:19 1065571 215
Запись 2025-12-[...].mp4 19939Кб, 1920x1080, 00:00:22
1920x1080
наконец-то появилось время для осиления гэйдева
Аноним 19/12/25 Птн 15:50:10 1065573 216
image.png 165Кб, 419x552
419x552
>>1065568
С юмором у тебя проблемы. На тебе зубастика из восьмидесятых.
Аноним 19/12/25 Птн 17:56:43 1065582 217
image.png 315Кб, 1280x720
1280x720
>>1065571
слыш свети нормально!
Аноним 19/12/25 Птн 18:41:00 1065588 218
>>1065582
Флат тоже норм, зависит от выбранного стиля. Главное чтобы везде одинаково было, а то поналепят разных ассетов, потом кровь из глаз.
Аноним 19/12/25 Птн 20:49:15 1065608 219
image.png 5Кб, 177x22
177x22
Уже не первый раз вижу как в годоте между кадрами удаляют первый элемент массива (для итерации по нему).

1) Это просто неграмотность в программировании?
2) Или у годота есть какая-то оптимизация для этого (смещение/слайсы под капотом) и так можно?
Аноним 19/12/25 Птн 21:30:11 1065610 220
>>1065582
да погоди брат
контроллеры только себе пишу
тестируюсь осилю рогалик или нет
Аноним 19/12/25 Птн 22:42:49 1065614 221
Снимок экрана 2[...].png 1651Кб, 2940x1912
2940x1912
забавно на м2 из коробки запускается
тогда точно будет время сделать игру
Аноним 19/12/25 Птн 23:10:26 1065616 222
>>1065614
> забавно на м2 из коробки запускается
А что, не должно было?
Аноним 19/12/25 Птн 23:22:03 1065618 223
>>1065616
хз я просто только винду как полноценную ОС воспринимаю
Аноним 19/12/25 Птн 23:23:44 1065619 224
image.png 1154Кб, 2000x1125
2000x1125
image.png 920Кб, 1280x720
1280x720
>>1065614
Он и веб-браузере запускается. И сам редактор и экспортированные игры. И на андроиде - современные пиздюки геймдевят прямо на телефонах. И на айосах и айпадах Мигелюшка недавно запилил.

Добро пожаловать.
Аноним 20/12/25 Суб 00:10:03 1065621 225
>>1065618
Кому какое дело как ты воспринимаешь.
Аноним 20/12/25 Суб 06:58:36 1065639 226
>>1065621
Ебасос стяни, быдло.
Аноним 20/12/25 Суб 10:47:51 1065645 227
image.png 827Кб, 1280x720
1280x720
image.png 3Кб, 425x80
425x80
Аноним # OP 20/12/25 Суб 13:33:04 1065647 228
>>1065645
А мне нравится. Я целый год ждал снега, а ты предлагаешь его отключить??
Аноним 20/12/25 Суб 13:46:41 1065648 229
image.png 17Кб, 675x107
675x107
>>1065647
Нагрузка больше чем от фонового ютуба. Нормально делать надо - нормально будет.
Аноним 20/12/25 Суб 14:54:10 1065657 230
1766231649837.png 68Кб, 1166x464
1166x464
>>1065648
Не знаю, мой зиончик по совету анончика с Али вполне справляется. Что ж у тебя за железо такое древнее, что тебе никак без 4,5 тактов не протянуть?
Аноним 20/12/25 Суб 15:15:02 1065660 231
>>1065648
Двачую, вроде не проблема, но дергал кулер на ноуте, пришлось юзерскриптами весь это детсад вырубить.
Аноним 20/12/25 Суб 15:28:17 1065663 232
>>1065647
+1 уровень доступа абулахта
Аноним 20/12/25 Суб 15:39:05 1065664 233
>>1065657
>анончика с Али
Круто, тоже куплю себе анончика с Али, заставлю игры делать
Аноним 20/12/25 Суб 16:28:41 1065671 234
images (10).jpeg 8Кб, 210x240
210x240
ComfyUI00415.png 2281Кб, 2024x1024
2024x1024
Posesheetv03.png 622Кб, 2028x1024
2028x1024
ComfyUI00412.png 2093Кб, 2024x1024
2024x1024
Какая же залупа с этими нейронками. Просто не хочет ставить персонажа в нужную позу по промту, а если добавить openpose то все сразу превращается в какую-то жопу.
Для пайплайна осталось накрутить генерацию референсов в трех проекциях по которым будет генерироваться моделька в другой нейронке.
Аноним 20/12/25 Суб 17:01:57 1065672 235
image.png 2850Кб, 1024x1536
1024x1536
>>1065671
ДАЙ!!!
использую ИИ чтобы нарисовать то, как ИИ крадет оперативную память - это ли не обещанная сингулярность в искусственном интеллекте, запланированная на 2025 год??
Аноним 20/12/25 Суб 17:14:14 1065673 236
image.png 465Кб, 1367x771
1367x771
image.png 430Кб, 1363x764
1363x764
image.png 304Кб, 1363x764
1363x764
Кстати, на итче нашел нейроговно, иллюстрирующее подводные пиксель арта, о которых говорилось выше. Тут и пиксели разного размера, и пиксельные спрайты повернуты не по сетке, и шрифты уехали ибо не пиксельные, и сабпиксели вылезли, и пропорции похерены, и движение не по сетке.

Судя по странице, там все нейроговно - код, арт, описание, "девлоги", вообще все. Ссылку постить не буду, игра не на годоте.

>>1065671
У тебя на "рефах" 6 пальцев.
Аноним 20/12/25 Суб 17:36:10 1065675 237
>>1065673
Ну не про. художник будет тоже плохо рисовать, поэтому какая разница, сам он рисовал или ИИшкой? Ты же таскаешь код ИИ, а это тоже был труд программистов.

Но главное то что? ...делайте игры
Аноним 20/12/25 Суб 17:39:28 1065676 238
>>1065675
Главное что это и выглядит как дрист, и играется как дрист, и опыта дает нихуя. Такой игроподобный продукт не нужен никому, ни аудитории, ни самому разработчику.
Аноним 20/12/25 Суб 17:46:40 1065678 239
>>1065676
>Главное что это и выглядит как дрист, и играется как дрист
Ты сейчас буквально описал всю игровую индустрию. Одни пытаются развести других и за 15 лет только "обёртки" стали краше. Не верю что ты делаешь игры от души, ты просто завидуешь что кто-то сделал наглее чем ты себе позволяешь (и получает, вероятно, профиты).
Дай ссылку, купим тебе назло.
Аноним 20/12/25 Суб 17:57:58 1065679 240
>>1065678
Слопогенератор, не проецируй. А игровой продукт этот мог бы уже гуглом найти, но, видимо, привычка попрошайничать все готовое тебе мозг отбила.
Аноним 20/12/25 Суб 18:06:40 1065681 241
>>1064638
>Он написал код на gsdcript через match.
Всё правильно гугл тебе выдал. Ты что хотел?
>нужна чтобы не запутаться в портянке if...else
Да, именно поэтому тебе нужен match и enum.

>>1064729
>задавать UV координаты для модели
https://docs.godotengine.org/en/stable/classes/class_arraymesh.html
Код приблизительно так будет выглядеть:
>var arrays := your_generic_mesh.surface_get_arrays(0)
>arrays[Mesh.ARRAY_TEX_UV] = custom_uv_array
>var custom_mesh := ArrayMesh.new()
>custom_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
>$MeshInstance3D.mesh = custom_mesh
Можно автоматизировать @tool-скриптами...
Аноним 20/12/25 Суб 18:11:56 1065682 242
>>1065679
Catastasis, игра бесплатная, луддит просто так порвался.
Аноним 20/12/25 Суб 18:15:40 1065683 243
>>1064775
>дергается get_node("timer"), get_node(...)?
Я не проверял, но по идее - да, должен дёргать это.
>Это же накладно очень (в процессах)
Один раз не страшно. В Unity всё точно так же.

>>1064787
>иначе оператор @onready не всрался бы никому
У них совсем разное предназначение вообще-то.

"$Node" - это просто get_node("Node"). Т.е. если нода переместится в дереве, выйдет из дерева или будет переименована, эта строчка упадёт с ошибкой.

Строчка с @onready выполняется до _ready, как если присвоить ссылку переменной в обычном коде, и эта ссылка сохраняется независимо от положения или конкретного имени ноды. Эта ссылка ломается лишь после освобождения конкретной ноды (queue_free()).

Так что смысл и предназначение у них разные.
Аноним 20/12/25 Суб 18:36:08 1065689 244
>>1065681
>Всё правильно гугл тебе выдал. Ты что хотел?
Зачем ты это высрал, если ты даже не знаешь что такое стейт машина?

>>1065683
>Один раз не страшно..
Будет дергаться каждый раз (Каждый кадр и каждую итерацию цикла), это просто сахар для get_node(). Используйте только так:
@onready var label = $Node/Label

Не вводи людей в заблуждение своим ламерством.

GDScript код можно шарить в онлайн редакторах, а не гринтекстом.
Аноним 20/12/25 Суб 18:40:51 1065690 245
>>1065002
>func _process_command_silent(command):
>_ if command is CommandA...
>_elif command is CommandB...
>_elif command is CommandC...
>_elif command is CommandD...
Оцениваю твой код на 10 Яндере из 10 Девов.

Как это ПРАВИЛЬНО делать:
>func _process_command_silent(command: Command):
>_ command.process_silent()
Далее реализуешь "process_silent" в каждом классе:
>@abstract class_name Command
>@abstract func process_silent(): pass
>class_name CommandA extends Command
>func process_silent(): ...
>class_name CommandB extends Command
>func process_silent(): ...
>class_name CommandC extends Command
>func process_silent(): ...
>class_name CommandD extends Command
>func process_silent(): ...
Так код будет более читаемым и надёжным.
Аноним 20/12/25 Суб 18:50:00 1065691 246
>>1065682
Ну то есть твоя догадка про какие-то деньги и зависть ожидаемо оказалась мимо. Купил хоть, ммм? Там задонатить можно, автор 2 бакса просит.
Аноним 20/12/25 Суб 18:50:26 1065692 247
>>1065689
>не знаешь что такое стейт машина?
Конечные автоматы не относятся к ООП, если ты намекаешь на создание сотен мелких классов. И в большинстве случаев тебе не нужны эти отдельные классы на каждое состояние автомата - хватит и единственного enum с одним match в 99% случаев.

Не делай код сложнее, чем необходимо.

>>1065689
>Используйте только так:
>@onready var label = $Node/Label
Это лишнее для glue кода в тестовом скрипте очень грязного прототипа (черновика), который в скором будущем выбросишь и перепишешь начисто, либо откажешься от задуманного (для того он и нужен).

Алсо, лучше всего это оформлять так:
>@onready var _label := $Label as Label
Для проверки и жёсткой привязки к типу.

Я в Godot-тредах почти 6 лет сижу...
Аноним 20/12/25 Суб 18:53:33 1065693 248
>>1065690
Там нет полиморфного поведения, там перечисление команд. Там нужен enum ( можно в связке с Dictonary).
Аноним 20/12/25 Суб 19:01:30 1065694 249
>>1065691
Я бы кинул с пруфами, просто не хочу донатить на заблокированные сайты (я подумал в стиме есть). Забавно что ты порвался на какой-то хобби проект, возможно реально ньюфага.
И в тоже время как обидно, ты художник и твой труд может повторить любой вкатун за 1 минуту?
Аноним 20/12/25 Суб 19:06:23 1065696 250
>>1065222
>идентификаторы сериализованных ресурсов хранятся прямо внутри текста файлов. Поэтому и в скриптах нужно было так же сделать.
Возможно, открою секрет, но:
1. GDScript можно хранить в формате .tres.
2. GDScript можно хранить внутри сцен .tscn.
В обоих случаях UID будет внутри этого файла.
В обоих случаях код сохраняет plain text формат.
Аноним 20/12/25 Суб 19:06:28 1065697 251
>>1065690
Можно ещё через единственный прокси-класс реализовать. Так будет намного меньше мусорных классов в проекте, но читабельность на том же уровне:
>func _process_command_silent(command: Command):
>_ command.process_silent()
Казалось бы то же самое, но кот код Command:
> class_name Command
> var _back: Callable = func(): pass
> func process_silent(): _back.call()
> func _init(process_callback: Callable = _back): _back = process_callback
Таким образом мы по месту клепаем сколько хотим экземпляры-стейты нашего прокси-класса, прямо через конструктор задавая им метод, который они будут выполнять. Никакого наследования, никаких абстракций. Критикуйте.
Аноним 20/12/25 Суб 19:10:27 1065698 252
>>1065696
Что именно ты пытаешься оспорить, по какому вопросу возразить? Я не понимаю.

При сохранении внутри ресурса, формат предусматривает необходимые поля для сохранения UID, поэтому там UID не будет писаться в специальный невидимый комментарий, а писаться будет в специальное поле.
Аноним 20/12/25 Суб 19:10:46 1065699 253
>>1065693
Если я правильно понял его подход - то эти Command - потомки Resource и хранятся как части Resource... Т.е. теоретически они могут "выполняться" как команды:
>for command in commands: command.execute()
Портянка из if-else и даже match ухудшает чтение.
Аноним 20/12/25 Суб 19:15:16 1065700 254
>>1065697
>меньше мусорных классов в проекте
У него так и так должны быть потомки Resource для отображения в инспекторе, как я понял его систему (разрабатывал похожее даже несколько раз уже).

>прямо через конструктор задавая им метод
Смысл в том, чтобы раздробить код на множество относительно независимых файлов, а у тебя будет идентичная портянка в одном файле, только другая.
Аноним 20/12/25 Суб 19:15:24 1065701 255
>>1065692
>Я в Godot-тредах почти 6 лет сижу...
А стоило бы в документациях.

Если с типами, то очевидно лучше (привычнее) так.
@onready var label: Label = $Label

Подчёркивание не нужно если ты соло разработчик (и не пишешь либу). А если в тиме, то просто договоритесь что юзаете только геттеры и сеттеры у классов (никогда не трогаете проперти). Все остальное пахнет овер макакингом из бэкенда.
Аноним 20/12/25 Суб 19:21:23 1065702 256
>>1065699
Я не просто упомянул словарь. Вся портянка в одну строчку
if dic.has(command): dic[command].call()
Аноним 20/12/25 Суб 19:24:57 1065703 257
>>1065701
> Подчёркивание не нужно если ты соло разработчик
У меня как у соло разработчика вся тима прямо в голове, мы посовещались и решили, что пока в гдскрипте нет приватных членов, мы маркируем подчёркиванием всё что должно быть приватно. Таким образом, через несколько лет, если тот кто будет в моей голове на тот момент откроет мой код, он без труда определит, что вот те члены публичные, а эти приватные.
Аноним 20/12/25 Суб 19:30:23 1065704 258
>>1065703
В этом смысле хочется пожелать Хуану, чтобы он сделал как в современыых соевых языках принято: всё члены приватны по умолчанию и для них не требуется особых аннотаций, а для публичных введена аннотация @public

> @public func calculate(): pass
> @onready @public var label = $Label
И чтобы экспортная аннотация была публична по умолчанию, из-за своей публичной природы.
Аноним 20/12/25 Суб 19:34:19 1065706 259
>>1065703
Я тебе как разработчик с 15 летнем стажем говорю, все свойства класса по умолчанию приватны, забудь что бывают публичные поля (и друзьям в голове скажи).
Аноним 20/12/25 Суб 19:36:02 1065707 260
>>1065704
И ещё чтобы все переменные по умолчанию создавались иммутабельными, а если нужно в порядке исключения сделать мутабельную, то аннотация @mutable
> @mutable @public var hitpoints : int = 0
В этом случае экспорты по умолчанию тоже иммутабельны и в инспекторе выглядят серыми ридонли-нередактируемыми. Чтобы их мутировать, тоже добавлять аннотацию:
> @mutable @export var level: int = 1

Хуан, зделой.
Аноним 20/12/25 Суб 19:36:50 1065708 261
>>1065706
> все свойства класса по умолчанию приватны
Но не у нас в гдскрипте. У нас всё публично.
Аноним 20/12/25 Суб 19:37:57 1065709 262
>>1065706
А разработчики Годота постарше тебя будут. Стаж исчисляется двадцатилетиями!
Аноним 20/12/25 Суб 19:41:52 1065710 263
>>1065608
>между кадрами удаляют первый элемент массива
Если массив мелкий, то разница незаметна... Но для удаления начала обычно используется pop_front():
>Note: This method shifts every other element's index back, which may have a noticeable performance cost, especially on larger arrays.

>Или у годота есть какая-то оптимизация для этого (смещение/слайсы под капотом) и так можно?
Я как-то пытался читать исходники на эту тему - там несколько слоёв абстракций с cow data (лол, это так сокращают copy-on-write), и понять суть кода сложно (особенно потому что я не изучал специально C++).

Самое простое - это провести эксперимент. Пишешь несколько вариантов кода и замеряешь время его выполнения. Разница обычно заметна от 1000-10000 элементов массива, так что делай цикл for побольше.

Когда-то уже замеряли всем тредом и кидали логи...

В теории, для навигации по точкам массив лучше развернуть, а потом удалять точки с хвоста. Тогда под капотом лишь сокращается размер массива на месте. Однако, операция разворота тоже дорого стоит...
Аноним 20/12/25 Суб 19:49:16 1065711 264
>>1065710
> Когда-то уже замеряли всем тредом и кидали логи...
Именно так. Я там был. И пришли к выводу, что самое быстрое и эффективное решение - инвертировать массив, после чего фронты превращаются в бэки, удаляешь сколько нужно, затем повторно инвертируешь.
Аноним 20/12/25 Суб 19:50:36 1065712 265
>>1065710
>В теории, для навигации по точкам массив лучше развернуть, а потом удалять точки с хвоста. Тогда под капотом лишь сокращается размер массива на месте. Однако, операция разворота тоже дорого стоит...

Поэтому стоит использовать подход как с чтением файлов.
Завести проперти seek - в которой хранится текущее положение. И вместо удаления seek += 1 (проверив переполнение)
Как плюс, можно шаг назад сделать (например если рисуешь линию пути)
Аноним 20/12/25 Суб 19:51:13 1065713 266
>>1065710
> замеряли всем тредом и кидали логи...
Я был одним из тех, кто кидал результаты измерений.
> Однако, операция разворота тоже дорого стоит...
Да нет же, она стоила дёшево.
Аноним 20/12/25 Суб 19:58:24 1065714 267
>>1065709
>А разработчики Годота постарше тебя будут. Стаж исчисляется двадцатилетиями!
Поэтому завезли геттеры и сеттеры. Потому что опытные разработчики проперти напрямую не трогают (только для отладки, но никогда в качестве API).
А вот для приватных методов надо. Хотя можно придумать свою замануху типа p_my_private(), p_other_private() но не надо :)
Аноним 20/12/25 Суб 20:03:51 1065715 268
>>1065702
>Вся портянка в одну строчку
Но словарь-то ты будешь протянкой объявлять...

>>1065701
>@onready var label: Label = $Label
Поясняю проблемы по пунктам:
1. $ - это get_node(), он даёт только Node.
2. ...: Label = - это мягкий/неявный тайпкаст.
3. @onready label - это не стоит трогать извне.

Если мы делаем так:
>get_node("Label") as Label или $Label as Label
Мы явно требуем класс Label, иначе будет null.
>:=
Это просто сокращение, т.к. тип явно заявлен.
>_label
Скрывает свойство из выпадающего списка.

>Подчёркивание не нужно если ты соло
>просто договоритесь что юзаете только
А можно ещё просто на ассемблере писать...

>>1065714
>Поэтому завезли геттеры и сеттеры
Наоборот, Godot переходит с get/set на свойства.
Раньше почти все API были через тупые get/set...
Аноним 20/12/25 Суб 20:21:57 1065717 269
>>1065714
> Поэтому завезли геттеры и сеттеры.
После того как их джва года просили. Сами то они додумались именно что заманухи p_my_private(), p_other_private() в апи выкинуть, как пишет вот этот даунинг-крюгер ниже
>>1065715
> Наоборот, Godot переходит с get/set на свойства.
> Раньше почти все API были через тупые get/set...
Аноним 20/12/25 Суб 20:29:52 1065718 270
>>1065715
>Но словарь-то ты будешь протянкой объявлять...
Лямбды лучше чем лес пустых Классов.

>>1065715
> Label = - это мягкий/неявный тайпкаст.
Что еще за мягкие касты? Сам придумал? Нам нужен Label, мы его получаем. Пофиг полиморфно или напрямую (или null).

>>1065715
>Скрывает свойство из выпадающего списка.
Какого списка? Автокомплита? Он же нам в коде как раз и нужен.

>>1065715
>Наоборот, Godot переходит с get/set на свойства.
Свойства это тупо сахар над геттерами и сеттерами.

Ты вроде и разбираешься, но иногда такую неграмотную шляпу пишешь.
Аноним 20/12/25 Суб 21:25:05 1065719 271
>>1065683
>Так что смысл и предназначение у них разные.
Да, разные, но все бы писали $node если бы не было смысла, но не пишут
Аноним 21/12/25 Вск 00:45:29 1065730 272
p.png 53Кб, 999x888
999x888
>>1065717
>додумались именно что заманухи в апи выкинуть
Ты любишь писать код в таком стиле?
>var text := label.get_text()
>text += ", hello!"
>label.set_text(text)
Или всё-таки предпочитаешь делать так?
>label.text += ", hello!"
По-моему, ответ очевиден, а ты троллишь нубов...

>>1065718
>Лямбды лучше чем лес пустых Классов.
Если тебя устраивает портянка в одном месте.
>пустых
А если потребуется добавить побольше опций?
>class_name CommandShowPic extends Command
>@export_tool_button("Enlarge") var ebtn := enlarge
>@export_tool_button("Shrink") var sbtn := shrink
>@export var pic: Texture
>@export var dick: bool
>@export var lenght: float
>@export var girth: float
>func enlarge(): ...
>func shrink(): ...
>func process_silently(): ...
>func process_sloppy(): ...
И это должно настраиваться на панели инспектора.

>Что еще за мягкие касты?
Ладно, перепутал, там просто падение с ошибкой.
>Автокомплита?
И это перепутал - сейчас они там отображаются...
Но всё равно, намного удобнее начинать с "_"...
>Он же нам в коде как раз и нужен.
Приватные нужны только в скрипте, где объявлены.

>Свойства это тупо сахар над геттерами и сеттерами.
Но иногда свойству не нужно ни то, ни другое...

Ну вот объект читает своё свойство ИЗРЕДКА.
>var rarely_used_data: ...
Зачем вызывать МЕТОД для его обновления?
А если ВДРУГ понадобится, то потом напишешь:
>var rarely_used_data: ...:
>_ set(v): ...
И всё. Не нужно сеттеры вызывать вручную.

>>1065719
>все бы писали $node если бы не было смысла
Если ты переименуешь ноду, $node сломается.
Удобнее иметь уязвимое место в одной точке...

Я обычно в своём коде делаю так:
1. Накидываю новую ноду, скажем, Timer.
2. Обращаюсь к нему тупо через $Timer.
3. ЕСЛИ она мне окажется очень нужна:
3.1. ЕСЛИ она прибита гвоздями: @onready
3.2. ИНАЧЕ нужно больше гибкости: @export
4. ИНАЧЕ удаляю ноду Timer вместе $Timer.

Обычно я предпочитаю @export:
>@export var timer: Timer
+ Godot сам следит за этой нодой
+ видное поле в инспекторе
+ более читаемый код
+ модульность
+ гибкость
Аноним 21/12/25 Вск 00:58:53 1065733 273
docs.png 10Кб, 820x220
820x220
>>1065730
Кстати, на счёт "$Node as Node" явно написано в документации, что это лучше:
https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#casting
Почему ещё не сделали автоматическое проставление в @onready - не знаю...

Раздражает, что редактор сам вставляет строчки, которые помечает серыми номерами...

ЭЙ, GODOT, ВСТАВЬ МНЕ ССЫЛКУ НА НОДУ ИЗ ДЕРЕВА, МНЕ ЛЕНЬ
@
ОКЕЙ, БОСС, ВОТ @ONREADY VAR NODE: NODE = $NODE
@
НО, БОСС, ЭТО БУДЕТ НЕТИПОБЕЗОПАСНО...
@
И Я НЕ ЗНАЮ КАКИЕ ТАМ СВОЙСТВА...
@
А ПОЧЕМУ БЫ НЕ ЗАЮЗАТЬ "AS"?
@
АААА, ТЕПЕРЬ ВИЖУ!!!


И так каждый раз...
Аноним 21/12/25 Вск 06:09:32 1065743 274
>>1065673
>У тебя на "рефах" 6 пальцев.
Такие детали генерятся отдельно, например, как голова тут >>1063933
Вот поза это проблема.
Аноним 21/12/25 Вск 07:11:36 1065746 275
image.png 25Кб, 716x369
716x369
>>1065730
Когда ты пишешь код ты для автокомплита пишешь текст, а не начинаешь с подчеркивания (чтобы тебе высрали все полсотни имен начинающихся с подчеркивания).

То, что есть разница автокомплита между объявлением типа и приведением типа - это недоработка редактора (или в плохом LSP). Как видишь в нормальном редакторе (пик с vscode) все нормально. да, у меня проблемы я часть кода пишу по привычке в camelCase
Дефолтный редактор очень убогий для серьезной разработки (зачем они вообще его высрали?)

Фатальная ошибка годота, что он за основу взял псевдо-язык вместо сишарпа. Сразу бы пласт проблем по языку, IDE и API пропал бы. Причем что современный шарпы 10 лет как MIT (и очень близки к С++ чем квази-питон).
Аноним 21/12/25 Вск 07:20:16 1065747 276
image.png 58Кб, 599x539
599x539
>>1065746
Кстати, ты опять вводишь в заблуждение. Хватит ламерить.
Аноним 21/12/25 Вск 07:31:17 1065748 277
>>1065730
>Если тебя устраивает портянка в одном месте.
Тебе так и так описывать команды, пусть хотя бы они будут там где им место (в модели (бизнес-логики), а не в контроллере)

>А если потребуется добавить побольше опций?
У тебя лямбда, внутри нее ты можешь делать все что угодно и работать с любыми данными.

>Но всё равно, намного удобнее начинать с "_"...
Так никто не делает кроме ньюфагов. Все начинают с ключевых слов, в норм редакторе можно даже не по порядку начинать

>Но иногда свойству не нужно ни то, ни другое...
Ой все, ппц ты ламерище, я больше не могу.
Аноним 21/12/25 Вск 10:06:51 1065758 278
Ньюфаг узнал слово "ламер" ИТТ.
Аноним 21/12/25 Вск 10:44:11 1065760 279
>>1065758
>Ньюфаг узнал слово "ламер"
Мы рады за тебя. А еще ты сегодня узнал что ноды надо присваивать в поля класса в _ready/@onready и не удалять начальный элемент массива, чтобы избежать лишних аллокаций в "циклодробилках" (и просесть по O(n)).

да, я слишком токсичный, надо успокоиться, ссори
Аноним 21/12/25 Вск 10:46:57 1065762 280
>>1065760
> ты сегодня узнал
Только в твоем ограниченном мирке. Ты молод, у тебя прогрессирует юношеский максимализм и еще не до конца сформировалось лобная доля ответственная за критическое мышление. Твой мир крайне прост и примитивен, ты словно молоток, а весь мир у тебя гвозди. Мир намного сложнее чем тебе кажется.
Аноним 21/12/25 Вск 10:54:36 1065764 281
>>1065762
Как же тебя это задело в соседнем треде. :)
Аноним 21/12/25 Вск 21:33:48 1065822 282
В ветке 4.6 немного поломали кнопку Make Unique:
https://github.com/godotengine/godot/pull/113869
Будьте внимательны: если создаёте ресурс отдельно от сцены или он ещё не сохранился внутри сцены, то кнопка Make Unique будет недоступна для суб-ресурсов. Ресурс по-прежнему можно сделать уникальным, если перетаскивать с зажатым Ctrl, но на кнопку нажать нельзя. Чтобы стало работать и чтобы новая фича (кнопка с цепочкой + счётчиком) стала отображаться, нужно создавать ресурс внутри сцены и сразу делать его локальным... Или ждать, когда вернут старое поведение в мастере. Я потратил много времени из-за этого бага, т.к. создал новый ресурс отдельно от сцены и не сразу загуглил эту проблему. Ну, ничего страшного в общем-то, да и сам виноват, что решил пораньше перекатиться на предрелизную 4.6...

>>1065746
>ошибка годота, что он за основу взял псевдо-язык
>редактор очень убогий для серьезной разработки
Ошибка в тебе - у тебя синдром утёнка. Большинство перекатывающихся с Unity также перекатились с C# на GDScript и довольно урчат в чатах о том, насколько GDScript лучше мерзкого клона Java от Microsoft, и насколько хорош встроенный редактор со встроенной справкой по сравнению с еле-еле пропёрживающимися внешними редакторами на мерзком Electron. Да, есть шероховатые углы, бывают баги, но здесь всё намного более поправимо по сравнению с исправлением ошибок C#/"больших" IDE. Я вообще сомневаюсь, что обычный инди-игродел сможет пропатчить основные библиотеки C# для своей игры, а с GDScript ты можешь что хочешь делать, потому что он целиком внутри Godot живёт.

>а не начинаешь с подчеркивания (чтобы тебе высрали все полсотни имен
Сразу видно ньюфага, создающего God Object на 5000 строк и сваливающего эту проблему на окружающих.

>>1065747
Я не понимаю, что пытаешься показать. На твоём же скриншоте подтверждение моих утверждений выше.

>>1065748
>в модели (бизнес-логики), а не в контроллере
База Godot - это event-driven architecture, а не MVC/MVP. Пытался делить ноды по MVC, но выходит та ещё лапша. Godot больше всего располагает к тому, что каждая нода и каждый ресурс - это вещь в себе, что и данными, и поведением обладает. Если ты относишься к ним как-то иначе, ты сильно себя ограничиваешь, наслаивая несколько слоёв абстрактной лапши, усложняя структуру твоих сцен и т.д.

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

>начинают с ключевых слов
Да, но удобнее начать с "_", когда тебе нужно что-то приватное.

>>Но иногда свойству не нужно ни то, ни другое...
>Ой все, ппц ты ламерище, я больше не могу.
Иногда коробка с апельсинами - это просто коробка с апельсинами, и никакой Чебурашка в ней не прячется, обрабатывая каждый входящий и исходящий апельсин по отдельности на каждое открытие/закрытие крышки. Понимаешь? Существование паттерна в ООП не значит, что его нужно лепить везде, куда его можно прилепить. Ньюфаги часто обнаруживают интересный паттерн и начинают искать способы его применить там, где ему не место, и в результате получают трудночитаемый код, который тяжело изменять...

>>1065758 >>1065760 >>1065762 >>1065764
С кем вы тут разговариваете, лалки? Игры лучше бы делали и показывали в треде.
Аноним 21/12/25 Вск 21:55:09 1065830 283
>>1065822
>Игры лучше бы делали и показывали в треде.
Так тут все делают неебацца ебу, допилят в лучшем случае в следующей жизни. Единственный чувак, что принес показать, сделал те два хоррора симулятора ходьбы с записками, потому что как настоящий гений избежал всех таймсинков.
Аноним 21/12/25 Вск 22:26:24 1065835 284
VID202512212125[...].mp4 23143Кб, 1280x720, 00:02:41
1280x720
>>1065822
>Unity также перекатились с C# на GDScript
Без с# мне годот нахуй не упал, до сих пор сижу на тройке только потому что там нормально пашет с# на всех платформах, даже готов терпеть 7.3 и неотлаживаемые tool скрипты, перевел кучу либ на 7.3, абы только кайфовать на шарпе.
>База Godot - это event-driven architecture
event-driven это тебе не в тапки срать. Гарантия доставки(и правильности обработки), индемпонентность операций, валидация, хранение событий - покажи мне где эти куски event-driven в годоте? А их в нем нет, а если начать их пилить - все плюсы event-driven по пизде пойдут, особенно на гдс с еще прекрасной производительностью.
>Игры лучше бы делали и показывали в треде.
А показывать готовое или пилящееся тоже можно? Есть только пилящееся.
Аноним 21/12/25 Вск 22:38:37 1065839 285
>>1065835
Мультиплеерный андертейл? Неблохо.
>chat
Ходите по тонкому льду, гражданин.
Аноним 21/12/25 Вск 22:49:40 1065840 286
>>1065839
>Ходите по тонкому льду, гражданин.
Так этсамое, до 10к нигде регаться не надо, если я правильно помню ну и я не из РФ
Аноним 21/12/25 Вск 23:33:51 1065841 287
>>1065822
Ламерище, ты опять выходишь на связь?

> Большинство перекатывающихся с Unity также перекатились с C# на GDScript и довольно урчат в чатах о том,
Мы говорим про программистов, а не дизайнеров.
Во первых никаких проблем с IDE нет, а есть несколько мощных редакторов, в том числе бесплатный Rider (ты даже не нюхал их). Твой же псевдоредактор не может в банальный рефакторинг.

Во вторых статическая типизация, а не хинты. Ты не насеришь себе в штаны если int64 засунешь в Vector2i где есть поддержка только диапазона int32 (неопределенное поведение в динамикодресне, ппц). А рандом вообще возвращает uint. Просто бардак в api, потому что хотели скопировать питон.

В третьих автокомплит серит прям в руки, или не работает или вываливает все кишки. Енамы просто смех. В общем, мне лень перечислять, но 99% проблем решилось бы, взяв любой настоящий язык (даже, простите, javascript).

>а с GDScript ты можешь что хочешь делать, потому что он целиком внутри Godot живёт.
Вплоть до полного декомпиляции с сохранением имен переменных?
Захотел игру, скачал со стима, декомпилировал - теперь это твоя игра, не забудь поменять ассеты.
Аноним 21/12/25 Вск 23:36:58 1065842 288
>>1065822
>База Godot - это event-driven architecture, а не MVC/MVP
У тебя всегда есть исполнитель и исполняемый, какие бы ты базворды не написал. Просто для понимая всегда упоминают контроллер/модель (потому что это знают все).

Зачем я снова тебя кормлю?
Аноним 21/12/25 Вск 23:41:49 1065843 289
image.png 34Кб, 653x336
653x336
image.png 34Кб, 653x336
653x336
Чего тут, опять гениальным танцорам яйца мешают? Godot Community Poll 2024 vs 2025
Аноним 22/12/25 Пнд 00:04:34 1065845 290
image.png 19Кб, 515x138
515x138
>>1065822
>Функция по определению не может иметь состояния.
Во первых упоминалась лямбда и лямбда по определению может иметь состояние ламерище.
Во вторых никто не говорил о состояние, лямбда упоминалась как процедура содержащая в себе код (в котором можешь дергать любые объекты).

>Да, но удобнее начать с "_", когда тебе нужно что-то приватное.
Если бы ты реально писал код, ты бы знал что подчеркивание соберет все слова в которых есть подчеркивание (в любой позиции). Во вторых, на практике ты печатаешь сразу слово, даже встроенный редактор годота ищет по неточному совпадению (с любой позиции, пик). Ну и 10-20 полей и методов в классе, уже превращают твою идею в цирк (а это далеко не God Object)

Ты пылишься тем, что у тебя отсутствует опыт работы с автокомплитом даже встроенного редактора.
Все, покормил тебя последний раз, теперь точно.
Аноним 22/12/25 Пнд 00:31:06 1065855 291
>>1065843
Ну вообще да, у них два разных редактора и магическое API которое выражается убого в нормальных языках. Шарп явно язык второго сорта.
Аноним 22/12/25 Пнд 04:49:41 1065868 292
>>1065841
rider не доступен же в рф (другой анон)
Аноним 22/12/25 Пнд 05:41:27 1065869 293
godot.jpg 42Кб, 687x777
687x777
Аноним 22/12/25 Пнд 07:15:57 1065874 294
>>1065822
> База Godot - это event-driven architecture, а не MVC/MVP. Пытался делить ноды по MVC, но выходит та ещё лапша. Godot больше всего располагает к тому, что каждая нода и каждый ресурс - это вещь в себе, что и данными, и поведением обладает. Если ты относишься к ним как-то иначе, ты сильно себя ограничиваешь, наслаивая несколько слоёв абстрактной лапши, усложняя структуру твоих сцен и т.д.
В шапку!
Аноним 22/12/25 Пнд 07:25:05 1065875 295
>>1065868
И мы автоматически знаем КТО в треде троллит, обзывая ламерами толковых ребят, стоит этому кому-то упомянуть парашный райдер.
Аноним 22/12/25 Пнд 07:48:31 1065878 296
>>1065868
Документация годота тоже.
Аноним 22/12/25 Пнд 08:25:22 1065885 297
>>1065874
Самолайк? Лол.

>радость EDA
Ты буквально коннектишь через хардовую ссылку. Нет никакой шины или сервиса, который разделил бы связанность.
нода.сигнал.коннект(лол)

EDA курильщика.
Аноним 22/12/25 Пнд 09:00:46 1065888 298
>>1065869
Игру покажи, терпилка гдсная
Аноним 22/12/25 Пнд 09:06:38 1065889 299
>>1065835
У тебя есть в /gd тред? Бэкенд самописный? Я так понял у тебя 3 годот?
Аноним 22/12/25 Пнд 09:15:39 1065892 300
>>1065889
>У тебя есть в /gd тред?
Нет, думаю создать на первую альфу (надеюсь на новогодние успею)
>Бэкенд самописный?
Да, c# бэк
>Я так понял у тебя 3 годот
Всё так
Аноним 22/12/25 Пнд 09:17:53 1065893 301
>>1065885
>нода.сигнал.коннект(лол)
Ты хотя бы раз Godot открывал?

Ты можешь создать какое-то осмысленное поведение в сцене, вообще не создавая ни одного нового скрипта ни на каком языке (кроме tscn-сцены) - просто связывая сигналы через редактор сцен с методами нод. Полезный пример такой связи:
>BaseButton.toggled(bool) -> CanvasItem.set_visible(bool)
Это создаст в коде tscn такую строчку:
>[connection signal="toggled" from="нода-кнопка" to="нода-цель" method="set_visible"]
Сохраняешь, запускаешь, нажимаешь кнопку - нода-цель исчезает и появляется. Фантастика! При этом ты можешь двигать связанные ноды по дереву в пределах этой сцены, переименовывать их, даже менять класс - Godot сохраняет соединение, пока у ноды-источника есть сигнал, а у ноды-цели есть обработчик с заданным тобой именем. "Сломанные" сигналы не отключаются сами и не пропадают, а выдают ошибку в консоли, так что можно легко заметить, если что-то нечаянно удалил или неправильно поменял.

И так можно делать с любыми нодами. Можно расширить встроенную ноду на GDScript, на C#, на любом из языков для GDExtension, на C++ в модуле кастомного форка движка и т.д. Всё это будет работать идентично встроенным нодам.

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

Кроме того, если сильно хочется отвязаться от конкретных классов объектов в коде, есть методы Object:
>Object.has_signal(StringName)
>Object.connect(StringName)
И т.д. Позволяют использовать duck typing - т.е. работать с любыми классами, у которых есть заданный сигнал.

Если пойти ещё глубже, у того же Object есть методы для создания, обнаружения и удаления сигналов:
>Object.add_user_signal(String, Array)
Которые можно излучать стандартным emit_signal(StringName). То есть при желании можно обвязаться очень густой динамической лапшой, которая создаётся целиком во время выполнения кода, даже из строчек, набранных юзером в поля ввода в интерфейсе игры. Хотя, в этом нет чего-то особенного - ведь GDScript можно прямо в игре писать, т.е. создать, например, игру-головоломку, где нужно написать реальный компьютерный код для решения задачи. Таким образом создали, например, тренировочную программу для обучению программированию на GDScript. И это всё здесь доступно из коробки, а не каким-то отдельным костылём, как в большинстве других движков/инструментов. Но конкретно с сигналами главный прикол в том, что их можно создавать через собственные плагины, например, если ты делаешь удобный визуальный язык программирования для своих дизайнеров или что-то подобное.

Так что это реально основа всего Godot (на равных с нодами, ресурсами и сценами) и пренебрегать ею глупо.

По терминам: я погуглил, "event-driven architecture/programming" используется в довольно широких пределах и имеет массу разнообразных реализаций/интерпретаций, прямо как ООП, но если у ООП есть доминирующая на сегодняшний день интерпретация, задавившая все альтернативы (все эти class и т.п.), то у EDA/EDP такого нет. Так что не вижу проблемы считать Godot и то, как он подталкивает структурировать игры "событийно-ориентированным".
Аноним 22/12/25 Пнд 09:47:10 1065896 302
>>1065843
На оф сайте написано, что гдскрипт такой по скорости в большинстве задач, но, при работе с массивами он не настолько быстрый, что для большинства колеров не критично
Аноним 22/12/25 Пнд 09:50:06 1065897 303
>>1065842
Я тут подумал, и мне кажется, у тебя слишком ригидное мышление:
>У тебя всегда есть исполнитель и исполняемый
Т.е. ты воспринимаешь команду "signal.emit()" как команду получателю сигнала исполнить нечто определённое, я правильно тебя понял? Но факт в том, что получателя может и не существовать. Или получатель может существовать, но он может проигнорировать твой сигнал. Или вообще сделать что-то, чего ты от него не ожидаешь. А всё потому, что ты не запрашиваешь исполнение какой-то работы, а просто уведомляешь о том, что что-то произошло внутри тебя или рядом. Т.е. это в первую очередь оповещение о том, что уже произошло (внутри/в источнике), а не о том, что должно произойти (снаружи/у получателя).

Это очень удобная точка зрения для создания новых компонентов. Когда ты создаёшь компонент, ты описываешь события, что происходят внутри компонента, но не знаешь, как они будут использоваться - и будут ли вообще. Потом, когда ты используешь компонент, ты можешь связать сигналы с каким-то кодом, который как-то реагирует на происходящие события, а можешь и не связывать. Суть в том, что код, построенный вокруг компонента с сигналами, не является обязательным для работы компонента. Когда таких компонентов несколько - ты можешь связать их друг с другом на одном уровне абстракции или добавить несколько ступенек абстракции, но в любом случае эти компоненты не будут ничего знать друг о друге, потому что связи строятся на совершенно другом уровне по сравнению с компонентами. Компоненты чем-то занимаются, оповещают о событиях и реагируют на команды, но они не завязаны друг на друга, хоть и взаимодействуют. Т.е. их отношения не "жёсткие", не прописаны заранее.

Иногда такая гибкость избыточна и только вредит. Но тут как всегда - любое лекарство ядовито, если не знать меры. Нужно самостоятельно оценивать, какие компоненты должны быть независимыми, а каким следует заранее знать друг о друге.
Аноним 22/12/25 Пнд 11:36:07 1065901 304
image.png 58Кб, 853x523
853x523
>>1065893
>Т.е. ты воспринимаешь команду "signal.emit()"
Я воспринимаю всю систему сигналов просто как каллбэк обертку, она сделана наглядно для удобства и чтобы юзеры руками не начинали делать свой каллбэк хел в коде (передергивая между сценами).

Сигналы в годоте хардовые (те что кодом) - они хорошие, используйте на здоровье для простых решений. Но называть каллбэчную обертку - EDA, не стоит.

Пик
Если нет планов ре-использовать код между разными проектами, то сразу же воспринимаем код как монолит и начинаем пилить дедовские сервисы/менджеры которые координируют взаимодействия между нодами (ой, снова контроллеры и модели)
Аноним 22/12/25 Пнд 11:42:59 1065902 305
image.png 61Кб, 871x569
871x569
>>1065901
Так может не так абстрактно
Аноним 22/12/25 Пнд 13:53:12 1065914 306
m2-res1080p.mp4 7302Кб, 1080x1080, 00:00:16
1080x1080
Делайте шейдеры
Аноним 22/12/25 Пнд 14:06:51 1065916 307
>>1065914
И сколько эти облачка жрут вычислительных ресурсов?
Аноним 22/12/25 Пнд 14:14:30 1065918 308
>>1065916
Четыре вычислительных ресурса.
Аноним 22/12/25 Пнд 14:43:26 1065920 309
Аноним 22/12/25 Пнд 15:00:36 1065925 310
>>1065902
Ты шину событий нарисовал. Мимоговоря.
Аноним 22/12/25 Пнд 15:19:55 1065927 311
image.png 11Кб, 413x233
413x233
>>1065925
Шина это pipeline (поток, который получает и доставляет, работает с порядком и прочим), а тут сервис, который отвечает за ХП. Ты можешь потерять хп, ты можешь восполнить, у тебя может быть отравление или от еды постепенное восполнение.

Суть в том, что когда тебе нужно разобраться как работает та или иная сложная система, ты не распутываешь вереницу событий бегая от сигнала к сигналу у всех нод, а просто заходишь в менеджер и смотришь основную бизнес логику (и упрощенное api).
Аноним 22/12/25 Пнд 15:26:41 1065931 312
>>1065927
> ты не распутываешь вереницу событий бегая от сигнала к сигналу у всех нод, а просто заходишь в менеджер и смотришь основную бизнес логику
Ну да, так я и делаю. Если есть шина событий сигналов, я просто говорю ей
> йоба наносит удар по площади, по координатам х,у, диаметр n
Подключённые к шине агенты, которые могут получить, подписаны на этот сигнал. Получают.

Не надо ничего распутывать. Всё предельно просто и понятно. Не понимаю, о какой лапше тут полтреда уже говорят.
Аноним 22/12/25 Пнд 15:46:27 1065935 313
>>1065931
>Подключённые к шине агенты, которые могут получить, подписаны на этот сигнал. Получают.
Веселье начинается, когда цепочка сигналов почему-то то идет то не идёт, то сигнал возникает, то не возникает. Любой отрыв от стека невалидированных данных и их перенос в другое место - это геморрой, при чем если сигнал можно послать несколькими способами из разных мест по разным причинам - геморрой начинает расти в монстра, который не будет давать уснуть. Я уже писал выше, eda, observer, у них у всех одна проблема - они требуют такого же пристального внимания, как сишные сырые указатели. А желательно всё обмазать валидациями, гарантиями, всем чем себе может позволить обмазываться бэкендер но не геймдевелопер. А иначе - этот пулемет у ноги только и готов будет ждать когда кодер на секунду расслабится и допустит ошибку. И пощады(нормального стека в логе) не жди.
Аноним 22/12/25 Пнд 15:53:54 1065937 314
>>1065931
Ну тут тебе и шина не нужна. У тебя есть какие-то гига агенты которые отвечают за все. Люди не впихивают все в одно место (UI, юнита, разрушаемость, пасфаендеры, карту итд).

1) Сигнал урон
2) Объект уничтожен: сигнал для пересчёта кэша пасфаендера
3) Измените кэша пасфаендера: сигнал ВСЕМ у кого сейчас есть расчет пасфаендера - сбросить и пересчитать пути занова.

И БАБАХА!!! (не только на экране) у тебя 10.000 юнитов в текущую секунду делают запрос поиска пути, кругом кровь, сопли, пропуки!!! ГОДОТИЩЕ ПРЕКРАТИ!!! ВСЕ УХОЖУ НА УРИНУ!!

Как об этом узнать? Как оптимизировать? Мог бы сервис по тикам размазать вычисления? Отложить? Мог бы решить по зонам кому делать перерасчет? Конечно мог. Но у вы у тебя лапки шина.
Аноним 22/12/25 Пнд 15:56:25 1065938 315
Аноним 22/12/25 Пнд 18:37:06 1065958 316
MDA.png 50Кб, 720x480
720x480
EDA.png 46Кб, 720x480
720x480
MDA vs EDA.webp 39Кб, 1001x386
1001x386
>>1065835
>Гарантия доставки... хранение событий...
>>1065885
>Нет никакой шины или сервиса
>>1065901
>называть коллбек обертку - EDA не стоит
>пилить дедовские сервисы/менджеры
>>1065927
>поток, который получает и доставляет
Я понял, из-за чего у нас в треде произошло недопонимание: существует т.н. Message-Driven Architecture (MDA), которая отличается от Event-Driven Architecture (EDA) существованием специального "почтового сервиса", который асинхронно передаёт "почтовые конверты" от конкретного отправителя конкретному получателю, гарантируя доставку и обработку, даже получатель или канал связи нестабилен (высокий пинг, плохая/перегруженная сеть и т.п.). Организовывать MDA в пределах одного приложения на одном компьютере имеет смысл исключительно в рамках событий ОС, как в случае с InputEvent в Godot. В то время как система сигналов в Godot - это кристально чистая EDA, а не MDA. Сигналы обрабатываются мгновенно, отвязывая отправителей и получателей, но их обработка не гарантированна, зато их можно наращивать динамически и легко менять по ходу эволюции проекта. В данном случае EDA - единственное разумное решение. MDA больше подходит для веб-сервисов всяких, ну, скажем, отдельные сервисы ММОРПГ (авторизация, новости, чат, торговля, локации, ивенты и т.д. в зависимости от систем конкретной игры) наверняка должны полагаться на MDA из-за того, что они могут работать на отдельных физических серверах и не всегда доступны друг другу.

Ещё раз: EDA - это EDA, а не MDA. MDA сложна и требовательна, EDA лёгкая и гибкая. У EDA есть проблемы, если ты обвязываешься огромным числом событий и обработчиков на одном уровне абстракции (внутри одной сцены), но преимущества EDA перекрывают этот недостаток, да и он не является особенным для неё (это то же самое, как 100500 функций в одном файле, как 9000 строк в одной функции, как множество ответственностей у одного God Object и так далее - все эти проблемы решаются рациональной декомпозицией).

>>1065935
>когда цепочка сигналов почему-то то идет то не идёт
Ты выдумываешь проблемы на ровном месте. Отлаженный компонент так вести себя не будет.
>геморрой начинает расти в монстра
Распили его на органы декомпозицией. Отладь каждый орган по отдельности. Собери обратно.

>>1065937
>Мог бы сервис по тикам размазать
>Но у вы у тебя лапки шина.
А в чём проблема-то, лол. Делаешь так:
>EventBus.broadcast(signal_name: StringName)
Под капотом спрятано что-то вроде:
>func broadcast(signal_name: StringName) -> void:
>_ broadcast_queue.append(signal_name, receivers[signal_name])
>func _physics_process(_delta: float) -> void:
>_ if broadcast_queue... # блаблабла
Впрочем, это будет уже ближе к MDA, чем к чистой EDA.

Но вообще,
>Объект уничтожен: сигнал для пересчёта
>Измените кэша пасфаендера: сигнал ВСЕМ
Ты когда в магазин у дома идёшь и кто-то в 10 километрах от тебя ВНЕЗАПНО сбивает маленький заборчик вокруг газона тоже РЕЗКО начинаешь обновлять карту города в своей голове и строить новый маршрут к магазину, который у тебя уже прямо перед носом? Даже если на твой путь этот заборчик как-то может повлиять, будет намного проще пройти по старому пути и, если ты по какой-то причине не достиг цели, развернуться и попробовать другой путь. Кэш тебе нужен специально для этого - чтобы не парить мозги построением пути из-за каждого пука на карте.
Аноним 22/12/25 Пнд 18:49:39 1065963 317
Аноним 22/12/25 Пнд 19:06:57 1065968 318
>>1065958
> будет намного проще пройти по старому пути
Что значит по старому пути? У тебя данные не валидны уже. Старого пути больше нет. Заборчик/осколок/яма, юнит просто заколбасит об коллайдер. Или проверять каждый шаг на заборчик? Тогда зачем нам поиск пути.
Вот если бы ты игры писал, мы бы обсудили.

Насшет шины.
Как только ты начинаешь бизнес-логику в шину совать, тогда приходит тимлид и дилдаком тебя бьет по голове. Больно, очень, отучаешься быстро.
Аноним 22/12/25 Пнд 19:13:38 1065969 319
>>1065958
>>1065968
Кто не понял, суть примера в том, чтобы показать что ивенты не детерминированы и могу вызвать неявное (и даже каскадное) поведение, или наоборот по фазе луны отрабатывать не всегда (и даже не узнаешь что у тебя вообще есть проблема и где ее искать).
Если у тебя игра по сложно три в ряд, то вообще пофиг, делай как нравится, пока рогом не упрешься в проблему.

Шина нужна, чтобы объединить разные независимые системы. Если у тебя монолит, так радуйся этому (у шины много проблем).
Аноним 22/12/25 Пнд 20:27:26 1065974 320
>>1065958
> Впрочем, это будет уже ближе к MDA, чем к чистой EDA.
> Организовывать MDA в пределах одного приложения на одном компьютере имеет смысл исключительно в рамках событий ОС, как в случае с InputEvent в Godot
Воот. В предыдущих тредах обсуждали, как сделать шину ивентов поверх Input. Вот под капот можно запихнуть кастомный инпут-ивент.
Аноним 22/12/25 Пнд 20:29:25 1065975 321
>>1065968
> приходит тимлид и дилдаком тебя бьет по голове
Мы люди свободные, но гадс, но мастерс.
Аноним 22/12/25 Пнд 22:43:00 1065987 322
>>1065975
>но мастерс.
В этом есть плюсы, он же не всегда нас им бьет.
Расскажи какие ты игры разрабатываешь? я не стебаюсь
Аноним 23/12/25 Втр 04:05:07 1066005 323
2023.03.03.mp4 1693Кб, 1024x600, 00:01:30
1024x600
>>1065968
>У тебя данные не валидны уже.
Как ты можешь сломать Vector2/Vector3?
>Или проверять каждый шаг на заборчик?
А ты предлагаешь NPC вслепую двигать?
>Тогда зачем нам поиск пути.
Чтоб прикинуть маршрут(ы) до цели.

>>1065969
>ивенты не детерминированы
Нет, в Godot с ними всё в порядке.
>Если у тебя монолит
Что в твоём понимании "монолит"?

>>1065987
>какие ты игры разрабатываешь
В треде несколько человек вообще-то.
Аноним 23/12/25 Втр 07:51:49 1066013 324
>>1066005
> В треде несколько человек вообще-то.
Ложь. В треде только я и ты, ОП, и я тебя затралил.
Аноним 23/12/25 Втр 09:26:23 1066015 325
Снимок экрана20[...].png 124Кб, 546x577
546x577
Абу какое нахуй слово из спам-листа?

>>1065969
Кароч пикрил, мне лень искать что там за слово ему не понравилось.
Аноним 23/12/25 Втр 09:47:55 1066017 326
>>1066015
Шина никогда не работает нормально, если она не обеспечена средствами устойчивости. Сама идея о том что на твое событие могут реагировать а могут не реагировать те для кого оно предназначено - ломает детерминизм поведения, а в рамках приложения появляется генератор хаоса, который работает только если хорошо молишься духу машины. Если уж так хочется слабой связности - лучше ecs или любой другой вид компонентов/композитов. В идеале - события не должны вылазить за пределы инпута пользователя и за пределы rpc, не иметь в рамках 1 события больше 1 отправителя и 1 получателя, тогда хаоса никогда не случится. Если общение между системами сводить к посылке через шину из точки а в точку б сообщений отвечающих правилу выше и имеющую гарантию доставки - без вопросов, такая шина приемлема, просто как средство дробления и связывания систем(но компоненты все равно лучше)
Аноним 23/12/25 Втр 12:26:41 1066026 327
image.png 0Кб, 51x32
51x32
>>1066005
>В треде несколько человек вообще-то.
Графомана фантазера легко вычислить, он тут уникален.
Аноним 23/12/25 Втр 12:58:55 1066029 328
>>1066015
Там был пример каскада неконтролируемого кода, чел написал типа урон по площади, я вот и адаптировал пример. Мы не решали там проблемы поиска пути, это просто был пример.

Типа - пишешь себе ивентики, пишешь, в ус не дуешь, а потом бабаха какая-то случается, да еще циклическая и потом разбери как онот там все прыгает.

По поиску пути (раз затронули).
Регионы нужны когда у тебя оч большая динамичная карта (много точек, тайтлов). Астар сходит с ума когда много тайлов (больше 50-80К) со сложной открытой местностью и с весом плиток. В расчет длинного пути может достигать 75% времени, как от полного прохождения по всем тайтлам.

Почему-то многие думаю, если лабиринты, раз человеку сложно, то и астару будет сложно, на самом деле нет, ему будет легче (если специально не мудрить), игровые РПГ уровни для астара наоборот облегчение.

Если у тебя 10к юнитов, ты вообще регионы не трогаешь там решается по другому (да, по массовому поиску, вроде ты это и написал).
Аноним 23/12/25 Втр 13:13:31 1066032 329
>>1066017
>ломает детерминизм поведения
Не используй слов, значения которых не знаешь, чел. Код либо реагирует на эвент, либо не реагирует, и любой из этих вариантов поведения "детерминирован" и контролируется лично тобой, а не магией из космоса. Если же ты имел в виду, что хочешь использовать эвент, чтобы приказать другому коду что-то делать, то это просто использование подхода не по назначению, тут не эвенты нужны, а команды или просто прямой вызов этого кода, и ничто тебе не мешает это совмещать с эвентами.
Аноним 23/12/25 Втр 13:29:48 1066036 330
>>1066032
>Не используй слов, значения которых не знаешь, чел.
Скорее ты не понимаешь характер детерминизма о котором я написал.
>Код либо реагирует на эвент, либо не реагирует, и любой из этих вариантов поведения "детерминирован"
Нет, потому что у тебя связующее звено + множество получателей и отправителей это каскадный генератор хаоса, который детерминирован разве что в модульном тестировании
>Если же ты имел в виду, что хочешь использовать эвент, чтобы приказать другому коду что-то делать, то это просто использование подхода не по назначению, тут не эвенты нужны, а команды или просто прямой вызов этого кода
Ты скозал? Вызов напрямую может быть невозможен по ряду причин, например мне нужно накопиться или подружить мои приказы с активным состоянием другой системы, не вмешиваясь в ее работу, собственно для этого шина нужна при обмене информацией система<->система.
>ничто тебе не мешает это совмещать с эвентами.
Ну я и внедряю эвенты только в вышеописанных случаях, например клиент с сервером у меня общаются через шину (а сервер роллбечит но это уже совсем другая история), все остальное - это задел на геморрой, особенно если все взамодействие бизнеслогики оборачивать в это говнецо
Аноним 23/12/25 Втр 14:25:04 1066043 331
>>1066036
>ты не понимаешь характер детерминизма о котором я написал.
То, о чем ты написал, не имеет ни малейшего отношения к не-детерминизму, это просто нытье про "сложна, многа эвентов, нипанимаю". Хоть там десять миллиардов эвентов, спавнящях друг друга, система все равно при одном и том же инпуте окажется в одинаковом конечном стейте, т.е она детерминирована.
>Вызов напрямую может быть невозможен по ряду причин
Ну так используй команду или другой подобный паттерн. Эвенты это просто механизм для объявления "со мной произошла вот такая хуйня", там не должно быть ни слова про то, кто и что обязан с этой хуйней делать, ты буквально пытаешься использовать молоток для закручивания шурупов и удивляешься, хули он такой плохой.
Аноним 23/12/25 Втр 14:27:11 1066045 332
>>1066043
Он нихуя не поймёт. Я ему уже джва треда пытаюсь то же самое обьяснять. Он себе навыдумывал какойто хуйни про "хардовые сигналы" и лепечет почём зря.
Аноним 23/12/25 Втр 14:49:39 1066048 333
image.png 1Кб, 110x30
110x30
>>1066045
Мы два разных анона. Он видимо тоже нахлебался в бэке. В реале eventbus это костыль над изолированными системами. И когда ты приходишь в геймдев и тут местные дизайнеры и вайб-кодеры говорят - шина это будущее, шина наше все, ты ощущаешь фрустрацию и боль.

Но на самом деле тут даже не понимают что такое eventbus и лепят просто общий менеджер над сигнали, думая что это та самая шина (нет).

Если 20 лет назад на форумах были ники и за ламерство можно было поймать, то тут вообще безумие какое-то. Он отмоется и завтра будет опять сидеть самоутверждаться через гугл/ИИ. Какой смысл?

Вообще, в страшном треде мы сидим, пик.
Аноним 23/12/25 Втр 15:02:40 1066049 334
1766491360387.png 191Кб, 759x926
759x926
>>1066048
Так ото надо игоры делать, а не похваляться своими достижениями (никому не интересными) бесконечно в треде. Стоит на полчаса отвернуться, уже 333 поста насрали ни о чём, шина-хуишина, навигация-нахуяция, чанки-хуянки. Игоры где?
Аноним 23/12/25 Втр 15:27:57 1066052 335
>>1066049
Делаем, делаем, тут и так субшота в спину дышит.
Аноним 23/12/25 Втр 15:55:21 1066056 336
>>1066052
>субшота
А я по субботам не выкладываю. Проанализировал статы своих и чужих постов - в субшоту они дают охват хуже, чем в любой другой день, задевая только индидев баббл. Будто кто-то когда-то подумал "вот бы загнать весь индиспам в один день и под один тег, чтобы удобно их блокнуть всех разом".
Аноним 23/12/25 Втр 16:24:14 1066059 337
Прочитал весь тред и пришёл к выводу, что надо дальше делать свою хоть какую-то, но игру, а не пытаться понять что лучше EDA или MVC
Аноним 23/12/25 Втр 17:03:58 1066064 338
image.png 335Кб, 483x598
483x598
>>1066059
У них форма прокрастинации. Как снова и снова ждать новую версию нового софта, так и тут, бесконечно код вылизывать-переписывать, чтобы по факту ничего не сделать.

За этот тред я больше всего проиграл с маньки, которая трясется что его код декомпилирют и спиздят. Тем временем в стиме 50% игр 2025 года имеют меньше 10 отзывов. И это игры, которые были доведены до стим-релиза, куда свою игру не каждый доведет. Всем настолько похуй, что выкладывай они эти игры на гитхаб со всем исходниками, всем было бы все так же похуй.

Но уж его-то сырой код несуществующей игры вторичной идеи сразу же всем понадобится.
Аноним 23/12/25 Втр 19:35:10 1066086 339
>>1066064
>За этот тред я больше всего проиграл с маньки, которая трясется что его код декомпилирют и спиздят. Тем временем в стиме 50% игр 2025 года имеют меньше 10 отзывов.

У меня был случай оч давно, я был маленьким сайтиком и запили очень интересную фишку. Крупный сайт слямзил эту идею и монетизировал.
Самое смешное, через несколько лет мне писали, что я украл идею у того сайта.

Нечто похожее было с 3D принтерами, люди выкладывали алгоритмы в опенсорс и ушлые (не буду говорить откуда) патентовали их алгоритмы и потом судились (попросту отбирали теху).

Понятно что твой платформер или новвела никому не всралась, но для индюшника есть большой шанс что его уникальный геймплей уведут быстрее чем он отобьет слот. Есть достаточно прошаренные, которые могут увидеть перспективу того или иного геймплея.

Правда зачастую быстрее повторить самому, чем разобраться в говнокоде чужого.
Аноним 23/12/25 Втр 19:39:03 1066089 340
>>1066086
Это кстати отбило желание публиковаться в опенсорс.
Есть шанс что кто-то соберёт твой билд и опубликуется в стим раньше тебя.
Аноним 23/12/25 Втр 19:48:15 1066092 341
>>1066064
Два чаю этому Неуловимому Джо.

>>1066086
>уникальный геймплей
Геймплей, а не код. Смекаешь?
>>1066089
Олсо, опубликованное на гитхабе считается опубликованным, так что если кто-то полезет с этим в стим, то ему можно смело насовать копирайтных хуёв.

>>1066017
>>1066029
>чел написал типа урон по площади
if node.has_method("deal_damage"): node.deal_damage(amount)
Для ЛЮБОГО урона.
Весь спор из-за того, что кто-то тут пытается использовать шину событий не по назначению. Она не для того, чтобы вешать на неё событие, зависящее от события, зависящего от события. Вообще так делать не надо, шина там или прямые вызовы (а шина в такой ситуации даёт лишь ненужную прослойку и раздувает стек). Такие системы в принципе трудно контролировать. Нельзя их назвать не детерминированными, конечно, но баги там искать заебёшься. А они точно будут, если мозгов хватило нагородить такое.
Аноним 23/12/25 Втр 19:50:14 1066093 342
изображение.png 1015Кб, 974x663
974x663
Кто пиздел на нейросети? Блять, это же нахуй страшно.
Аноним 23/12/25 Втр 19:54:52 1066095 343
изображение.png 1011Кб, 1035x652
1035x652
>>1066093
получается каждый сегодня может игру мечты сделать в соло?
Аноним 23/12/25 Втр 20:27:49 1066104 344
>>1066095
Конечно, начинай. Я уже две игры мечты сделал чисто на нейронках. Твое время пришло, анон, давай-давай.
Аноним 23/12/25 Втр 20:42:30 1066108 345
>>1066092
>Геймплей, а не код. Смекаешь?
За геймплеем может лежать сложный математический алгоритм в 100-200 строчек, на исследование которого ушло не один месяц.
Аноним 23/12/25 Втр 23:15:19 1066134 346
>>1066092
>Олсо, опубликованное на гитхабе считается опубликованным, так что если кто-то полезет с этим в стим, то ему можно смело насовать копирайтных хуёв.
Останется только приехать в ту страну и нанять юристов. Потому что без решения суда контора ничем не обязана. Тем более разбираться что этот билд из сорцев гитхаба (а если ассеты изменены, то вообще можно идти лесом).
Аноним 23/12/25 Втр 23:19:44 1066137 347
>>1066128
твге (чмошник), иди нахуй
Аноним 23/12/25 Втр 23:56:27 1066138 348
>>1066015 >>1066017 >>1066029 >>1066036 >>1066048
>...шина то, шина сё, шина пятое, шина десятое...
Да кто это ваша "шина" нахрен? Я знаю только "шину данных" на материнской плате. Суть шины данных в том, чтобы передавать данные множеству устройств через узкое горлышко - всего лишь несколько дорожек на плате благодаря шине способны передавать данные десяткам независимых устройств благодаря специальным кодам, которые как-то помечают отправителя и получателя. Это является узким местом архитектуры фон Неймана и в будущем, возможно, мы будем вынуждены перейти к компьютерам, у которых ячейки памяти являются одновременно ядрами процессора.

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

Но насколько свободный доступ к памяти вреден, потому что человеческий мозг не способен анализировать поведение программы, в которой миллион ячеек памяти меняет значение в произвольном порядке - компьютер выполнить сможет, а человек понять - нет. Поэтому программисты (скорее, учёные-информатики) ещё в середине прошлого века начали выдумывать разные вымышленные конструкции, которые призваны ограничить доступ кода к данным. Самое базовое и часто встречающееся ограничение - это деление кода на процедуры или функции: внутри могут быть выделены участки памяти, которые недоступны для внешнего кода. ООП делит память на кусочки с ограниченной видимостью так, чтобы одна коллекция из функций имела доступ только к своей области памяти. И так далее, тысячи выдумок было.

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

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

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

Об этом уже много раз писали: "call down, signal up" - обращайтесь напрямую к подчинённым компонентам (нодам и ресурсам), но сообщайте об изменениях своим предкам только через создание события (сигнала). Вас не должно волновать, чем там занимается предок, который создал вас и/или управляет вами. Его может вообще не существовать - но вас это не касается. Сообщаете о событиях внутри компонента наружу и всё - никаких "шин" никогда не требуется. Управление компонентами со стороны владельца - это отдельная тема и событий она тоже не касается. Владелец (предок) может нажимать любые кнопки, рычаги, тумблеры и т.д., это его дело. Дело компонента - корректно отреагировать на эти нажатия и сообщить о событиях. Всё.
Аноним 24/12/25 Срд 00:02:37 1066139 349
>>1066138
> Ещё раз: события существуют независимо от какой-либо "шины", это разные концепции и не нужно их спутывать в одну. Событие - это уведомление о том, что что-то произошло.
Уведомление кого, кем, через что? Вот тут-то ты и пойман за хуй, как дешёвка. Для передачи взаимодействий нужна среда. Эфир. И этим эфиром являются всевозможные шины данных.
Аноним 24/12/25 Срд 01:15:34 1066144 350
>>1066137
Сколько своих протыков ты ещё собираешься перебирать?
Я никого не протыкал, так что на меня ты не выйдешь.
Или ты только что проткнулся и придумаешь мне личную кличку за протыкание?
Аноним 24/12/25 Срд 04:52:44 1066146 351
схема.png 228Кб, 1900x1000
1900x1000
>>1066139
У тебя нормальные контраргументы закончились что ли?
>Уведомление кого, кем, через что?
"Родителей" (parent) "детьми" (child) через "сигналы" (signal) Godot. Понял?
>Для передачи взаимодействий нужна среда.
В Godot она реализована и доступна из коробки, ничего не нужно изобретать:
https://docs.godotengine.org/en/stable/getting_started/step_by_step/signals.html
>И этим эфиром являются всевозможные шины данных.
Не неси чепухи, "шина" - это глобальный "autoload" по мнению годотеров.
Они предлагают весь проект завязывать на вот такой выстрел себе в жопу:
>EventBus.something_happened.connect(_on_something_happened)
>EventBus.something_happened.emit(payload)
А внутри этого "EventBus" портянка на миллион строк с "signal"...
И этот антипаттерн собирает кучи лайков на Reddit...
Аноним 24/12/25 Срд 07:25:37 1066149 352
>>1066138
>call down, signal up
Ну так-то у меня серьёзные вопросики к такому подходу. Потому что обычно точно известно, кто у ноды родитель; а вот кто дети - вот это хз. И приходится делать типа
for child in get_children():
_ if child.has_method("my_method"):
_ _ child.my_method()
А ведь можно просто эмитить сигнал, а чайлд пусть сам подписывается.
И наоборот, get_parent().my_method() выглядит чище, тем более что родитель гарантированно всего один, а сигналы предполагают неопределённое число подписчиков. Да и как родитель на сигнал подпишется, если он не знает, кто его дети и какие у них сигналы? И даже если тип родителя заранее не известен, проверить через has_method его одного не так накладно, как проверять топу детей.

Я вот сколько это "call down, signal up" встречаю, всегда такой: ага, ну да, наверное, что-то в этом есть. А на практике сама реальность против такого пайплайна. У меня сигналы используются чаще для общения каких-нибудь совсем уж далёких нод - например, персонажа с гуём.
Аноним 24/12/25 Срд 09:15:05 1066152 353
image.png 508Кб, 768x768
768x768
Ппц шиза, дергать родителей или детей через сигналы.

Одно из преимуществ инди разработки, ты никогда не будешь сопровождать чужой говнокод. Так что вообще нет смысла спорить.

Мы пишем разные игры, у кого-то сложная механика и много кода, у кого-то платформер/FPS/беги стреляй.

Если у первого уже начинаются проблема с организаций сигналов, то второму все еще удобно и он вообще не понимает в чем у вас тут проблема. И как только у второго начнутся проблемы, он навернет управляющую конструкцию сверху и назовет ее, почему-то, Шиной тут должна быть шумная вставка мема Джона Сина.

Лучше бы AStarGrid2D для гексов сделали, чем спорили у кого шина длиннее.
Аноним 24/12/25 Срд 10:41:59 1066164 354
А срачи про синглтоны уже не в моде?
Аноним 24/12/25 Срд 11:30:04 1066168 355
>>1066164
В геймдеве они идеальны, пока не начнешь писать юнит тесты или масштабировать игру по нескольким пк никогда[/poiler]. Одна нода, это по сути синглетон в на сцене.
Аноним 24/12/25 Срд 11:33:21 1066169 356
>>1066168
>Одна нода, это по сути синглетон в на сцене.
Ты даже можешь делать так очуметь!

-UnitManager
---Unit01
---Unit02
---Unit03
Аноним 24/12/25 Срд 13:19:24 1066171 357
Какие есть годные гайды по годоту, по языку и прочему чтобы можно было скачать на всякий случай, а то интернет сами понимаете.
Аноним 24/12/25 Срд 13:24:24 1066172 358
>>1066171
Godot docs, ты можешь прям с гитхаба скачать фулл, лучшего гайда в мире нет без рофла и без сарказма
Аноним 24/12/25 Срд 13:25:55 1066173 359
>>1066171
Есть книги по годоту по 4 версии. Даже как слепить mmo на годоте
Аноним 24/12/25 Срд 13:30:14 1066176 360
>>1066173
Главное авторов с европейскими именами бери. Потому что у индийцев в основном книги-справочники, а не что-то годное. Сколько раз не смотрел книги индийских авторов ни разу не попалась полезная. Может я невезучий просто..
Аноним 24/12/25 Срд 13:42:28 1066177 361
Аноним 24/12/25 Срд 13:59:21 1066178 362
Безымянный.png 16Кб, 444x444
444x444
>>1066149
Это троллинг или ты совсем новичок?

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

>а вот кто дети - вот это хз
Только если ты вставляешь детей в рантайме (во время выполнения игры) к произвольным нодам, которые в принципе не рассчитывают получить в себе в потомки какого-то подкидыша. Когда ты создаёшь конкретную сцену в десигнтайме (в визуальном редакторе Godot), ты видишь все ноды в дереве этой сцены - все их имена и классы, и можешь свободно связывать нужное с главным скриптом сцены (или даже второстепенными скриптами сцены, если они одноразовые - используются только тут). Если тебе нужно добавлять ноды в рантайме, то принимающей стороне следует объявить специальный интерфейс, который будет фильтровать то, что ей не нужно:
>func add_useful_node(node: UsefulNode) -> void:
>_ add_child(node) # в простейшем случае
В противном случае тебе вообще не нужно как-то следить за добавлением потомков.

>И приходится делать типа
>for child in get_children():
Такое случается очень редко, когда требуется работать с коллекцией однотипных нод. В актуальных версиях Godot можно объявить класс ноды в переменной-счётчике такого цикла:
>for child: UsefulNode in get_children():
Тогда игра упадёт с ошибкой, если ты где-то случайно вставил сюда ноду неправильного класса.

>просто эмитить сигнал, а чайлд пусть сам подписывается
На кого из всех теоретически возможных предков он подпишется? Тогда следует делать так:
>if get_parent().has_signal("this"): get_parent.connect("this", _on_this).
Но такой код приведёт к куче проблем, когда ты добавишь эту ноду не туда, куда следовало...
>get_parent().my_method() выглядит чище
Наоборот, такой код грязнее, ведь "get_parent()" не имеет конкретного имени и может быть абсолютно любой нодой из тех, что в твоём проекте объявлены (встроенные + твои личные). Если тебе очень сильно нужен такой подход "задом наперёд", то пиши примерно такой код:
>var useful_parent: ParentNode
>func _enter_tree() -> void:
>_ useful_parent = get_parent() as ParentNode
>_ assert(useful_parent, "%s placed under wrong parent. Place it under ParentNode." % name)
>func _get_configuration_warnings():
>_ if not useful_parent:
>_ _ return ["This node must be a child of a ParentNode or else it won't function properly."]
>_ else:
>_ _ return [] # всё ок, работаем
Тогда ты будешь иметь в коде чёткое имя родителя и предупреждения о своей ошибке.

>на практике сама реальность против такого пайплайна
В какой реальности ты находишься? Где Godot не имеет GUI и используется через CLI?

>>1066152
>никогда не будешь сопровождать чужой говнокод
Ты не планируешь поддерживать свою игру спустя год? А если она будет успешной? Многие успешные инди-игры поддерживаются не то, что год, а десятки лет. И под поддержкой игроки подразумевают добавление новых фич и исправление багов, а не создание новых багов...

>Если у первого уже начинаются проблема с организаций сигналов
>управляющую конструкцию сверху и назовет ее, почему-то, Шиной
А можно изначально нормально делать и никаких проблем не будет.

>>1066164
>А срачи про синглтоны уже не в моде?
Не беспокойся, шина - это синглтон.
Аноним 24/12/25 Срд 14:17:06 1066180 363
>>1066178
Как же ты дефаешь свою сигнальную лапшичную, я хуею просто. Да, да, архитектура на сигналах заебись, только из палаты не выползай больше, ну или вместе с очередной простыней пости свои лапшичные игры
мимокрокодильный годотер противник сигнального говна
Аноним 24/12/25 Срд 14:45:18 1066183 364
1766576717267.png 1485Кб, 1280x1107
1280x1107
>>1066178
> шина - это синглтон
В дереве нод ни одна нода не синглтон. Само дерево - синглтон.
Аноним 24/12/25 Срд 15:55:36 1066190 365
image.png 116Кб, 1547x858
1547x858
>>1066171
Если у тебя есть подписка на торрент-прайм, можешь посмотреть что там люди качают
Аноним 24/12/25 Срд 16:39:01 1066194 366
>>1066144
Твои протыки тут никому не интересны, чернь. Пиздуй в твг-тред и не мешай адекватным людям общаться
Аноним 24/12/25 Срд 18:29:46 1066198 367
хоть кто-то дел[...].webm 31259Кб, 802x446, 00:05:07
802x446
image.png 207Кб, 647x246
647x246
image.png 216Кб, 646x284
646x284
image.png 182Кб, 654x247
654x247
Бля, он реально штоле в одно рыло тянет всю игровую ру годот сцену?
И это ссаный ютубер, делающий дегенеративный контент для детей!
Аноним 24/12/25 Срд 18:30:55 1066199 368
>>1066194
Так это ты начал своих протыков перечислять, а я просто попросил сделать нейронкой модельку.
Аноним 24/12/25 Срд 18:51:10 1066202 369
>>1066198
Это же подсос хованского вроде, чё произошло?
Аноним 24/12/25 Срд 19:00:33 1066204 370
>>1066202
Теперь это звезда игровой ру годот сцены.
Кто из вас сможет записать видео про разработку своей новой игры на Годоте с 3 плакатами своих игр на Годоте из Стима на стене за спиной?
Думаю даже никто из годот гуру с уроками по Годоту на ютубе, не имеет такой возможности.
Аноним 24/12/25 Срд 19:22:20 1066205 371
>>1066204
Ууу, как же мы завидуем! Ашпичот!
Аноним 24/12/25 Срд 19:24:01 1066206 372
Вы бы лучше игры делали, чем хуй знает кем вниманиеблядствовать.
Аноним 24/12/25 Срд 19:37:45 1066207 373
image.png 174Кб, 644x186
644x186
>>1066198
Понятно откуда ноги растут.
Аноним 24/12/25 Срд 19:39:43 1066208 374
>>1066207
Он заработал, а у тебя код идеальный.
Аноним 24/12/25 Срд 19:41:01 1066209 375
image.png 33Кб, 289x62
289x62
image.png 32Кб, 321x66
321x66
>>1066207
Ухх бля шиношиз проклятый!
Аноним 24/12/25 Срд 19:44:28 1066210 376
>>1066205
Зачем завидовать? Человек популяризирует годот, это же круто.
А вот твой высер про зависть как раз показывает, что ты зачем-то ему завидуешь и тебе реально печёт.
Аноним 24/12/25 Срд 20:15:18 1066214 377
>>1066198
К счастью после третьего провала этот армян понял, что в игры про животных только животные играют
Аноним 24/12/25 Срд 20:28:17 1066215 378
>>1066208
Ты бы знал какой у меня сейчас прототипный говнокод, там не EventBus нужен, а EventBulldozer.
Аноним 24/12/25 Срд 20:49:35 1066216 379
image.png 3Кб, 69x55
69x55
>Hexes vs Squares
Неожиданно, оказалось, у днд задротов целые срачи на эту тему есть. Никогда не думал что попаду к ним. Я просто хотел услышать подводные для пошаговой стратежки.
Аноним 24/12/25 Срд 21:34:44 1066218 380
>>1066216
>у днд задротов
Если тебя интересуют видеоигры, лучше это читай:
https://www.redblobgames.com/grids/hexagons/
А настольных не слушай, у них свои беды с башкой.

>подводные для пошаговой стратежки
Беды с башкой после ныряния в алгоритмы...
Аноним 24/12/25 Срд 22:11:02 1066223 381
image.png 485Кб, 496x700
496x700
>>1066214
>в игры про животных только животные играют
Так и есть.
Вообще мало кто кроме животных играет в игры. Сходу даже ни одного примера не вспомню.
А, нет, вспомнил. Ещё ИИ играет в игры. Он не животное.
Аноним 24/12/25 Срд 22:20:38 1066224 382
>>1066178
>универсальный скрипт, который будет использоваться во множестве разных сцен
Ну как бы да, но нет.
Конечности всегда дети тела. Коллижоншейп всегда ребёнок коллижонобжекта. Но в обратную сторону это не работает: у тела детьми могут быть не только конечности, но ещё джоинты, абилки, инвентарь и анимация. У коллижонобжекта зачастую ребёнком может быть спрайт, а ещё какая-нибудь партикля и звук.
Конечность чисто в теории могла бы быть отдельным переиспользуемым объектом, но на практике им не является. А вот тело иногда должно сообщать конечностям, например, что оно умерло, и пора бы обрести физику, чтобы превратиться в рэгдолл. Физический объект сообщает, что в него попала пуля; тогда партикля плюётся частичками, звук проигрывается, а спрайт ничего не делает; но их всех может и не быть, ничего страшного.

Универсализация и разбиение на отдельные объекты, каждый из которых можно протестировать как отдельную сцену, это отличная фича. Но не следует слишком упарываться. Некоторые вещи просто не имеют смысла по отдельности.

>Когда ты создаёшь конкретную сцену в десигнтайме (в визуальном редакторе Godot), ты видишь все ноды в дереве этой сцены - все их имена и классы, и можешь свободно связывать нужное с главным скриптом сцены
А если главный скрипт этой сцены у меня универсальный и переиспользуемый? И не знает, какие конкретно ноды будут туда добавлены?
Аноним 24/12/25 Срд 22:33:10 1066225 383
image.png 5Кб, 272x215
272x215
image.png 545Кб, 715x515
715x515
>>1066218
Вообще странно, обычно про годот говорят, что он ближе к 2D, но инструментов для гексов не очень (хотя гексы такая же база как квадраты).
Но хотя бы ручками в TileMapLayer можно будет "порисовать" (вроде).

PS я еще не решился с конечным геймплеем. Гексы хорошо демонстрируют местность и цива-лайк города, но данжи или строения (где есть прямые) - не очень (пик2 с половинными гексами).
Аноним 24/12/25 Срд 22:45:10 1066227 384
image.png 837Кб, 1024x576
1024x576
image.png 138Кб, 1000x1000
1000x1000
>>1066225
А я ведь упорюсь и сделаю градострой квадратным - и кто меня остановит??
Аноним 24/12/25 Срд 23:35:16 1066233 385
>>1066225
> инструментов для гексов не очень
Так вроде же в четвёрке по сравнению с трёшкой много инструментов добавили же не? Я сам не смотрел.
Аноним 25/12/25 Чтв 00:10:04 1066236 386
image.png 70Кб, 407x338
407x338
image.png 77Кб, 414x350
414x350
>>1066233
Ну можно было хотя бы сделать AStarHexGrid2D по аналогии AStarGrid2D (не потому что сложно сделать самому, а потому что хочется чтобы такое API было на С++)
https://github.com/OmarQurashi868/a-star-hex-grid-2d/blob/main/a_star_hex_grid_2d.gd

Проблему прямых линий и половинных гексов, тоже самому решать (а данжи наше все).
Аноним 25/12/25 Чтв 00:14:43 1066237 387
image.png 165Кб, 785x611
785x611
>>1066236
А еще можно и сглаживание перемещения туда прикрутить.
Аноним 25/12/25 Чтв 00:33:45 1066242 388
image.png 81Кб, 414x350
414x350
>>1066236
>>1066237
Хотя это глина (как только юнит остановится), мы же не ДнД задроты, лучше придерживаться симметрии (кто вообще делает данжи на гексах??), ссори за флуд.
Аноним 25/12/25 Чтв 01:33:46 1066252 389
image.png 29Кб, 752x458
752x458
image.png 33Кб, 859x489
859x489
Знает кто как фиксить это в png?
Аноним 25/12/25 Чтв 01:36:52 1066255 390
camphoto1254324[...].jpeg 4320Кб, 3024x4032
3024x4032
>>1065690
Ебать вы тут понаписали.

>Как правильно делать
Честно говоря, мне похуй как правильно. Мне главное чтобы работало.
Игра уже через две недели будет релизнута. Ноль багов, ноль проблем. Захардкодил локали через файлы .tres а не годотню. Типо
Scenario_ru
Scanerio_en

Ты наверняка больше меня понимаешь в коде, я не спорю, но мне на чистоту кода и прочие вещи, честно сказать, безразлично. Игра работает? Да. Игра вышла в стиме? Да.
Че там под капотом ебать никого не должно. Запускается даже на макбуках 2012 года.
А большего мне и не надо.
Аноним 25/12/25 Чтв 01:44:03 1066256 391
IMG0580.webp 14Кб, 512x420
512x420
>>1066255
>Игра работает? Да.

Чады начали разрабатывать игры. Это конец.
Аноним 25/12/25 Чтв 02:13:20 1066257 392
image.png 11Кб, 697x370
697x370
image.png 3Кб, 565x57
565x57
>>1066252
В общем, кто такой же нубас как я, лечиться это только добавлением толщины +2 пикселя по Y (128х130).
Проблема сглаживания (полупрозрачные пиксели, которые еще снизу усиливают толщину полупрозрачности).
Всем спасибо, вы лучшие 🫶😍😻
Аноним 25/12/25 Чтв 02:23:50 1066258 393
image.png 44Кб, 663x344
663x344
>>1066257
Добро пожаловать в ад гексы
Аноним 25/12/25 Чтв 02:57:32 1066262 394
image.png 5Кб, 373x99
373x99
image.png 53Кб, 897x448
897x448
image.png 54Кб, 926x437
926x437
>>1066218
>>1066258
А теперь вопрос, нужны ли мне равносторонние шестиугольники? Мне чет понравились блоки 128х128 (центр всегда целочисленный, отступы тоже).
А равносторонние смотрятся как в старых Героях.

Я говноед? Или норм?
Аноним 25/12/25 Чтв 03:28:58 1066263 395
>>1066262
Ладно, там слишком много готовых вычислений, чтобы я еще математику потом дрочил. хотя мне не особо много надо. Как вариант потом попробовать слегка сдвинуть угл обзора (в 3д унести, хз)
Аноним 25/12/25 Чтв 03:46:05 1066265 396
Запись экрана20[...].webm 1465Кб, 1159x688, 00:00:50
1159x688
Тут с физикой немножко играюсь.
Попробовал физику Rapier ещё, но так и не смог добиться аналогичного поведения. Тамошние джоинты почему-то не убирали коллизию между колёсами и тележкой. Ну и хрен с ним, я в этом проекте вряд ли вылезу за ограничения годотовской физики.

Анонче, вопрос на подумать. У реальных моторов есть две важные характеристики - скорость и крутящий момент. Допустим, тележка очень тяжёлая, и слабый мотор не сможет её сдвинуть, зато он умеет разгоняться до больших скоростей, если тележка лёгкая; и наоборот, сильный мотор не умеет быстро разгоняться, зато сдвинет даже тяжёлую тележку. Но у пинджоинтов есть только один параметр - motor_target_velocity. Как сымитировать разные виды моторов? Я чота пока ничего путного не придумал.
Аноним 25/12/25 Чтв 06:44:22 1066267 397
>>1066265
>Тамошние джоинты почему-то не убирали коллизию между колёсами и тележкой
Неправильно слои настроил?
Земля 1 маска 1
Тележка 2 маска 1
Колесо 3 маска 1
>Как сымитировать разные виды моторов? Я чота пока ничего путного не придумал.
Всего навсего спросить нейродебила
def calculate_acceleration(mass, torque, engine_power):
"""
mass: вес объекта
torque: базовый крутящий момент
engine_power: сила двигателя от 0.0 до 1.0
"""

# Константы баланса
K1_TORQUE_BONUS = 3.0 # Насколько резвее слабый мотор (множитель)
K2_MASS_DRAG = 0.005 # Насколько сильно масса убивает слабый мотор

# 1. Рассчитываем множитель момента
# Чем меньше Power, тем больше бонус к моменту
torque_multiplier = 1 + (K1_TORQUE_BONUS (1.0 - engine_power))

# 2. Рассчитываем "чистую" тягу по Ньютону (F = ma -> a = F/m)
base_acceleration = (torque
torque_multiplier) / mass

# 3. Рассчитываем штраф за массу для слабых двигателей
# Чем меньше Power, тем сильнее влияет масса
mass_penalty = K2_MASS_DRAG mass ((1.0 - engine_power) 2)

# Итоговое ускорение
final_acceleration = base_acceleration - mass_penalty

# Ускорение не может быть отрицательным (если не учитываем горки)
return max(0.0, final_acceleration)

# Тесты
print(f"Слабый + Легкий: {calculate_acceleration(100, 500, 0.0):.2f}") # Ожидаем: Высокое
print(f"Сильный + Легкий: {calculate_acceleration(100, 500, 1.0):.2f}") # Ожидаем: Среднее
print(f"Слабый + Тяжелый: {calculate_acceleration(1000, 500, 0.0):.2f}") # Ожидаем: 0 (не тянет)
print(f"Сильный + Тяжелый: {calculate_acceleration(1000, 500, 1.0):.2f}")# Ожидаем: Низкое, но > 0
Аноним 25/12/25 Чтв 07:13:55 1066268 398
>>1066267
Портянки кода в тред не выкладываем. Юзаем сервисы вставки кода. Потому что знак умножения - часть разметки, а табуляция вырезается. Тег [code] администрация отказывается добавлять несмотря на все просьбы.

Пойду ещё раз в d спрошу.
Аноним 25/12/25 Чтв 07:18:39 1066269 399
>>1066268
> Пойду ещё раз в d спрошу.
Сходил. Подвачуйте там Буйного Арбузика в треде о багах и фичах.
Аноним 25/12/25 Чтв 08:08:33 1066273 400
Аноним 25/12/25 Чтв 11:37:02 1066282 401
ComfyUI00568.png 1679Кб, 2024x1024
2024x1024
Screenshot1.png 248Кб, 692x789
692x789
>>1065671
Окей, разобрался. Видимо проблема была в самой модели генерации картинок, SDXL и его производные плохо понимают openpose, перешел на Qwen и все заработало, да еще и качество деталей намного выше. Таким образом фундамент пайплайна генерации ассетов для годот завершен, скины для персонажа можно будет генерить инпейном.
Даже если stablegen в блендер заглючит на генерации текстур, картинки настолько качественные что можно разукрашивать модель прямо с них.

Теперь пойду смотреть ассеты города чтобы не пришлось улицы и столбы самому моделить.
Аноним 25/12/25 Чтв 11:37:36 1066283 402
EndlessLegeng2.png 3382Кб, 1920x1080
1920x1080
image.png 51Кб, 775x576
775x576
Ну... я... где-то рядом
Аноним 25/12/25 Чтв 12:52:55 1066287 403
image.png 61Кб, 1113x586
1113x586
>>1066283
Избегайте добавление через svg, годот когда преобразует, игнорирует смешивание.
Аноним 25/12/25 Чтв 14:16:30 1066291 404
Снимок экрана20[...].png 10Кб, 254x149
254x149
>>1066267
Надо законодательно запретить пользоваться нейронками людям с айсикью меньше единицы.
1. Какие нахуй слои, когда речь про пикрил галочку? А на сложные рэгдоллы никаких слоёв не напасёшься.
2. Нейронка выдала какие-то свои вольные фантазии на тему, не врубившись в вопрос. Потому что ты тоже не врубился.
Аноним 25/12/25 Чтв 14:53:44 1066299 405
>>1066291
>Спрашивает помощь
>Кроет хуями в ответ, потому что слабо описал вопрос
>Все еще ждет помощи
Иди нахуй кстати
>Какие нахуй слои, когда речь про пикрил галочку?
Так бы сразу
>Нейронка выдала какие-то свои вольные фантазии на тему, не врубившись в вопрос.
Там формула зависимости мощность мотора<->крутящий момент<->масса
Аноним 25/12/25 Чтв 15:50:34 1066304 406
Dual Grid.jpg 172Кб, 1920x1080
1920x1080
Аноним 25/12/25 Чтв 16:17:12 1066311 407
>>1066304
> dual grid
Ебейшая базищща! Когда впервые узнал об этой технике, был в шоке, с лицом "а так можно было???"
Аноним 25/12/25 Чтв 16:21:40 1066314 408
>>1066265
>У реальных моторов есть две важные характеристики
Если я правильно понимаю, это характеристики не у самого двигателя, а у коробки передач, которую можно прикрутить к любой крутящей штуке, включая человека (на современных велосипедах куча шестерёнок возле педалей и на заднем колесе - это как раз оно). Когда ты передаёшь вращение с большой шестерни на маленькую, маленькая начинает очень быстро вращаться, но легко останавливается от любого сопротивления и останавливает большую. Если ты передаёшь с маленькой на большую, то большая вращается медленно, но при этом преодолевает большее сопротивление вращению. То есть мотор вращает свою шестерню с одинаковой скоростью и одинаковым усилием, но в зависимости от второй шестерни будет увеличиваться скорость и уменьшаться сила или увеличиваться сила и уменьшаться скорость.

Исходя из этой логики, можно сделать симуляцию по формулам, но...

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

Вообще, зачем тебе это нужно? Для "гоночной" игры с видом сбоку лучше не возиться с физикой и тем более не использовать никакие Joint'ы, а использовать CharacterBody2D и кучу рейкастов - тогда и двигатель симулировать сможешь независимо от любой тряски у физического движка. Если же ты хочешь сделать что-то вроде "Bad Piggies", то я сильно сомневаюсь, что у них там настолько продвинутая симуляция реальных движков. Скорее наоборот, там сделано всё примитивно-мультяшно, лишь бы не тормозило на мобилках. Нужно выбирать инструменты под конкретную задачу, а не подстраивать задачу под инструменты.
Аноним 25/12/25 Чтв 16:34:30 1066318 409
>>1066304
Ушестерите ваши проблемы с гексами. Да, интересное
Аноним 25/12/25 Чтв 17:36:50 1066323 410
crab.gif 456Кб, 220x127
220x127
>>1066224
>Коллижоншейп всегда ребёнок коллижонобжекта
Это одно из немногих исключений из правила, и специально для него в API есть это:
>func _get_configuration_warnings():
Чтобы ньюфаги-геймдизайнеры не засовывали эту ноду туда, куда ей не надо.
Сам должен понимать, это - костыль, и база - это наоборот (родитель -> потомки).

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

>сообщать конечностям, например, что оно умерло, и пора бы обрести физику
Отделение от тела - это обязанность тела, а не конечности. Например, тело:
>func rest_in_pieces(): # прямой запрос извне или реакция на критический урон
>_ for body_part: BodyPart in body_parts: # перебираем известные нам части тела
>_ _ body_part.reparent(get_parent()) # отправляем части в свободный полёт
Сама конечность может проверить, кем является её предок при отделении:
>func _enter_tree():
>_ if get_parent() is not Body # если "рабочее" тело отсутствует...
>_ _ var body := RigidBody3D.new() # ...тогда делаем себе пустышку
>_ _ add_sibling(body) # сажаем пустышку в дерево рядом с нами...
>_ _ body.global_transform = global_transform # ...и с той же позицией
>_ _ reparent(body) # насаживаемся на твёрдое тело и засыпаем
После чего конечность больше ничего не делает со своим предком.
А если нужно отделить только одну повреждённую конечность, тогда:
>func _on_body_part_took_critical_damage(body_part: BodyPart):
>_ body_part.reparent(get_parent()) # дальше это не наша забота
Естественно, что это делает тело (см. пикрил), а не сама конечность.

>Физический объект сообщает, что в него попала пуля
Не нужно ему никому об этом сообщать, если это не RTSина какая...
>тогда партикля плюётся частичками, звук проигрывается
К ним тело обращается напрямую через вызовы их методов по имени.
>но их всех может и не быть, ничего страшного
Как это - ничего? У тебя тело сломалось, а тебе ничего страшного?
"Вылетание частиц" и "проигрывание звуков" - это часть свойств тела.

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

>А если главный скрипт этой сцены у меня универсальный и переиспользуемый?
Делаешь базовый скрипт "UniversalClass" и потом делаешь:
>class_name SpecificSceneA extends UniversalClass
>@export var specific_thing_a: NodeA
>class_name SpecificSceneB extends UniversalClass
>@export var specific_thing_b: NodeB
И т.д. Это же очевидно. Это же ООП движок всё-таки.

У наследования в Godot один фатальный недостаток: родитель лишь один.
Поэтому внимательно следим за развитием вот этого предложения:
https://github.com/godotengine/godot-proposals/issues/6416
https://github.com/godotengine/godot/pull/107227
Аноним 25/12/25 Чтв 18:05:24 1066325 411
17666670347670.jpg 248Кб, 900x800
900x800
>>1066318
>Ушестерите ваши проблемы с гексами
Для передвижения юнитов (теста проходимости клетки, поиска координат, построения пути), всяких построек внутри клеточек и т.п. ты используешь обычную шестиугольную сетку. Но каждый шестиугольник можно представить как состоящий из шести треугольников, которые он использует вместе с соседями - эти треугольники используются только для размещения визуальных тайлов (земли, воды и т.п.). Нужно это для того, чтобы уменьшить количество необходимых тебе визуальных тайлов-шестиугольников для отображения изгибов ландшафта.

По сути тебе нужно всего 3 спрайта-треугольника, которые ты вращаешь, создавая свои шестиугольники:
0. Пустой треугольник (прозрачный - не используется).
1. Один краешек земли (накладывается поверх фона).
2. Два краешка земли.
3. Полностью заполненный землёй.
Вращаешь с шагом 60 градусов и получаешь всё что нужно...

Хотя, для пиксель-арта может потребоваться больше спрайтов.
Аноним 25/12/25 Чтв 18:39:58 1066329 412
>>1066323
Аааа, я тут облажался с подходом:
>Сама конечность может проверить, кем является её предок при отделении...
>>_ if get_parent() is not Body
Конечность не должна тестить предка, т.к. это завязывает её на класс предка.

Правильный код будет выглядеть примерно так - в скрипте тела:
>func detach(limb: Limb) -> void:
>_ var empty := RigidBody3D.new()
>_ add_sibling(empty)
>_ empty.global_transform = limb.global_transform
>_ limb.reparent(empty)
Тогда конечностям совсем не нужно будет взаимодействовать с предками.
Ну и используем этот метод для последовательного разделения на части:
>func rest_in_pieces():
>_ for limb in limbs:
>_ _ detach(limb)
>_ queue_free()
Так будет лучше.
Аноним 25/12/25 Чтв 20:06:03 1066340 413
image.png 34Кб, 752x458
752x458
image.png 45Кб, 859x489
859x489
image.png 12Кб, 301x215
301x215
>>1066325
Мне не сильно нужно в текущем концепте, но я учту когда начну плейсхолдеры заменять.

Я бы лучше услышал как фикситься эта проблема:
У гексов есть проблема сглаживания диагональной линии в местах соединения граней (я пытался насиловать png, но это выглядит как фундаментальная проблема). Пришлось увеличить края на 2 пикселя и итоге получился числовой адок для перфекциониста (как в атласе, пик3, так и в векторе)

Возможно этому есть решение, но нифига ничего не гуглится (до шейдеров мне далеко).
Аноним 25/12/25 Чтв 20:20:42 1066343 414
image.png 222Кб, 892x618
892x618
>>1066340
На самом деле, равносторонние гексы кривые и так, так что париться ради 2 пикселей звучит как фигня. Я вообще по итогу сетку добавил, с ней лоу-плейсхолдеры еще лучше смотреться.
Аноним 25/12/25 Чтв 20:23:27 1066344 415
>>1066252 >>1066257 >>1066258 >>1066340
Проблема возникает из-за формата PNG, в котором прозрачные пиксели вроде бы вообще не сохраняют цветные каналы (RGB), что обеспечивает лучшее сжатие, но создаёт такие вот артефакты на текстурах. Это одна из причин, по которой многие старые и даже новые игры используют формат TGA - он хранит все 4 канала (RGBA) без потери информации. Формат простой и поддерживается Godot, но он толстый. Можешь попробовать зумеркий WEBP - он поддерживает lossless сжатие как PNG, подробностей не знаю.

От себя рекомендую просто сделать чёрную обводку вокруг каждого шестиугольника. По крайней мере сейчас твоя карта выглядит так, что ей не помешала бы видимая обводка шестиугольников - хотя бы для тестирования. Когда игрок фокусируется на одной клетке, делай обводку белой. Тогда эти "серые" переходы на границах не будут такими заметными, если они вообще будут. Сфокусируйся пока на геймплее, а уже когда будешь делать нормальную графику, тогда разберёшься с тем, как это сделать без артефактов.
Аноним 25/12/25 Чтв 20:31:49 1066345 416
Аноним 26/12/25 Птн 11:05:01 1066425 417
>>1066314
>Если я правильно понимаю, это характеристики не у самого двигателя, а у коробки передач
Не важно в данном контексте, на самом деле. Я не разделяю мотор и передачу; скорее всего, вообще будут единые мотор-колёса. И так боюсь переусложнить.
>Вообще, зачем тебе это нужно?
Что-то типа Вангеров, только в 2д, и игрок сам конструирует свой мехос из говна и палок. Может взять моторчик с хорошей тягой, чтобы было легче забираться в горку, а может взять более шустрый, и тогда на ровной поверхности будет быстрее.
>сцепление с поверхностью (сила трения)
Имеется в годотовской физике.
>использовать CharacterBody2D и кучу рейкастов
Заебусь реализовывать физику, тем более зависящую от кучи заменяемых деталей.
>...но проблема в том, что ты хочешь использовать нестабильный физический движок реального времени, в котором куча упрощений и заплаток-костылей для того, чтобы это хоть немного работало.
Вся идея вообще возникла от "у меня есть движок, в нём можно сделать штуку", а не "хочу сделать штуку, нужен движок". В конце концов, есть ещё Rapier и Box2D, если годототфизикс будет не хватать. Но пока что хватает, и надо только понять, как реализовать фичу. А у тех движков есть свои проблемы, которые к тому же не очень понятно как решать (и вообще надо ли, или это просто баги, и надо просто взять другую версию). И да, кстати: они тоже движки реального времени с кучей компромиссов.

>>1066299
>Там формула зависимости мощность мотора<->крутящий момент<->масса
Хуйня твоя формула. Точнее, не твоя, а нейронки. Ты её спросил про зависимость скорости от массы, она тебе это и выдала. А проблема-то в чём: зависит оно НЕ от массы. Мотор вообще не знает ничего о массе. Он крутит колесо, а колесо как-то сопротивляется - и вот это сопротивление мотор и преодолевает. Конечно, в простейшем случае, когда машина стоит на горизонтальной твёрдой поверхности, сопротивление колеса зависит от массы; но она же может стоять на горке, может подпрыгивать, может быть плохое сцепление с поверхностью - во всех этих случаях сопротивление колеса будет уменьшаться, и для слабого мотора это даст прирост к скорости.

В общем, я пока что придумал только вот что. У мотора есть максимальная скорость и есть коэффициент мощности. Он знает текущую скорость вращения. При нулевой скорости вращения motor_target_velocity будет равно максимальной скорости умноженной на коэффициент мощности; при достижении максимальной скорости motor_target_velocity равно этой самой максимальной скорости; ну а при превышении вообще становится меньше её. Таким образом, чем меньше скорость колеса, тем шустрее мотор пытается его раскрутить. Можно ещё эту характеристику сделать нелинейной, прогоняя её через Curve2D, и тогда некоторые моторы будут особенно хороши лишь в определённом диапазоне скоростей; но я не уверен, что хочу такую глубину симуляции.
Аноним 26/12/25 Птн 13:47:24 1066450 418
>>1066049
>Пик
Недооценённая штука, спрятанная глубоко в настройках.
Аноним 26/12/25 Птн 15:30:29 1066463 419
>>1066282
Думаю моделить лучше самому, поскольку дизайн код важен для игры мечты.
Аноним 26/12/25 Птн 15:57:49 1066470 420
>>1066463
Создавать что-то из башки самое интересное.
Вот мгновение этого еще не существовало во вселенной и бах, оно есть - богоподобный скилл.
Аноним 26/12/25 Птн 16:16:18 1066473 421
>>1066463
>моделить лучше самому
В сутках нету столько часов, в годах столько дней, в жизни столько лет, чтобы все херачить самому.
Аноним 26/12/25 Птн 17:08:20 1066485 422
>>1066473
Толку что-то делать если ты ничего не умеешь.
Ты сможешь только повторить, а сделать что-то свое уникальное и стилизованное не получится никогда.
Аноним 26/12/25 Птн 17:09:39 1066487 423
>>1066473
Зато есть достаточно времени чтобы пинать хуи на двачах и в гача-дрочильнях. А делать самому, ну неее.

Надо просто не вляпываться в таймсинки типа скелетной и лицевой анимации, и выезжать на стиле, который со временем нарабатывается. Дальше легче.
Аноним 26/12/25 Птн 18:33:11 1066495 424
download.png 9Кб, 247x204
247x204
>>1066485
>Ты сможешь только повторить, а сделать что-то свое уникальное и стилизованное не получится никогда.
Мне этого достаточно.
Аноним 26/12/25 Птн 20:22:10 1066504 425
>>1066450
Та ну, это какой то пердолинг, комменты не для этого придуманы. Обо будет отвлекать на себя внимание вместо реальной задачи, каждый рас смотря в скрипт будешь смотреть на эту радугу.
Аноним 26/12/25 Птн 21:39:53 1066514 426
Запись 2025-12-[...].mp4 354Кб, 572x622, 00:00:09
572x622
Это нормально для Line2D?
Я уже до "целых" обрезал.
Аноним 26/12/25 Птн 21:46:31 1066515 427
image.png 4Кб, 202x32
202x32
>>1066514
Наверное не обрезал
Аноним 26/12/25 Птн 21:49:27 1066516 428
>>1066514
А в целом надо код смотреть, если не хочешь показывать то должно быть примерно так
> var p: Vector2D # Точка в глобальных координатах
> line2D.add_point(line2D.to_local(p))
Аноним 26/12/25 Птн 22:06:11 1066517 429
Запись 2025-12-[...].mp4 913Кб, 720x654, 00:00:12
720x654
>>1066514
А вот draw_line() норм все, в _draw().

>>1066515
Там до и после обрезки (я думал может округляет куда-то).
Я все в "целые" перевел.
Аноним 26/12/25 Птн 22:17:09 1066518 430
image.png 29Кб, 527x220
527x220
>>1066516
Да это все есть.
Ппц на гребанную линию потратил больше времени чем на пасфаендер для гексов. Она еще и мерцает если двигаешься быстро.
Аноним 26/12/25 Птн 22:24:50 1066520 431
>>1066518
А line2d у тебя где в дереве относительно персонажа? Если дочерняя к персонажу то она (её начало координат) двигается вместе с ним
Аноним 26/12/25 Птн 22:32:41 1066525 432
11.mp4 700Кб, 620x520, 00:00:08
620x520
22.mp4 899Кб, 772x632, 00:00:08
772x632
1) Линии здорового человека.
2) Мерцающие линии курильщика.
Аноним 26/12/25 Птн 22:38:28 1066527 433
>>1066520
Добавил в корень и правда проблема исчезла.
Теперь для каждого юнита придется отдельную ноду создавать в корне?
Аноним 26/12/25 Птн 22:47:23 1066528 434
>>1066527
В общем, кому интересно, можно пофиксить (оставив в локальном дереве) установив set_as_top_level(true)
НО теперь полоска над юнитом и фиксить это только z-индексом (насколько я понял).
Аноним 26/12/25 Птн 22:52:18 1066531 435
>>1066525
Во, ништяк! Будут у нас свои Герои на Годоте. Заживём! Миром править будем.
Аноним 26/12/25 Птн 23:10:47 1066535 436
>>1066527
ну ты сам нашёл вариант или надо хранить путь от-до не зависимо от того где сейчас персонаж
Аноним 26/12/25 Птн 23:12:39 1066537 437
>>1066535
в глобальных координатах* в любом случае если line2d - дочерняя то координаты меняются
Если твоя концепция предусматривает 1 путь, то на мой взгляд надо глобально хранить, если будут ещё пути то завести Node2D внутрь которых добавлять Line2D с путями для каждого
Аноним 26/12/25 Птн 23:15:09 1066539 438
>>1066323
>Все эти другие дети определяются главной нодой сцены лишь при необходимости.
Фу, брось, выкинь каку!
Расширяемость через компонентный подход - вот база. Животное не должно ограничиваться капибарой, макакой и лошадью, потому что в какой-то момент может понадобиться сделать лосося и голубя, не вмешиваясь в класс животного. И такой ноде не нужно даже заводить отдельную сцену (но при желании сделать это в два клика): просто создать ноду нужного класса и накидать в неё детей.
>Как это - ничего? У тебя тело сломалось, а тебе ничего страшного?
Ничего не сломалось. Если у какого-то объекта нет спрайта, значит он невидимый; нет звука - беззвучный. Он не обязан иметь ничего из этого. Каждый компонент отвечает сам за свои функции; задача родителя - лишь объединить всех под общей крышей.
>Делаешь базовый скрипт "UniversalClass" и потом делаешь:
Фунахуй. Скрипты раздувать на каждый новый предмет, когда этот предмет можно было бы собрать просто мышкой накидав в него компоненты? Нет пути.
>Отделение от тела - это обязанность тела, а не конечности.
Конечности важно знать, находится она в составе анимированного тела или же болтается оторванная в виде физического объекта. А телу что? Ну, анимации могут поменяться, чтобы соответствовать; но это вообще не про конечности, а про дамаг, и тут информация "я четырёхногое" или "я гуманоид" никак не связана с наличием или отсутствием конечностей. Зачем вообще телу знать, какие у него есть части? Что изменилось для твоего пикрил краба? У него даже анимация ходьбы осталась прежняя.

Я, кажется, понял, откуда у этого CDSU ноги растут. Когда у тебя не ноды в дереве, но всё ещё есть чёткая иерархия, где одни классы являются полями других. На плюсах, например:
class Hui
{
//blablabla
};
class Man
{
public:
Hui hui;
};
Вот тут вообще без вопросов - действительно из объекта класса Hui достучаться до содержащего его объекта класса Man можно только либо сигналами (если существуют в используемом фреймворке, например они есть qt), либо коллбэками; на те и другие Man всё равно должен сначала подписаться. Но у Годота же мать его дерево нод! Оно осуществляет менеджмент иерархии, и все ноды равноправны. Иерархия здесь - условность для разных удобств, типа автоматической трансформации и гарантированного порядка вызовов. В дереве для каждой нода доступна каждая нода, что означает - ВСЕ вызовы от ноды к ноде проходят через дерево (оно тут выступает шиной, если угодно, ну или менеджером, ну или СИНГЛТОНОМ), и нет никакой принципиальной разницы между вызовом вверх, вниз или горизонтально. Все get_node, get_parent, get_child - это всё равно обращения к дереву. Так смысл тогда этих брачных игр?
Аноним 26/12/25 Птн 23:16:22 1066540 439
>>1066531
Жора там для отладки поиска пути. Это будет смесь цивы-лайк с моей больной фантазией частично натянуть hoi4 (где юнит в гексе - это одна дивизия).
Аноним 26/12/25 Птн 23:20:39 1066541 440
>>1066535
>>1066537
Там по коду и так глобальные координаты. Такое ощущение, что там в какой-то момент не происходит перерисовки и все линии смещаются с движением юнита, а потом перерисовка случается и происходит дерганье.
Аноним 26/12/25 Птн 23:31:51 1066542 441
Запись 2025-12-[...].mp4 2091Кб, 858x628, 00:00:15
858x628
>>1066531
>>1066535
>>1066541
Собственно вот, чем быстрее движение тем ярче проскакивает момент.

Очень похоже на багу. мою, лол. Видимо есть какие-то условия по прорисовке или кэширированию рисунка или хз что там. Пока нет сил разбираться.
Аноним 26/12/25 Птн 23:37:33 1066543 442
>>1066541
Line2D считает добавленные в себя точки в локальных координатах, это необходимо, например ты нарисовал треугольник и переносишь line2D в другое место, если координаты локальные - треугольник переносится, если глобальные - стоит на месте, у тебя персонаж двигается, соответственно линия двигается вместе с ним, это дуобно если ты рисуешь например лазерный указатель в координаты мыши, но для пути надо делать по другому

>>1066542
Я не соображу, но т.к. это происходит для всех линий это может быть
1) настройки проекта - Окно - Scale стоит Integer а не Fractional
2) Твоя ошибка в округлении
Аноним 26/12/25 Птн 23:38:22 1066544 443
>>1066543
забыл
3) ошибка определения центра гекса, но это скорее ошибка округления
Аноним 27/12/25 Суб 00:06:47 1066549 444
>>1066542
> Пока нет сил разбираться.
Утро вечера мудренее. Разберёшься ещё.
Аноним 27/12/25 Суб 00:09:20 1066550 445
>>1066539
> Так смысл тогда этих брачных игр?
Перебирать ноды - дорого.
Аноним 27/12/25 Суб 00:45:52 1066558 446
image.png 4Кб, 213x60
213x60
image.png 3Кб, 195x53
195x53
>>1066543
Отбой тревоги, долбаёб я (кто бы сомневался).
Я поменял местами (рисую после движения и все норм).

Фундаментально не понятно в чем проблема (мы же в цикле), что так
рисуешь
двигаешь (в том числе и картинку)
рисуешь - возвращаешь (дергаешь).

Что так:
двигаешь
рисуешь
двигаешь (в том числе и картинку)
возвращаешь (дергаешь).

Но работает. Возможно что-то с преобразованием to_local чего я не понимаю. Но вообще думал линии между кадрами рисуются.
Аноним 27/12/25 Суб 01:09:06 1066559 447
>>1066558
Вроде понял (или нужно еще накатить - чаю :)).

1)
обновляешь поинты из глобального в локальные
двигаешь - поинты смешаются по каким-то рандомным числам
--рисовка кадра с битыми поинтами (пока еще не дернуло)--
обновляешь поинты из глобального в локальные
двигаешь - поинты смешаются по каким-то рандомным числам
--рисовка кадра с битыми поинтами (тут уже дергает)--


2)
двигаешь все.
обновляешь поинты из глобального в локальные
--рисовка кадра с точными поинтами--
двигаешь все (поинты изменились/испортились).
обновляешь поинты из глобального в локальные
--рисовка кадра с точными поинтами--
Аноним 27/12/25 Суб 01:18:28 1066560 448
>>1066559
Отсюда следует - что все что связанно с координатами для отрисовки, нужно всегда делать в конце всяких преобразований. наверное это где-то прописано кровью, но кто читает полностью документацию?
Аноним 27/12/25 Суб 02:00:45 1066563 449
>>1066550
А где речь про перебор вообще? Наоборот же: мы детей НЕ перебираем, а позволяем им самим подписаться на сигнал, если хотят. А родитель всего один, к нему можно и напрямую обратиться. Можно даже как к уточке, через has_method и has_signal, и это даже не будет накладно, потому что он один и только один.
Конечно, есть ситуации, когда родителя вообще нет, но в этом случае не будет также вызвано и большинство коллбэков, в которых мы что-либо делаем, типа _process. Ну разве что _ready вызывается до появления родителя, но про это мы все в курсе и там его не трогаем. А кто полезет во все остальные коллбэки не разобравшись с внутренним устройством движка, тот ССЗБ: во все места, не описанные в видеотуторах для чайников, грязными ручонками можно лезть только когда уже не чайник и понимаешь что делаешь.
Аноним 27/12/25 Суб 09:00:45 1066573 450
>>1066560
Я не очень понимаю зачем ты каждый кадр перерисовываешь путь.
1) Твой персонаж получает команду на движение из гекса А в кекс Б.
2) Ты вызываешь поискпути из А в Б
3) Создаёшь линии согласно найденного пути добавлением точек в Line2D
4) Персонаж дошел до конца - очищаешь путь

Твоя функция __debug_drawPath должна контролировать только исполнение пунктов 3 и 4, её вообще можно заменить на bool переменную или сделать универсальную функцию которая сама создаст Line2D, добавит точки и как-то узнает о конце пути чтобы удалить Line2D из дерева.

И кстати про >>1066518
Проблема в global_position, кака я понимаю это позиция персонажа, а её нужно сконвертировать в координаты центра хекса примерно так
->в локальные координаты для карты -> в локальные координаты карты т.е. гекса
теперь обратно
-> гекс в локальные координаты карты -> локальные координаты в глобальные
так получится центр гекса
> map.to_global(map.map_to_local(map.local_to_map(map.to_local(global_position))))

Удобно сделать 2 функции для конвертации:
> func vec2hex(p_vec: Vector2, p_map: TileMapLayer)-> Vector2i:return p_map.local_to_map(p_map.to_local(p_vec))
> func hex2vec(p_hex: Vector2i, p_map: TileMapLayer)-> Vector2:return p_map.to_global(p_map.map_to_local(p_hex))

тогда можно сделать:
> hex2vec(vec2hex(global_position, map), map)
Аноним 27/12/25 Суб 09:54:59 1066574 451
>>1066563
> мы детей НЕ перебираем
Когда ты вызываешь методы дерева - дерево перебирает ноды, чтобы этот метод выполнить. Да, ты ничего не перебираешь, у тебя джаст воркс.
Аноним 27/12/25 Суб 10:28:58 1066577 452
>>1066574
>дерево перебирает ноды
диалог ваш не читал, но скорее всего не перебирает, ему не нужно, при добавлении в дерево происходит взятие ссылки из словаря который заполняется при добавлении детей в дерево
Аноним 27/12/25 Суб 10:31:44 1066579 453
>>1066577
>при добавлении в дерево
при поиске ноды
fix
Аноним 27/12/25 Суб 10:39:53 1066581 454
>>1066577
> но скорее всего не перебирает
У нас опенсорц, ты можешь без потолочных предположений открыть код и посмотреть, что конкретно происходит.
Аноним 27/12/25 Суб 10:45:11 1066582 455
>>1066581
могу но не буду, не собираюсь ковыряться в каловом с++ говне обезьян и хуана, разбираясь кто чей наследник, где перегруженным оператором прокидывается операция += в операцию + и написано ли это в .cpp файле или .h

можешь дать ссылочку на строку, если такой >У нас опенсорц
Аноним 27/12/25 Суб 11:03:25 1066585 456
1766822606090.png 48Кб, 1038x739
1038x739
>>1066582
Да пожалуйста, добрый сер, вот ваш фрагмент кода с перебором, аж с двумя.
Аноним 27/12/25 Суб 11:14:16 1066587 457
>>1066585
>с перебором, аж с двумя
которые происходят только если get_node_or_null не вернула ничего
но всё равно не ясно что за subname чьё количество возвращается, я бы сказал что всё что после if(!node) касается уже свойств найденной ноды и ресурсов типа шейдера или скрипта
Аноним 27/12/25 Суб 11:25:31 1066589 458
>>1066585
Не парься там, я глянул внутрь.

Нет кеша типа Cache["/Node1/Node2/Node3"] (как я думал)

там получается c1 = ChildrenOf["Node1"]; c2 = ChildrenOf["Node2"]; return ChildrenOf["Node3"] и для нод с уникальным именем свой кеш ещё.

где ChildrenOf -хешмэп
Аноним 27/12/25 Суб 14:15:11 1066594 459
image.png 32Кб, 319x259
319x259
image.png 28Кб, 568x177
568x177
>>1066573
>Я не очень понимаю зачем ты каждый кадр перерисовываешь путь

Это дебаг линия.
Это нужно чтобы визуализировать движения юнита относительно его центра и увидеть его центр вообще. Например при повторном клике в другое место, мы не хотим чтобы юнит пошел по краю, а центрировал себя (если новый путь не совпадает со старым).

Не нужно центрировать по global_position, линия исходит из персонажа (трогать ее не нужно), поиск пути уже центрирован и так. Но да, апи там веселое пик2, приходится обертки писать.
Аноним 27/12/25 Суб 14:32:12 1066596 460
image.png 11Кб, 515x37
515x37
>>1066594
Кстати да, ошибка там. Поэтому нужна строгая типизация, а не вот это все (хинты).
Проглядел при копипасте.
Аноним 27/12/25 Суб 14:35:06 1066597 461
>>1066594
> Но да, апи там веселое пик2, приходится обертки писать.
Бедненький. Не предусмотрели создатели движка твои шизозапросы.
>>1066596
> Поэтому нужна строгая типизация
Тебе нужно нахуй свалить, блядь в свой срачезагон, откуда ты выкатился, мразь.
Аноним 27/12/25 Суб 14:47:54 1066598 462
>>1066597
Порванок, показывай игру на годоте или направляйся в загон единолично
Аноним 27/12/25 Суб 14:54:37 1066600 463
>>1066598
Я на Годоте делаю прошивку для автомагнитолы. Это объект авторского права и показать его в треде я не имею.
Аноним 27/12/25 Суб 15:03:39 1066602 464
>>1066597
Можно только представить насколько твоя желчность разрушает тебе жизнь.
По-любому там уже багаж нервозов и депрессии, будь осторожнее с этим, оно тебя сожрет.
Аноним 27/12/25 Суб 15:08:20 1066603 465
1766837301765.png 255Кб, 400x600
400x600
>>1066602
Улыбка немножко кривая, а в целом всё норм. Спасибо за заботу.
Аноним 27/12/25 Суб 15:23:47 1066604 466
>>1066603
В школах начались каникулы, можно две недели сюда не заходить.
Аноним 27/12/25 Суб 15:44:26 1066606 467
>>1066596
К сожалению в случае с Vector2 -> Vector2i не поможет, там просто происходит конвертация даже со всеми включенными ворнингами, я на это ишью создавал ещё летом 2024, но они не смогли решить нужно ли им создавать новый тип варнинга или использовать существующие, потом ишью потонуло и я его сам удалил через пол года потому что пошли они нахуй
Аноним 27/12/25 Суб 16:08:20 1066607 468
17602105975940.png 1580Кб, 1024x1024
1024x1024
>>1066594
> Например при повторном клике в другое место, мы не хотим чтобы юнит пошел по краю, а центрировал себя.
При этом ему нужно будет вернуться, что смотрится не очень. Это, кстати, объясняет почему Парадоксы не делали анимации между переходами (только относительно недавно они улучшили этот момент)

Вот почему прототипирование важно. В "голове" я этого даже не увидел
Аноним 27/12/25 Суб 16:50:49 1066610 469
>>1066594
>Например при повторном клике в другое место,
Так а концепция такая, что юнита можно передвигать в любой момент? Не помню где такое было, обычно кликнул куда-то и всё, ну в крайнем случает есть кнопка отменить ход которая просто телепортирует его обратно.
Аноним 27/12/25 Суб 18:30:36 1066614 470
код.png 31Кб, 680x650
680x650
демо.mp4 638Кб, 800x600, 00:00:09
800x600
Аноним 27/12/25 Суб 18:31:38 1066615 471
>>1066610
Реалтайм движение как в играх Paradox. Типа армия перемещается медленно как между больших регионов (в HOI4 регион это вообще реальная область), в данным момент армия движется в лес (пехота очень любит прятаться в лесу). Гекс может быть селом, или несколько гексов образует целый город. Такой масштаб.

Я пока пробую реалтайм боевку. Возможно вернусь к пошаговой. вся рисовка плейсхолдеры, потому что если реалтайм не зайдет я уйду в фэнтэзи по толкину, а потом возможно и лайтовое 3Д
Аноним 27/12/25 Суб 18:45:25 1066616 472
>>1066614
Я уже решил проблему
>>1066559
Годот, вероятно, при line2D.to_local() не вычисляет новые координаты сразу, а хранит отдельно и когда наступает время рисовать, он вычисляет уже с другим оффсетом и рисует по испорченным координатам.
Ну я так понял, пускай С++ гуру подтвердят.

Мне понравился твой пасфаендер. Я бы назвал его "новогодний поиск пути".
Аноним 27/12/25 Суб 19:35:21 1066619 473
aggregation vs [...].png 14Кб, 700x400
700x400
>>1066539
>Расширяемость через компоненты
>в какой-то момент [[ВНЕЗАПНО]] может понадобиться
Ты избыточно жертвуешь удобством и надёжностью ради "гибкости" в будущем. Это ECS головного мозга. В ООП есть два основных типа ассоциаций между классами: агрегация и композиция. Агрегация - это мягкая зависимость, когда один объект получает ссылку на другой объект на ограниченное время пользования. Агрегация позволяет объектам существовать полностью независимо друг от друга и иметь множество пользователей. Композиция - это жёсткая зависимость, когда объект полностью владеет другим объектом, от начала и до конца. Композиция создаёт связь "родитель - потомок", которую мы можем легко наблюдать в любых сценах Godot при создании новых нод.

Итак, когда предпочитать агрегацию, а когда - композицию? На мой взгляд, по умолчанию все ноды в дереве сцен Godot взаимодействуют по принципам композиции: они имеют строго одного предка и существуют столько же, сколько существует их предок, и предок имеет полный контроль над ними. Однако, в некоторых случаях нам может требоваться агрегация, например, когда мы создаём что-то в реальном времени из разрушаемых по отдельности частей, которые должны существовать сами по себе, независимо друг от друга. С агрегацией намного сложнее работать, чем с композицией, потому что требуется учитывать все приходы-уходы объектов и их классы. С композицией объекты жёстко связаны и поэтому с ними намного проще работать, чем в случае агрегации.

А если тебе в будущем ВНЕЗАПНО потребуется агрегация там, где сейчас композиция - ну, что же, ничего, отрефакторишь часть кода, сложно что ли? Ты должен заранее знать, где тебе совершенно точно потребуется агрегация, и, значит, нужно наворачивать дополнительные методы для управления объектами, а где тебе будет достаточно простой композиции объектов.

Пользуйся бритвой Оккама в разработке - не множь проблемы без крайней на то необходимости.

>Если у какого-то объекта нет спрайта, значит он невидимый; нет звука - беззвучный.
Если это поведение не было прописано в спецификации на объект, то он - сломанный.
>задача родителя - лишь объединить всех под общей крышей
Нафига? Сри своими компонентами прямо под Root-ноду в рантайме. Слишком сложно?
>когда этот предмет можно было бы собрать просто мышкой накидав в него компоненты?
И как ты с ним работаешь, если у него никаких методов и свойств нет, только "компоненты"?

>Конечности важно знать, находится она в составе
Не нужно ей ничего знать. У неё два состояния:
1. Нет тела - поведение по умолчанию (или нет поведения).
2. Есть тело - тело управляет конечностью как-то по-своему.

>Что изменилось для твоего пикрил краба?
У краба есть нервный узел (мозг), который управляет всеми его конечностями: 8 ног, 2 руки, ещё несколько жевательных конечностей в пасти... Если какая-то конечность критически повреждена, мозг краба ощущает неполадку в подчинённой ему системе и отрывает повреждённую конечность, а затем адаптируется к движению на оставшихся конечностях до следующей линьки (когда тело отрастит новую конечность на место старой). Сама конечность только следует приказам мозга.

Можно также рассмотреть осьминогов. У осьминогов 9 нервных узлов-мозгов, по 1 на каждое из 8 двигательных щупалец и ещё 1 центральный в головном отделе. Поэтому отделённые от туловища щупальца продолжают активно двигаться, пытаясь что-то сделать - у них есть своё поведение. Но осьминог в целом управляет всеми 8-ю щупальцами через свой 9-й мозг, а не наоборот. То есть щупальце может сообщать центральную мозгу "я что-то нащупало, двигаем сюда", а потом этот центральный мозг приказывает 7-ми остальным мозгам "двигайте в том направлении".

Суть в том, что мозги осьминога не смогут управиться с телом краба, а мозги краба не смогут управиться с телом осьминога - они заточены под строго конкретную конфигурацию тела и вся их гибкость ограничена возможностью потерять несколько конечностей. Хотя человеческий мозг способен адаптироваться к подключению дополнительных конечностей, но это другое...

Так и в ООП. У тебя объекты заточены под конкретную конфигурацию, чтобы оптимальным образом работать именно в ней - ты не создаёшь супер-монстра, способного работать с абсолютно любыми конечностями и абсолютно любыми мозгами, а создаёшь специфично ограниченную конфигурацию, решающую твою конкретную задачу в конкретной ситуации, а не "что угодно, как угодно, где угодно".

>Когда у тебя не ноды в дереве, но... одни классы являются полями других
Ты не поверишь, но "ноды в дереве" - это на самом деле "классы в полях других классов".
>у Годота же дерево нод! Оно осуществляет менеджмент иерархии, и все ноды равноправны
Слишком большая свобода в коде - источник проблем. Тысячу раз объясняли в этом треде...
>Иерархия здесь - условность для разных удобств
Да. И ты жертвуешь этими удобствами. Зачем?
>Так смысл тогда этих брачных игр?
В чём смысл предохранителя в пистолете, который ты в кобуре на ноге носишь?
Аноним 27/12/25 Суб 19:56:59 1066620 474
Аноним 27/12/25 Суб 20:43:17 1066625 475
>>1066620
Я видел демку на годоте тоже. Но только у меня будет процедурный мир, да и гексы как-то проще, там не всегда балансные провинции.

А тут:
4 врага рядом - частичное окружение, штраф 25%
5 врагов - частичное окружение, штраф 50%.
6 врагов - окружен 75%

Пока глубокое прототипирование, пошаговые проще. Вот как быть если два юнита двигаются в одну точку.
Или на юнита напали, он остановился раньше положенного, но в ту позицию двигался другой юнит (и раньше гейкс был помечен как свободный).
Тебе же не хочется обнаружить, что подкрепление перестало идти еще игровую неделю назад.

1) Надо хранить все пути и запрещать вторичную конечную точку, а так же пересчитывать в случае форс-мажора (привет еще один слой абстракции).

2) В момент конфликта, возвращать опоздавшего назад (а если там много? Пешка улетит в никуда).

3) Разрешить объединяться - другой геймплей, да и если есть ограничение на стак - проблема остается.

4) Делать перерасчет пути на каждом гексе.
Аноним 27/12/25 Суб 21:32:02 1066629 476
17668494369131.mp4 638Кб, 800x600, 00:00:09
800x600
Запись 2025-12-[...].mp4 885Кб, 740x588, 00:00:08
740x588
>>1066614
AStar поиск vs Новогодний поиск пути
Аноним 27/12/25 Суб 22:32:38 1066635 477
1766863958541.png 36Кб, 759x353
759x353
1766863958570.png 39Кб, 830x389
830x389
1766863958571.png 51Кб, 796x590
796x590
1766863958572.png 54Кб, 766x602
766x602
Сап, годач! Раз уж зашла такая тема, поясните, зачем нужны эти типы лэйаутов?
Аноним 27/12/25 Суб 23:15:42 1066644 478
HELP.JPEG 52Кб, 1200x666
1200x666
>>1066635
Ты теперь по каждому свойству в API Godot будешь пост создавать?
Аноним 27/12/25 Суб 23:26:22 1066645 479
image.png 81Кб, 637x388
637x388
image.png 136Кб, 702x556
702x556
image.png 117Кб, 638x622
638x622
image.png 117Кб, 753x497
753x497
Аноним 27/12/25 Суб 23:30:55 1066647 480
>>1066644
Только если ты будешь так же разукрашивать ответы стрелочками :3 зачем еще тред нужен?
Аноним 28/12/25 Вск 00:45:04 1066656 481
image.png 18Кб, 389x230
389x230
image.png 1Кб, 58x37
58x37
Будьте осторожны в использование vector2i в качестве ключей словаря (в оч больших значениях ~250.000 начинает коллизия хэшей).
Аноним 28/12/25 Вск 01:02:54 1066660 482
image.png 22Кб, 367x314
367x314
image.png 1Кб, 60x40
60x40
>>1066656
Лол, оказывается это функция hash() серит.
Аноним 28/12/25 Вск 01:06:53 1066663 483
dictionary.png 8Кб, 356x275
356x275
>>1066656
>dict[hash(Vector2i(x, y))]
Зачем ты вызываешь hash()? Можно намного проще и быстрее:
>dict[Vector2i(x, y)]
Также рекомендую использовать типизацию словарей вот так:
>var dict: Dictionary[Vector2i, int]
Тогда ключом сможет быть лишь Vector2i, а значением - int.

>>1066660
Привыкай использовать строгую типизацию.
Аноним 28/12/25 Вск 01:13:27 1066667 484
>>1066663
Я думал это встроенная функция по типу как str() вместо obj.toString(), так и hash() вместо obj.hashCode()
А оказалось это вообще хер пойми что (отдельная фигня).
Аноним 28/12/25 Вск 01:29:37 1066673 485
>>1066663
>Привыкай использовать строгую типизацию.
Какой же ты токсичный. Я говорю про коллизию хэшей, а он говорит учись типы использовать.

Ты в курсе что ключи в словаре это не векторы/строки, а хэш код этих типов? Наверное человек, который понимает как устроена хэш-таблица - как-то разбирается уже типизации?
Аноним 28/12/25 Вск 01:45:36 1066676 486
>>1066667
>А оказалось это вообще хер пойми что (отдельная фигня).
Это для хэширования данных перед сохранением на диск, например, или для интернета...

>>1066673
>Я говорю про коллизию хэшей
Коллизия происходит в hash() и ты её суёшь в Dictionary. Т.е. это только твоя ошибка.

>человек, который понимает как устроена хэш-таблица
Кто, я? Я понимаю. Хэш-таблица использует хэши только для ускорения доступа к значениям - чтобы отдавать значения по индексу, как обычный массив. Если при создании нового ключа хэш-таблица замечает коллизию хэшей, она использует специальный алгоритм для исправления коллизии перед сохранением новой записи - и этот алгоритм является самым главным элементом любой хэш-таблицы, без которого она бесполезна (из-за коллизий). То есть хэш-таблица по определению не подвержена коллизиям, если ты используешь её по прямому назначению (т.е. отдаёшь ей свои реальные ключи, а не какие-то хэши этих ключей). Но ты её использовал неправильно, потому что ты не разбираешься в хэш-таблицах.

>ключи в словаре это не векторы/строки, а хэш код этих типов
Нет, ключи - это вообще любой Variant. Хэши - это механизм ускорения доступа по ключам. Отправляешь совершенно любой Variant и получаешь связанное с ним значение - и получаешь быстро благодаря алгоритму хэширования. Чем больше коллизий, тем медленнее скорость доступа, но при этом все данные надёжно доступны по заданному ключу, потому что используются именно эти ключи, а не их хэши. Надеюсь, понял?

>как-то разбирается уже типизации
Если бы ты разбирался в типизации, ты бы уже юзал Dictionary[Vector2i, int] и не парился...

>Какой же ты токсичный.
Я просто пытаюсь помочь понять и разобраться новичкам в треде.
Аноним 28/12/25 Вск 02:00:42 1066679 487
2025.12.27.mp4 926Кб, 640x360, 00:00:29
640x360
feel godot.jpg 64Кб, 620x572
620x572
>>1063666 (OP)
Знаете чувство, когда добавил свои иконки к своим классам?

>>1066539
Как, по-твоему, должно работать такое меню с анимациями?
Аноним 28/12/25 Вск 02:26:03 1066681 488
>>1066676
>Кто, я? Я понимаю.
И пошла ставка из нейронки.

>Если бы ты разбирался в типизации, ты бы уже юзал Dictionary[Vector2i, int] и не парился...
Как же это тупо звучит. Вы от нейронок тупеете. Ты же понимаешь что по итогу никакого вектора в словаре не лежит?
Знаешь что в реале лежит в качестве ключа? Вот этот хэш:
https://github.com/godotengine/godot/blob/63227bbc8ae5300319f14f8253c8158b846f355b/core/math/vector2i.h#L151

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

Было бы классно если бы ты трипкодом подписывался, мы бы не спорили больше никогда
Аноним 28/12/25 Вск 03:12:17 1066682 489
>>1066679
Красивое. Анимация всплытия это твинками?
Аноним 28/12/25 Вск 03:20:02 1066683 490
Logic Reasoning.jpg 151Кб, 1061x795
1061x795
>>1066681
>И пошла ставка из нейронки.
Это аргумент к человеку, знаешь такой? Нет, мне не нужно спрашивать нейронку для ответов тебе.

>Ты же понимаешь что по итогу никакого вектора в словаре не лежит?
>Знаешь что в реале лежит в качестве ключа? Вот этот хэш
Ты решил позориться до конца? Лучше изучи код самой хэш-таблицы, которую ты якобы "понимаешь":
https://github.com/godotengine/godot/blob/63227bbc8ae5300319f14f8253c8158b846f355b/core/templates/hash_map.h
Тебе там даже в комментариях разработчики Godot простым языком объяснили, как оно работает:
>A HashMap implementation that uses open addressing with Robin Hood hashing. Robin Hood hashing swaps out entries that have a smaller probing distance than the to-be-inserted entry, that evens out the average probing distance and enables faster lookups. Backward shift deletion is employed to further improve the performance and to avoid infinite loops in rare cases.
>Keys and values are stored in a double linked list by insertion order. This has a slight performance overhead on lookup, which can be mostly compensated using a paged allocator if required.
>The assignment operator copy the pairs from one map to the other.
А потом ещё почитай статью в Википедии, если не веришь моим словам и словам разработчиков:
https://ru.wikipedia.org/wiki/Хеш-таблица
>Поэтому механизм разрешения коллизий — важная составляющая любой хеш-таблицы.
https://en.wikipedia.org/wiki/Hash_table
>Hash collisions, where the hash function generates the same index for more than one key, therefore typically must be accommodated in some way.
>Storing the key alongside the value ensures that lookups can verify the key at the index to retrieve the correct value, even in the presence of collisions.
Конкретно в Godot хэш-таблица хранит пары ключ-значение - HashMapElement<TKey, TValue>.

>Было бы классно если бы ты трипкодом подписывался
Опять аргумент к человеку. У тебя снова аргументы кончились? Ты понимаешь, как низко ты падаешь?
Аноним 28/12/25 Вск 04:59:25 1066686 491
>>1066683
Метаморфоза. Сначала не понимает как работает хэш таблица, рекомендует типизацией лечить, НО спустя два часа приходит и закидывает ссылками с вики, да еще запутался, одну кинул в ру-переводе (бывает, я тоже в ру читаю, не переживай).
Поздравляю с просвещением, оказывается хэш таблице похер на тип вообще? Главное чтобы сам объект мог нести в себе информацию хэше? Да? Что хэш не берётся из воздуха. Ты же это понял, надеюсь?

Я сначала хотел задать, почему вектор вычисляет свой хэш по мурмур3, если хэш-таблица прекрасно справляется с коллизией, но увы нейронка спокойно на это отвечает.

>Конкретно в Godot хэш-таблица хранит пары ключ-значение - HashMapElement<TKey, TValue>.
>Ты решил позориться до конца?
Ниче что это только единичный бакет HashMap? У тебя буквально ниже настоящий класс. Че, трудно читать сорцы без нейронки? Списки бакетов и их распределение и есть хэш-таблица.
Кто еще позориться.

Зачем ты это делаешь? Зачем ты пытаешься отвечать не зная тем? Решение коллизий в хэш-таблице это затычка от потери данных, которая роняет производительность, именно поэтому вся задача по коллизии ложится на типы. Как это было реализовано в GDSript, который соткан на коленке, у которого есть кривая функция hash(), которая вводит в заблуждение - было вообще непонятно. Но теперь мы знаем что благодаря мурмуру можно держать Vector2i в качестве ключа в любых размерах "i32". И МОЖНО ДАЖЕ НЕ ТИПИЗИРОВАТЬ - хэштаблице насрать на это (не насрать только С++ коду, который будет разворачивать Variant из value)

Можешь не отвечать, ты победил и ты лучший.
Аноним 28/12/25 Вск 08:51:34 1066693 492
1766901095370.png 419Кб, 1280x720
1280x720
Эсли у вас коллизии кешей, просто используйте CollisionShape!
Роутер 28/12/25 Вск 10:47:26 1066701 493
>>1066656
Я вообще обхожусь математикой и массивом:

arr: Array[int] = []
arr.resize(width height)
for (x in range(width)):
....for (y in range(height):
........arr[x + y
width] = 0
Роутер 28/12/25 Вск 10:55:08 1066703 494
>>1066701
Тьфу... звёзды пожрало. Тогда будут апострофы(')

arr: Array[int] = []
arr.resize(width ' height)
for x in range(width):
....for y in range(height):
........arr[x + y ' width] = 0
Аноним 28/12/25 Вск 12:01:40 1066705 495
>>1066703
Это не апострофы, это ковычки-синглтоны.
Аноним 28/12/25 Вск 13:49:33 1066711 496
>>1066686
>>1066701
Я ошибся и не правильно сказал, а ламер зацепился за слово. Ну хоть просветился.

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

Вчера мы узнали что отсебятины у них в коде нет и там все норм (как минимум у Vector2i нормальная и быстрая хэш-функция)

Так что можно смело использовать сложные типы данных в качестве ключей, сложность будет держаться на уровне O(1) (ассоциативные массивы очень эффективны).
Аноним 28/12/25 Вск 14:29:43 1066712 497
Я бы еще поспорил за статическую типизацию, которой нет. Многие воспринимаю хинты типов как настоящую статическую типизацию (в статических языках). Даже документация вводит в заблуждение, называя хинтинг статической типизацией.

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

нытье
Вместо того чтобы сделать JIT, они проводят замеры как функция запускается быстрее на 75% быстрее. Спасибо за 100 наносекунд, но за типизацию мы бы хотели увидеть сравните уже с С++.

PS А вот взяли бы шарпы не пришлось бы страдать и из говна конфетку делать. (Да даже бы V8 взяли, уже получили бы ультра производительность и у людей был бы typescript)

не буду спорить, просто поныл
Аноним 28/12/25 Вск 14:46:14 1066715 498
>>1066712
>Вместо того чтобы сделать JIT
Над jit работают
>А вот взяли бы шарпы
В данный момент шарпа нет в вебе потому что блазоровский компилятор - это ебучий пасынок который не умеет собираться в длл и ради него приходится весь движок превращать в библиотеку, чтобы эта говнина заработала. Вот наглядно ответ почему шарп никогда не займет место гдс. Гдс любят, у него есть мейнтейнеры и полная любовь с с++ ядром, какой бы говниной он не был сам по себе.
Аноним 28/12/25 Вск 15:14:22 1066721 499
image.png 600Кб, 860x812
860x812
Аноним 28/12/25 Вск 15:31:08 1066722 500
>>1066721
Склонен верить поскольку слова не мои, а одного из мейнтейнеров гдс
Аноним 28/12/25 Вск 18:08:20 1066743 501
Нафлудили уже 500
Аноним 28/12/25 Вск 18:20:06 1066747 502
>>1066743
Один из самых живых тредов, юнити за неделю максимум пукнет пост. Даже детвора с движкосрача не дотягивают (экзамены перед каникулами, с понимаем).
Аноним 28/12/25 Вск 18:20:10 1066748 503
Спасайте парни - персонаж двигается даж когда кнопку отпусакешь, притом что velocity 0.0 стоит
Аноним 28/12/25 Вск 18:28:39 1066750 504
>>1066748
Телепатией сложно, ты блокируешь третью чакру, поэтому давай код (только не копипастом сюда, хотя бы картинкой или хост-тест-сервисом, хз может сюда https://gdscript-online.github.io/)
Аноним 28/12/25 Вск 18:28:52 1066751 505
>>1066748
Спасаю. При отпускании кнопки создавай вокруг него коллизии, так он не будет двигаться

>>1066747
Наверное
Аноним 28/12/25 Вск 18:38:44 1066756 506
>>1066750
ну вот кусок кода за это отвечающий - func process_physics(delta: float) -> void:
# ДВИЖЕНИЕ - РАБОТАЕТ ВСЕГДА (кроме некоторых состояний)
if not stunned and currentState != state.BOUNCING:
var dir = 0

# Ключевое изменение: правильно определяем момент отпускания джойстика
var joystick_just_released = joystick_was_active and not joystick_active

# Движение работает если джойстик активен И имеет горизонтальную составляющую
# НО: если мы заряжаем прыжок, ограничиваем горизонтальное движение
if joystick_active and abs(joystick_direction.x) > joystick_deadzone:
if is_charging_jump:
# Во время зарядки движение замедлено
dir = sign(joystick_direction.x) 0.3
else:
dir = sign(joystick_direction.x)

# Используем текущую скорость с учётом апгрейдов
var current_speed = moveSpeed
speed_multiplier

if dir != 0:
# ЕСТЬ ВВОД - ДВИГАЕМСЯ
var target_speed = dir current_speed
if not grounded:
target_speed
= jumpHMultiplier # В воздухе быстрее

if onIce and grounded:
# На льду: плавное ускорение/замедление
var ice_speed = target_speed moveSpeedIceMultiplier
velocity.x = lerp(velocity.x, ice_speed, iceInertia)
else:
# На обычной поверхности: мгновенное изменение скорости
velocity.x = target_speed

facing_right = (dir > 0)
else:
# НЕТ ВВОДА - ОСТАНОВКА
if joystick_just_released:
# Джойстик ТОЛЬКО ЧТО отпущен - мгновенная остановка
velocity.x = 0.0
print("Джойстик отпущен - мгновенная остановка")
elif onIce and grounded:
# На льду и джойстик просто не двигается - плавное замедление
velocity.x = lerp(velocity.x, 0.0, iceInertia)

# Если скорость стала очень маленькой, обнуляем её
if abs(velocity.x) < 5.0:
velocity.x = 0.0
else:
# На обычной поверхности и джойстик просто не двигается - мгновенная остановка
velocity.x = 0.0

# Гравитация
if not is_on_floor():
velocity.y += gravity
delta

# Отскоки
if bounce_timer > 0:
bounce_timer -= delta
if bounce_timer <= 0 and currentState == state.BOUNCING:
currentState = state.FALLING
Аноним 28/12/25 Вск 19:07:21 1066761 507
>>1066756
Просили же форматированный код, сам читай это
Аноним 28/12/25 Вск 19:13:36 1066763 508
>>1066761
У меня ссылка даже не открывается
Аноним 28/12/25 Вск 19:23:40 1066768 509
Аноним 28/12/25 Вск 19:30:26 1066770 510
Аноним 28/12/25 Вск 19:54:13 1066774 511
image.png 439Кб, 598x432
598x432
Аноним 28/12/25 Вск 19:55:42 1066775 512
гений скопировал свой пост без отстутпов и со съедеными умножениями в пастбин
Аноним 28/12/25 Вск 20:24:02 1066779 513
>>1066763
Там к ссылке слеш и скобочка в конце прилипли.

>>1066679
>Как, по-твоему, должно работать такое меню с анимациями?
Не понял вопроса. Вариантов куча, в целом как тебе нравится, так и должно. Не?

Хм, пока я работал на работе, вы тут на хэши переключили срачик, ок.

>>1066619
>Ты избыточно жертвуешь удобством и надёжностью ради "гибкости" в будущем.
Я ничем не жертвую, мне супер удобно. И гибкость у меня не в будущем, а здесь и сейчас.
>Это ECS головного мозга.
Только без E и без S, лол.
>В ООП
На ООП свет клином не сошёлся.

Ты относишься к дереву так, будто это иерархия в ООП. Но это не так. Дерево состоит из нод, каждая из которых самостоятельна, и связи/зависимости между ними выстраивает разработчик сам. Никто не обязывает делать это подобно ООП.

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

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

>Не нужно ей ничего знать. У неё два состояния:
Да. Именно. В этом и заключается всё "знание".

>мозги осьминога не смогут управиться с телом краба, а мозги краба не смогут управиться с телом осьминога
Ты этого не знаешь наверняка. Я думаю, что смогут, потому что нейропластичность. Шо то нейронка, шо это. Кажется, даже попадалась инфа про какие-то такие эксперименты, но не схоронил, так ччто стопроцентно утверждать не буду.
Аноним 28/12/25 Вск 20:38:30 1066783 514
>>1066721
Насколько я понимаю, написание компилятора (не важно jit или aot) - задачка повышенной сложности, которая к тому же не особо пересекается с написанием графического движка. Нужно глубоко знать теорию компиляции и шарить в ассемблере. Сверху ещё и заставить его работать на всех поддерживаемых платформах. Сверху усложнение в виде jitовости.
Кароч это СИЛЬНО сложнее, чем интерпретируемый язык. Надо быть спецом уровня Ритчи.
Аноним # OP 28/12/25 Вск 21:08:35 1066790 515
1766945314747.png 274Кб, 416x614
416x614
Перекатите кто-нибудь, у меня важные дела.
Аноним 28/12/25 Вск 21:11:59 1066791 516
image.png 10Кб, 225x225
225x225
>>1066783
>Кароч это СИЛЬНО сложнее, чем интерпретируемый язык. Надо быть спецом уровня Ритчи.
Или взять готовое
Аноним 28/12/25 Вск 21:12:42 1066792 517
>>1066790
Зачем? В /pr до 1000 гадят
Аноним 28/12/25 Вск 21:26:43 1066798 518
>>1066792
Другой бамплимит

>>1066790
Какие у тебя дела могут быть 28 декабря?
Аноним 28/12/25 Вск 22:06:29 1066806 519
Аноним 28/12/25 Вск 23:22:31 1066821 520
>>1066756
># Ключевое изменение: правильно определяем момент отпускания джойстика
>>1066748
>Спасайте парни
Ты нейронкой код нагенерил, а теперь побежал к нам этот говнокод разгребать?

>персонаж двигается даж когда кнопку отпусакешь
Я в твоём коде не вижу вызова move_and_slide(). Без него velocity ничего не делает.

Принцип работы с CharacterBody(2D/3D):
1. Меняем velocity как хотим.
2. Вызываем move_and_slide().
После вызова move_and_slide() в velocity будет обновленное значение.

По джойстику, читай официальную документацию вместо нейронки:
https://docs.godotengine.org/en/stable/tutorials/inputs/index.html
Сейчас у тебя там какой-то совершенно ненужный велосипед.

Лучше пройди несколько туториалов, прежде чем пытаться что-то делать.
Аноним 28/12/25 Вск 23:33:52 1066823 521
>>1066712
>гдскрипт все еще динамический язык и хинты это не исправляют.
И это хорошо, потому что на динамическом проще прототипировать новые игры.
>за типизацию мы бы хотели увидеть сравните уже с С++
Если тебе нужна скорость C++, то и пиши на C++, а не на каком-то другом языке.
>А вот взяли бы шарпы не пришлось бы страдать
Так они и поддерживаются для таких, как ты. Только таких как ты меньшинство.
>V8 взяли, уже получили бы ультра производительность
Тогда почему веб-браузеры всегда тормозят? Когда отключаю JS - всё летает.
>и у людей был бы typescript
Это огромный костыль-заплатка поверх кучи тупого легаси в ECMAScript.

>>1066783
>написание компилятора - задачка повышенной сложности
На самом деле нет, просто разрабы Godot долго не могли договориться...

>>1066791
>Или взять готовое
Ну так бери, чего ты ждёшь? Потом отпишешься об ощущениях:
https://github.com/godotjs/GodotJS
>Add TypeScript/JavaScript Support for Godot 4.x with v8...
Аноним 29/12/25 Пнд 00:07:29 1066829 522
>>1066798
>Другой бамплимит
Тот же, всем насрать.

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

>>1066823
>Тогда почему веб-браузеры всегда тормозят? Когда отключаю JS - всё летает.
Потому же что и windows 2000 хватало 128 мегабайт оперативной памяти.

>>1066823
>На самом деле нет, просто разрабы Godot долго не могли договориться...
Не могли договориться кто будет писать :).

>>1066823
>Ну так бери, чего ты ждёшь? Потом отпишешься об ощущениях:
Ожидаемо что все эти языки будут гражданином второго сорта как и сишарп
Аноним 29/12/25 Пнд 00:14:35 1066833 523
>>1066823
>Это огромный костыль-заплатка поверх кучи тупого легаси в ECMAScript.
Во-первых не при сравнении с гдскриптом такое говорить. Во-вторых легаси только в браузерном апи, в самом жс нечему легаси быть, за исключением мелочей типа typeof null == "object" Браузерное апи живет и развивается от жс отдельно
Аноним 29/12/25 Пнд 00:18:14 1066834 524
>>1066823
>https://github.com/godotjs/GodotJS
А это не расширение, а форк движка? Ну тут есть проблема, насколько он не отстает и что будет когда детворе надоест? Мне потом ts подтереться?
Аноним 29/12/25 Пнд 00:20:11 1066835 525
>>1066834
Будь мужиком. Поддерживай сам и делись с другими. Ну и маловероятно что некому будет поддерживать, потому что сейчас жсеров как собак бездомных
Аноним 29/12/25 Пнд 00:30:15 1066838 526
image.png 3Кб, 322x80
322x80
image.png 5Кб, 1034x40
1034x40
Аноним 29/12/25 Пнд 00:31:50 1066839 527
Кстати, раньше юнити был на js?
Аноним 29/12/25 Пнд 00:33:53 1066840 528
>>1066838
так пиши на тайпскрипте
Аноним 29/12/25 Пнд 00:37:23 1066841 529
>>1066840
Ну а второй пик. Явный импорт во всех взрослых языках. жава сишорп тайпскрипт даже в питухоне. Толко в детских языках типа голанга и дарта хуй знаешь что импортируешь
Аноним 29/12/25 Пнд 00:48:23 1066842 530
>>1066840
Это был ts, лень все смотреть, это видимо касается только экспорта (у js нет int типа, только number и bigInt)

>>1066841
>Ну а второй пик. Явный импорт во всех взрослых языках. жава сишорп тайпскрипт даже в питухоне.
Если по честному да, тут просто автоимпортом вставлялось в момент кодинга.
С одной стороны модульность, с другой можно было базовые классы добавить в глобальное пространство.
Аноним 29/12/25 Пнд 01:18:32 1066844 531
>>1066829
>чтобы не ловить вектор, там где инт нужен был
Там, где скомпилированный код крашится с непонятной ошибкой доступа к недоступной области памяти совершенно без намёков на то, что пошло не так, и заставляет перезапускать всю игру с чистого листа (а в большом проекте это может занимать минуты), интерпретируемый сценарный язык позволяет проигнорировать подобные мелочи и нестись на всех порах через любые некорректные команды как скоростной поезд, перезагружая участки кода игры прямо в процессе её выполнения без компиляции.

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

>Потому же что и windows 2000 хватало 128 мегабайт
Почему-то на GDScript не тормозит код, который тормозит на JS в браузере на том же компьютере. Вот бывает напишу от балды какой-то говнокод, который я даже не рассчитываю выполнить с первой же попытки, а он раз - и не просто запускается, но и работает быстро и чётко. Как так? С каждым разом убеждаюсь, что ставка на будущее Godot/GDScript - единственно правильная (хотя бы в опенсурсе). А игрушки в веб-браузере всегда были извращением и чем-то вроде репостов в соцсетях (постыдное).

>все эти языки будут гражданином второго сорта
Это естественно - ведь GDScript делается для Godot, а остальные языки делались не для Godot.

>>1066834
>А это не расширение, а форк движка?
Не форк, а модуль. Модуль подключается в процессе сборки оригинальной (совместимой) версии движка из исходников. Под "форком Godot" обычно подразумевают такие сборки, которые меняют что-то в ядре движка, делая его несовместимым с оригинальными исходниками. То есть ты можешь подключить несколько сторонних модулей в оригинальную версию и они должны будут без проблем работать, но в случае "форка Godot" совместимость со сторонними модулями не гарантирована.

>>1066838
Вот поэтому мы все и сидим на GDScript, в котором такие бойлерплейты писать не нужно...
Аноним 29/12/25 Пнд 01:20:40 1066845 532
image.png 573Кб, 1290x723
1290x723
Я зашел сказать вам - годот классный.
Аноним 29/12/25 Пнд 01:34:43 1066848 533
>>1066844
>Почему-то на GDScript не тормозит код, который тормозит на JS в браузере на том же компьютере.
Жс один из самых оптимизированых скриптовых языком. Только это зависит от рантайма. V8 очень быстрый. Ты сравниваешь инженеров гугла со школотой делающй годот
Аноним 29/12/25 Пнд 01:59:56 1066849 534
Аноним 29/12/25 Пнд 02:26:30 1066850 535
2025.12.28.mp4 2823Кб, 640x360, 00:00:57
640x360
мем.jpg 92Кб, 990x1020
990x1020
>>1066679
Пофиксил анимации и раскрытие панельки с информацией.

>>1066682
>Красивое. Анимация всплытия это твинками?
Спасибо. Конечно - без Tween было бы намного сложнее.

>>1066779
>Не понял вопроса. Вариантов куча
Ну, было интересно твоё мнение: "call down, signal up", наоборот, или как-то ещё?

>в целом как тебе нравится, так и должно
Я уже много вариантов перебрал, всё время что-то мешало. Сейчас вроде получше.

>Никто не обязывает делать это подобно ООП.
Не обязывает, но в таких цепочках иерархии что-то точно есть. У меня сейчас так:

0) Этот уровень пока не существует, но планируется: нужно абстрагировать заполнение контейнера с тегами. Каждый тег будет иметь свой цвет, надпись и, возможно, иконку. Сначала я думал сделать "один предмет = один тип", но мне захотелось сделать так, что один предмет может иметь несколько тегов-свойств, и эти теги нужно показывать игроку в какой-то стандартизированной (узнаваемой с первого взгляда) форме - и не только в этом меню (столы для крафта, скорее всего, будут принимать предметы по тегам). Так что получается капсула-тег и контейнер с такими капсулами, принимающий массив тегов.

1) Меню для просмотра информации о предмете. Это весьма сложная композиция из стандартных Control-нод, главный скрипт которой принимает на вход ресурс предмета, и обновляет состояние своих потомков в соответствии с полями этого ресурса. Его можно свернуть в иконку и развернуть на весь размер. Я долго раздумывал о том, стоит ли делать это меню единственным на весь инвентарь или нет, и в итоге решил, что пока игра не начнёт тормозить из-за огромного числа таких меню - буду размножать их... Размножать эти меню легко, а единственное меню может оказаться менее отзывчивым в плане быстрого переключения в круглом меню. С другой стороны, создание десятков таких менюшек на каждое открытие внешнего контейнера было бы слишком затратно...

2) Обобщённый RadialMenuItem, который я уже несколько раз делал и удалял в разных вариациях, т.к. не мог определиться, нужен он мне или нет. Сейчас склоняюсь к тому, что нужен. Буквально несколько часов назад перенёс в его код анимацию перемещения и фокусировки, т.к. этот объект способен прыгать между разными круглыми меню и поэтому должен самостоятельно руководить своими анимациями. "Меню просмотра информации о предмете" наследуется от него... хотя, это вроде как не обязательно.

3) Собственно RadialMenu, который следит за вхождением новых RadialMenuItem и удалением имеющихся, задаёт им позиции через их методы, рисует круг, отслеживает положение мышки и сигналит наружу о произошедших событиях ввода. На этом уровне я лишь недавно смог достичь гармонии, выбросив кучу лишнего хлама. Раньше я пытался нагрузить этот уровень множеством состояний, функций, "фишек" меню - всё это было большой ошибкой - данным состояниям и функциям самое место на следующем уровне абстракции. Сейчас RadialMenu просто делает свою работу, где бы они ни был размещён, какого бы размера он ни был, и т.д. Хотя ощущается как даунгрейд, к сожалению...

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

5) Потом инвентарь подключается к сцене игрока, где сейчас полнейший хаос и нужно рефакторить всё... Сцена игрока пока что уникальна и эти меню нужны только для неё, но, наверное, было бы лучше их абстрагировать... Короче, всё сложно. Но менюшка точно ничего не знает об игроке - это игрок управляет менюшкой, т.е. будет натравливать её на конкретный второй/внешний инвентарь для операций обмена. Тестировать пока не на чём, но я планирую нацепить первый внешний инвентарь на сундуки.

В общем... Мне кажется, я приблизился к идеальной схеме, разбросав все обязанности по независимым слоям абстракции так, чтобы нижние слои управлялись верхними слоями, о которых они ничего не знают и знать не должны. До этого я уже несколько раз пытался сделать круглое меню, каждый раз наматываясь на хаотичный клубок взаимосвязей, а сейчас его пока что нет: приказы идут строго сверху вниз, отклики - снизу вверх.

Но, может, я что-то упускаю и нужно было организовывать по-другому?.. Вот ты тут расписывал, что тебе удобнее делать полностью наоборот - приказами снизу вверх и откликами сверху вниз - у меня такое в голове вообще не укладывается, если честно. Может, потом снова буду вынужден переделывать все эти меню с нуля - кто знает...
Роутер 29/12/25 Пнд 02:44:43 1066852 536
>>1066849
Игор нет?

Отфильтруй сначала весь шлак из движков и сравни потом. Подели на разность 2026(чего откладывать) и года создания движка. Выходящие цифры - это частота создания хороших(Или что останется после твоего фильтра шлака) за время существования. Примечание: усредняется значения начала разработки, когда о каком-либо движке никто ничего не знал и высшего пика популярности, приблизительно сегодня. Или ты считаешь за игры только крупные 3D-проекты, которые занимают четверть диска твоего компа?
Аноним 29/12/25 Пнд 02:56:20 1066853 537
>>1066852
"Игорь тонет" - это мем такой, не нужно всерьёз на него отвечать.
Аноним 29/12/25 Пнд 03:16:22 1066855 538
17645087912930.jpg 278Кб, 800x1174
800x1174
>>1066849
Какие тут игры. Пик, мой день.
Аноним 29/12/25 Пнд 03:31:50 1066856 539
>>1066848
Этот прав, у js иногда выходят такие показатели, что выглядит как волшебство (типа как вообще возможно такое на динамикодресне). Но реакто-вундеркинды все равно съели весь проц и память.

>>1066844
Но я согласен что хороший хотрелоад важнее этого всего. Хороший хотрелоад в глубокой позиции буквально "экономит тестовые сцены" (которые пришлось бы создавать при других условиях, а так налету потестил, подергал, понюхал, полизал).
ПЕРЕКОТ Аноним 29/12/25 Пнд 08:32:23 1066865 540
Аноним 29/12/25 Пнд 08:40:17 1066866 541
>>1066850
>Ну, было интересно твоё мнение: "call down, signal up", наоборот, или как-то ещё?
Так мнение таково: если мы не знаем, кто будет отвечать на вызов, то сигнал; в противном случае калл. А даун там или ап - не важно, этих понятий не существует на уровне отдельной ноды.

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

>>1066850
>Но, может, я что-то упускаю и нужно было организовывать по-другому?.. Вот ты тут расписывал, что тебе удобнее делать полностью наоборот - приказами снизу вверх и откликами сверху вниз - у меня такое в голове вообще не укладывается, если честно.
Бро. Ты это ты, я это я. Если для тебя твой подход работает - значит ты всё правильно делаешь. У любого подхода есть свои плюсы и минусы, единственно правильного не существует.

Увидимся в перекате.

У меня выходной, я выспался и с утра сел делать игру. Вот.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов