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

Gamedev

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 504 123 89
Godot #44 Аноним # OP 06/01/24 Суб 11:28:41 926070 1
1704529721509.png 1459Кб, 1024x1024
1024x1024
Аноним 06/01/24 Суб 11:32:45 926072 2
>>926069 →
Не, ну это то понятно. Всегда надо ставить паузу на время сохранения.
Аноним 06/01/24 Суб 11:37:34 926073 3
>>926072
Ну, в таких играх как "костры-бомжи-души", например, пауза не предусмотрена по геймплею, поэтому на такой случай, можно реализовать фишку с правами доступа. Один дополнительный энум и дополнительный свич{} в функциях.
Аноним 06/01/24 Суб 12:15:42 926074 4
4 года назад, когда я был молодой и глупый, и ещё участвовал в ТВГ, я делая сайвы-лоады, пришёл к выводу, что это настолько фундаментальная система, что её нужно делать ДО начала работ над основной игрой.
Почему?
Потому что действующий и отлаженный механизм сохранений/загрузок подавляет необходимость в "магических числах". Обычно при быстром девелопе мы как делаем? "Нууу, пусть скорость будет 500, а высота прыжка 30, потом переделаю..."
А с отлаженным механизмом, мы можем удобно и красиво вписать:
> var move_speed = SLMGR.get_data(self, 500)
> var jump_speed = SLMGR.get_data(self, -30)
Здесь SLMGR (Save Load Manager) - это тот самый словарь-синглтон, и первым параметром приходит инстанс-нода, из которой при желании можно получить уникальное строковое имя и искать в базе данных как ключ. Второй параметр - дефолтное значение, которое вернётся, если не найдено в базе.

Магические числа вроде как и остались, а вроде как они уже и красиво обёрнуты в метод получения данных, и при необходимости уже файл данных может быть проанализирован отдельно, и скорректирован для задания начальных значений при старте новой игры, и не придётся лезть в скрипты, чтобы переделать где-то в глубине скриптов 500 на 450.
Мы можем внутри SLMGR установить состояние при котором он будет создавать все отсутствующие ключи, при обращениях к нему, и при запуске проекта получить огромный стартовый файл со всеми магическими числами ото всех объектов. Постоянно это делать не стоит. Из этого файла отбираем нужные ключи, правим и уже его грузим при старте игры как эталон начального состояния игровой сессии. Так можно легко реализовать уровни сложности, например, заложив в игру несколько стартовых эталонов с разными дефолтными значениями и пусть игрок выбирает из них перед стартом.
Аноним 06/01/24 Суб 12:19:38 926075 5
>>926074
> > var move_speed = SLMGR.get_data(self, move_speed, 500)
> > var jump_speed = SLMGR.get_data(self, jump_speed, -30)

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

Быстрофикс.
Аноним 06/01/24 Суб 15:55:48 926095 6
Делайте игры, игры сами себя не сделают. Год пройдет и не заметите, а игру так и не сделали.
Аноним 06/01/24 Суб 16:16:40 926097 7
>>926095
Да делаю я делаю!
Аноним 06/01/24 Суб 16:32:30 926102 8
Аноним 06/01/24 Суб 17:34:48 926116 9
>>926102
Нихуя полезного, автор похож на учителя информатики, обесняет так же хуёво.
Аноним 06/01/24 Суб 17:35:18 926117 10
>>926116
Старые видосы Пети Сканера - и то полезнее.
Аноним 07/01/24 Вск 00:05:21 926174 11
>>926116
новичкам норм для вката
Аноним 07/01/24 Вск 13:30:13 926225 12
yikshd13uxac1.gif 13447Кб, 1134x629
1134x629
Аноним 07/01/24 Вск 13:34:53 926227 13
image.png 3Кб, 234x315
234x315
>>926225
Как он сделал просвечивание персонажа через стены?
Аноним 07/01/24 Вск 14:13:41 926230 14
>>926174
Я в этом вопросе последовательный сторонник Романа Сакутина: он говорил что так называемый "новичковый код" - это попытка безруких инфоцыган замаскировать свою безрукость. Грамотный, красивый, эффективный код именно новички поймут намного лучше.

Я не спорю, Сакутин сам тоже инфоцыганин, ни в коем случае не смотрите его. Пердаки сгорят нахуй. Я предупредил:
https://www.youtube.com/watch?v=RBk49B0lFaQ
Аноним 07/01/24 Вск 15:37:23 926238 15
>>926227
Прозрачный спрайт персонажа на самом верхнем слое, в дополнение к основному или что-то вроде того.
Аноним 08/01/24 Пнд 04:48:33 926331 16
image.png 96Кб, 1920x980
1920x980
image.png 12Кб, 899x625
899x625
Новогодние праздники я посвятил фреймворку для шестиугольных карт.
Всё работает в нативной для хексов координатной системе:
q, r, s, где q + r + s == 0
Сделал рендеринг с нуля и всякие helper-классы.
Возможно когда-то оформлю это в полноценный аддон, потому что существующие решения меня не устраивают.

Сделал на этой основе простенькую генерацию мира в нативных для хексов координатах.

Ссылка для тех кто любит копаться в неоформленных проектах: https://github.com/1ort/hexgrid/
Аноним 08/01/24 Пнд 11:09:50 926339 17
>>926331
>1
Заверни эту на сферу, будет круто.
Аноним 08/01/24 Пнд 11:59:22 926346 18
>>926339
Да, у меня была такая мысль, только вот сферу невозможно замостить полностью только шестиугольниками. Понадобится, ЕМНИП 12 пятиугольников дополнительно.
Алсо есть вот такой вариант с псевдо-сферой: https://www.youtube.com/watch?v=mWIIy4eh6bE

Но тут мы имеем свои подводные в виде траблов со спрайтами.

Третий вариант - визуально оставить как есть, но добавить бесшовный wrapping по всем трём осям с возможностью сдвигать карту
Аноним 08/01/24 Пнд 12:45:43 926360 19
>>926346
> сферу невозможно замостить полностью только шестиугольниками
Видос не смотрел, может там про псевдосферу именно это говорится, что я напишу сейчас. Сферу можно получить "надуванием" куба. В годоте 3 в тайлмапе гексы получали сдвигом тайлмапа по рядам на половину длины. Всё остаётся квадратным, но полностью замощённая сфера - вуаля.
Аноним 08/01/24 Пнд 12:54:21 926364 20
>>926360
>Видос не смотрел
Там одного взгляда на превью достаточно чтобы понять что происходит
Аноним 08/01/24 Пнд 13:01:27 926365 21
Аноним 08/01/24 Пнд 20:28:19 926449 22
>>926365
> mirror.xyz/avsa.eth
Чота ссыкотно такое открывать. Похоже на фишинг. Зарепорчу-ка я тебя. АБУ узнает своих.
Аноним 08/01/24 Пнд 21:23:08 926462 23
1654744174363.png 457Кб, 1130x695
1130x695
>>926449
Судя по всему автор Web3- криптоанархист и в другом месте ее не постил. Понимаю твои опасения, вот скрин презентации, вроде бы тут вся суть. Остальное касается irl earth географии
Аноним 08/01/24 Пнд 23:28:30 926487 24
image.png 90Кб, 1889x966
1889x966
>>926331
Теперь я умею генерировать сколько угодно островов на глобальной карте. Также могу генерить и тайлы-океаны. Каждый остров может иметь свои настройки (Только я этого пока не реализовал)

Реквестирую идеи, что можно из этого сделать
Аноним 08/01/24 Пнд 23:38:23 926489 25
>926487
Это 2D? Добавь высоту. Камеру сбоку поставь. Сделай что-нибудь в духе цивилизации.
Аноним 08/01/24 Пнд 23:43:41 926491 26
>>926489
Это 2д, значение высоты у каждого гекса есть. Цвет определяется по матрице высота - влажность (или температура) путём наложения двух шумов.

Вопрос больше про геймплей был
Аноним 09/01/24 Втр 00:11:33 926494 27
>>926487
В будущем генератор планет
Аноним 09/01/24 Втр 13:26:01 926550 28
>>926487
> что можно из этого сделать
Вселенную-наоборот с Толщеходами. Очевидно же.
Сделой ассет-заготовку для хекс-ртс-игор. Выложи в ассетлиб. Получай донаты.
Аноним 09/01/24 Втр 13:27:44 926551 29
>>926491
> Вопрос больше про геймплей был
Идешь в АААА-тред >>605406 (OP) выбираешь подходящий кириллопост и реализуешь.
Аноним 09/01/24 Втр 13:39:55 926553 30
Что можно использовать для уникальной идентификации сцен? Нодпас не катит - он может меняться. Нода как таковая тоже меняется, если ее сохранить и загрузить обратно то у нее сменится ее внутренний айди и годот это считает уже другой нодой. Подошел бы некий UUID, но его, как я вижу, нет у сцен.
Аноним 09/01/24 Втр 13:50:10 926555 31
Аноним 09/01/24 Втр 14:00:31 926557 32
Аноним 09/01/24 Втр 14:00:34 926558 33
>>926555
Эта штука лишь реализует тип uuid. С тем же успехом можно просто рандомное число той же размерности использовать.

Мимокрок
Аноним 09/01/24 Втр 14:12:09 926561 34
>>926558
Тогда пусть генерирует уникальные айдишники на любом из онлайн-сервисов и вручную вписывает в свои сцены.
Аноним 09/01/24 Втр 16:54:40 926584 35
>>926487
>что можно из этого сделать
Сделай чтобы твое говно не тормозило на картах размером >100.
Аноним 09/01/24 Втр 17:55:04 926589 36
>>926584
100 чего, микромортов?
Аноним 09/01/24 Втр 18:05:41 926591 37
>>926584
>тормозило
Схуяли оно должно тормозить?
Ты репу открывал? Запускал?

Там нагрузка только в момент генерации.
Сами гексы отрисовываются ровно один раз.
Аноним 09/01/24 Втр 18:35:47 926595 38
>>926591
upd.
Оно действительно виснет нахуй при генерации больших карт.
Буду думать как оптимизировать генератор
Аноним 09/01/24 Втр 21:13:26 926645 39
>>926595
Ветку не читал, вбрасываю ответ чисто по этому посту.
>как оптимизировать генератор
Разбить генерацию на части. Выполнять каждый фрейм по чуть-чуть, ограничив время выполнения. Например, если в теле генератора есть циклы - за один вызов генерации выполнять только одну итерацию цикла. Опционально отрисовывать прогрессбаром готовность.

const FRAME_TIME = 10
func _process(delta: float) -> void:
far start_time = Time.get_ticks_msec()
while Time.get_ticks_msec() < start_time + FRAME_TIME:
_ var progress = generator.do_generation_part()
_ $progressbar.value = progress
_ if progress >= 1.0: # 1.0 это 100%
_ _ self.set_process(false)
_ _ end_generation()

Да, это не оптимизация. Но зато можно такую генерацию делать загрузочным экраном. И даже выполнять [псевдо]параллельно всему остальному, не мешая геймплею.
Аноним 09/01/24 Втр 21:14:15 926646 40
Аноним 09/01/24 Втр 21:23:05 926648 41
>>926645
Не до конца понимаю как замедление генерации поможет её ускорить, но твой тейк про разделение на чанки понятен.
Алсо годот нормально умеет в мультипоток, так что буду экспериментировать в эту сторону
Аноним 09/01/24 Втр 21:35:19 926651 42
1704825316965.png 136Кб, 778x789
778x789
1704825316988.png 903Кб, 728x728
728x728
>>926591
>>926331
Обесни, а чем стандартные гексы не устроили?
Аноним 09/01/24 Втр 21:38:01 926653 43
>>926651
Так он же карты сделал
Аноним 09/01/24 Втр 21:40:06 926655 44
>>926653
Я может слишком молод, и слишком много слушаю иностранную музыку, но... А в чём разница?
Аноним 09/01/24 Втр 21:41:34 926656 45
>>926655
Я имею ввиду, почему не сделать карты на основе стандартного тайлмапа? А не велосипедных классов.
Аноним 09/01/24 Втр 21:46:46 926657 46
image.png 60Кб, 745x536
745x536
>>926649
Потому что это это не гексы, а прямоугольники со сдвигом.
При таком представлении чтобы посчитать дистанцию, покрутить гекс вокруг другого/нарисовать кольцо или линию тебе либо придётся переводить их в трёхосевую систему координат, либо потеть и изобретать велосипед.


Можешь почитать это
https://www.redblobgames.com/grids/hexagons/#coordinates-comparison

>>926656
Я всё ещё могу использовать гекс тайлмапы для отрисовки
Аноним 09/01/24 Втр 21:49:06 926659 47
Аноним 09/01/24 Втр 21:52:19 926660 48
>>926657
То есть у тебя изначально трёхосёвая система координат?
Аноним 09/01/24 Втр 21:54:21 926661 49
>>926660
Всё так. И все вычисления проводятся в ней
Аноним 09/01/24 Втр 22:16:52 926663 50
>>926657
> Я всё ещё могу использовать гекс тайлмапы для отрисовки
>>926595
> Буду думать как оптимизировать генератор
Вот тебе и оптимизация подъехала. Быстрые искаробочные тайлмапы, вместо массивов велосипедного вектор3и.
Аноним 09/01/24 Втр 22:19:00 926665 51
>>926657
> чтобы посчитать дистанцию, покрутить гекс вокруг другого/нарисовать кольцо или линию тебе либо придётся переводить их в трёхосевую систему координат, либо потеть и изобретать велосипед
На дисплей всё равно в двухосевой выводить.
Поэтому чтобы не изобретать велосипед, ты изобрёл три?
1. генерируем в трёхосевой
2. переводим в двухосевую
3. переводим в трёхосевую

Нет, я рили не въезжаю.
Аноним 09/01/24 Втр 22:22:57 926667 52
>>926648
Не замедление. Просто за один кадр не пытаться сделать всю генерацию, а выполнять лишь часть, ограниченную каким-то интервалом времени. Тогда у тебя не будет происходить общий зависон.
Аноним 09/01/24 Втр 22:30:16 926668 53
>>926661
Звучит классно, обязательно пощупаю если ты выложишь в открытый доступ
Аноним 09/01/24 Втр 22:34:16 926670 54
image.png 10Кб, 251x186
251x186
image.png 13Кб, 290x251
290x251
image.png 6Кб, 297x91
297x91
>>926663
И давно твои быстрые искаробочные тайлмапы умеют в генерацию карт? Повторюсь - тормозит именно она. Генератору плевать как ты будешь выводить их.
По поводу способа хранения - я думаю как можно это оптимизировать.

>>926665
Я не понимаю откуда ты взял три пункта.
Логика такая:
1) Генерируем в трёхосевой множество тайлов (гексов). Ни генератор ни гексы ничего не знают о дисплее и о том как они будут выводиться. Это просто модель.

2) Отдельная нода (HexLayout) знает как гексы маппятся на 2д-плоскость. У неё получаем множество вершин для каждого гекса и рисуем полигон на канвасе (HexCanvas).
HexCanvas зависит от HexLayout чтобы знать как рисовать гексы.

HexOverlayCanvas - тот же класс что и HexCanvas, только используется чтобы рисовать всякое поверх. Линии, контура выделений и тд чтобы не перерисовывать карту на каждый чих.

>>926667
Спасибо, анончик. Я понял, о чем ты.
Аноним 09/01/24 Втр 22:36:13 926672 55
>>926668
> если ты выложишь в открытый доступ

Оно в принципе уже в открытом доступе. Сейчас курю доку, как это оформить в полноценный аддон и выложить в asset library
Аноним 10/01/24 Срд 01:51:31 926694 56
image.png 68Кб, 1173x971
1173x971
Границы регионов. Пытаюсь разобраться как посчитать углы чтобы нарисовать их в виде линий непосредственно по граням хексов.
Аноним 10/01/24 Срд 02:28:13 926696 57
image.png 411Кб, 1280x842
1280x842
Искаропка-кун, попробуй так же отрисовать границы гексов на своих быстрых тайлмапах
Аноним 10/01/24 Срд 06:45:36 926700 58
>>926672
Ссылочку не кинешь?
Аноним 10/01/24 Срд 11:02:43 926725 59
Аноним 10/01/24 Срд 15:49:42 926749 60
>>926696
> попробуй так же отрисовать границы гексов
Шейдер поверх накину. Но лень.
Аноним 10/01/24 Срд 15:55:34 926750 61
>>926749
>пук
И как же должен работать твой шейдер?
Напомню, у тайла на тайлмапе всего 4 соседа. Или 8, если считать диагонали.
Аноним 10/01/24 Срд 17:56:53 926761 62
>>926725
Спасибо, анончик, я не самый внимательный...
Аноним 10/01/24 Срд 18:40:49 926770 63
>>926750
Естественно, я не буду ебать мозги ни себе ни людям с ебанутыми генераторами соседних тайлов. Я возьму шум, на основе этого шума получу континенты. Этот же шум передам в шейдер, а дальше отсечение больших и меньших значений от уровня океана. Хуяк-хуяк и в продакшен. Пока ты какую-то тормозень велосипедишь, пердонюх.

Игроку ведь похуй как это реализовано. Игроку нужен фан, а не рассуждения о удобстве трёхосевых координат на плоскости.
Аноним 10/01/24 Срд 18:42:42 926771 64
Как делать игры? Если дизмораль.
Аноним 10/01/24 Срд 19:34:55 926789 65
>>926656
А я часто замечаю в ассетлибе аддоны, которые делают то, что и так есть из коробки.
Просто движок уже достаточно большой с большим количеством функций, их не все читают и изучают.
Аноним 10/01/24 Срд 19:35:52 926791 66
Так ладно нахуй, попробую на вкус этот ваш гд скрипт. Поясните есть какая-нибудь топ хуйня чтобы такому lowIQ еблану как я занюхнуть программирование на ГДскрипте?
Аноним 10/01/24 Срд 19:36:16 926792 67
>>926771
Это тебе в другие разделы тематические, там где по психиатрии.
Аноним 11/01/24 Чтв 00:58:52 926841 68
У меня мозг опух, пока я пытался разобраться,
Как по-быстрому поменять цвет фона кнопки при нажатии на неё? Никто такое не делал?
Аноним 11/01/24 Чтв 01:23:13 926842 69
Аноним 11/01/24 Чтв 11:11:18 926868 70
Посоветуйте гайды на гд скрипт для чайников
Хеллоу ворлд и синтаксис я так то и из документации могу освоить, но методы и классы вот для меня тёмный лес.
И ещё вопрос. Как происходит перемещение объекта/границы столкновения, перенос множества точек, или объекта в целом?
Аноним 11/01/24 Чтв 13:30:32 926889 71
image.png 766Кб, 1534x502
1534x502
Сап годач. Есть пара вопросов.
1) Есть ли ультимативный гайд по интерфейсу? Где на примерах объяснялось бы, как запилить диалоговую систему, штуки вроде чтения записок, журнала заданий, эффектов на экране и все в таком духе.

2) Какой лучше шаблон для рисования тайлмап для 2d платформера использовать? На пике ок? Или есть получше варианты?
Аноним 11/01/24 Чтв 14:13:41 926899 72
1704971617164.mp4 353Кб, 398x666, 00:00:23
398x666
>>926842
Точно!! спс
сделал вот такой кал, пока без сохранения
Аноним 11/01/24 Чтв 14:27:21 926901 73
Аноним 11/01/24 Чтв 16:37:19 926941 74
Аноним 11/01/24 Чтв 21:22:10 927015 75
>>926941
И работает шустро.
Аноним 11/01/24 Чтв 21:55:42 927033 76
>>926941
Да, именно так! А потом всё это выводишь во вьюпорт-текстуру и делаешь дисплеи компов в своей триде-игоре.

И вот такие штуки для целей игры нужно делать мимоходом, не отвлекаясь от основного девелопа.

И вот скажите мне, геймдев не вершина ли айти?
Аноним 11/01/24 Чтв 22:27:20 927047 77
>>927033
Более того - годот позволяет на изичах вставлять в свои новые игоры свои старые игори. Я так уже сделал, зависимость есть.
Аноним 11/01/24 Чтв 22:50:17 927055 78
image.png 1184Кб, 1280x720
1280x720
Аноним 11/01/24 Чтв 22:56:19 927058 79
>>927047
Ну так показывай.
Аноним 11/01/24 Чтв 23:31:33 927061 80
image.png 66Кб, 1302x976
1302x976
image.png 66Кб, 991x671
991x671
image.png 152Кб, 1818x980
1818x980
image.png 60Кб, 1082x832
1082x832
>>926696
Добавил рандомно раскиданные города и дороги между ними.
Для генерации дорог использовал кастомный AStar3D.

Не смог до конца поправить то, что астар постоянно срезает углы, от чего в некоторых местах находится несколько паралельных дорог
Аноним 11/01/24 Чтв 23:35:20 927062 81
>>927061
А ты объединяй параллельные дороги в шоссе
Аноним 12/01/24 Птн 14:26:06 927122 82
Туплю весь день, как мне сделать так чтобы при падении хелсбара до 25% и ниже воспроизводился звуковой файл по кругу. Через _process почему то не работает.

И еще вопрос, другой. Загрузил в аудиостим рандомазер несколько звуковых дорожек, хочу чтобы они в случайном порядке играли друг за другом, а он играет одну и останавливается. Что делать?
Аноним 12/01/24 Птн 15:47:08 927146 83
>>927122
Со звуками лучше работать на основе сигналов (событий), а не process.
Скорее всего ты в process постоянно вызываешь play(), но в годоте это означает не "продолжить играть, если играет", а "сбросить и играть сначала", Тебе надо самому проверять if not sound.playing: sound.play(). либо пользоваться сигналами.
В годоте сделано спорно на мой взгляд, loop относится не к плееру, а к импортированному файлу. Поэтому в годоте есть два подхода
1. При импорте указать, что файл будет loop. Тогда он всегда будет зациклен. ЕМНИП он не будет присылать сигнал finished. Но это позволяет сделать бесшовный звук. Но если хочется разорвать loop придется как то мутить с таймерами (проверять текущий таймстамп плеера)
2. При импорте указать что файл не loop. Тогда он будет присылать сигнал finished. И в нем ты уже по своей логике можешь начать играть повторно, или другой звук. Но там по идее может быть микрозадержка между повторами.
>Загрузил в аудиостим рандомазер несколько звуковых дорожек, хочу чтобы они в случайном порядке играли друг за другом, а он играет одну и останавливается. Что делать?
По идее то же самое. Нигде не сказано что рандомайзер будет играть их по кругу. Ты либо переимпортируешь все файлы как loop, либо обрабатываешь событие finished и заново делаешь рандомайзеру play, а он уже выберет какой файл играть согласно mode.
Аноним 12/01/24 Птн 15:51:06 927149 84
>>927146
По поводу лупа - помню еще поведение разных звуковых форматов отличалось. Может в четверке унифицировали, хз.
Аноним 12/01/24 Птн 15:55:37 927153 85
>>927149
Не само поведение, а в 3 импорт ogg был с лупом по умолчанию и надо было заходить снимать галочку с каждого.
Аноним 12/01/24 Птн 16:03:57 927156 86
>>927146
О спасибо, то что надо. Правда теперь у меня звуковой сигнал резко обрывается когда значение хелсбара выходит за установленные рамки.

И соответственно еще вопрос с которым мучаюсь, как мне звуки и анимации проигрывать до конца при их смене на другие? Пробовал await animation_finished но что-то не то. Может не так пишу. Думаю что можно сделать через animation tree, но хочется более простое решение. Ну и звуки там не сделать вроде.
Аноним 12/01/24 Птн 16:58:11 927169 87
>>927156
Тебе нужен пул аудиопотоков. При проигрывании, будет выделяться свободный, если свободного нет, гасится самый давний. Ну и свою логику использования добавляешь. https://kidscancode.org/godot_recipes/4.x/audio/audio_manager/
>анимации проигрывать до конца при их смене на другие? Пробовал await animation_finished
Сходу сложно что то посоветовать, не зная жанра игры. Ну типа советую конечный автомат (fsm)
Аноним 12/01/24 Птн 18:40:12 927183 88
image.png 42Кб, 1148x853
1148x853
image.png 59Кб, 1201x955
1201x955
image.png 81Кб, 1169x949
1169x949
image.png 80Кб, 1311x951
1311x951
>>927061
Переписал алгоритм генерации дорог. Удалось избавиться от всех артефактов
Аноним 12/01/24 Птн 19:15:49 927189 89
Я ЕБАШУ ЛЕКАРСТВА, СОЛЬ, У МЕНЯ СТОМАТИТ, НО Я НАХУЙ СДЕЛАЮ ИГРУ БЛЯТЬ. Я СДЕЛАЮ СВОЮ ИГРУ СУКА. GODOT БЛАГОСЛОВИ МЕНЯ.
Аноним 12/01/24 Птн 19:20:10 927190 90
1705076409447.jpg 126Кб, 1200x520
1200x520
>>927189
Благословляю тебя!
Аноним 12/01/24 Птн 22:05:18 927217 91
>>927189
ибо всякий просящий получает, и ищущий находит, и стучащему отворят.
Аноним 13/01/24 Суб 02:43:06 927246 92
Аноним 13/01/24 Суб 05:10:37 927265 93
1705111838568.jpg 48Кб, 628x648
628x648
Сап, аноны. Кто-то может внятно объяснить, когда конкретно нужно RefCounted использовать? Я просто ещё на шарпе пишу, и не очень понимаю, зачем это вообще нужно, когда там есть свой сборщик мусора. Да и в описании RefCounted написано, мол, после того, как обнуляется счётчик ссылок, мусор ещё какое-то время будет в памяти висеть, пока его сборщик шарпа не соберет.
Аноним 13/01/24 Суб 11:34:02 927309 94
>>927265
Не используй refcounted в шарпе. Вообще не используй. Совсем. Он только для гдскрипта, который вообще без сборщиков мусора. В шарпе используй стандартные шарп class если тебе нужен POCO объект.
Аноним 13/01/24 Суб 15:58:11 927396 95
Насколько надежно полагаться на имена нод внутри одного родителя? То есть, если я динамически добавляю-удаляю ноды, есть ли риск что новая нода получит имя старой, только что удаленной?
Аноним 13/01/24 Суб 16:07:17 927400 96
>>927396
По моему как раз получит повторно, если ты про Node@1, Node@2. Хотя я давно смотрел.
Аноним 13/01/24 Суб 16:10:28 927403 97
>>927400
Да, про это. Жаль.
Аноним 13/01/24 Суб 16:53:30 927418 98
>>927396
А ты так же динамически задавай имена сам при создании, если ты их создаёшь относительно редко, то например можешь добавлять эпоху в мс или даже в секундах к имени
Аноним 13/01/24 Суб 17:00:32 927421 99
>>927418
>>927403
А я предлагаю запилить менеджер имён на уровне игровой логики, чтобы у него был метод get_name() возвращающий уникальный стринг.
Аноним 13/01/24 Суб 17:12:20 927424 100
>>927421
Сделал через ноду-компонент, которая выдает числовой айди и устанавливает его в мету своего родителя. В мету - чтобы не лезть в родителя и не трогать его внутренние переменные. Прикрепил эту ноду ко всем нужным сценам.

Басикалли, зис:
get_parent().set_meta("uid", some_big_number)
Читаю так:
obj.get_meta("uid")

Впервые использовал мету годота. Нишево, но удобно.

https://github.com/godotengine/godot/issues/18591
https://forum.godotengine.org/t/what-is-the-purpose-of-object-meta-data/27571
Аноним 13/01/24 Суб 17:14:52 927426 101
>>927424
Метаданные много где используются. Ближайший пример - аддон диалоджик.
Аноним 13/01/24 Суб 17:23:58 927432 102
>>927426
Найс. Им про метадату нужно чаще в доках/гайдах упоминать.
Аноним 13/01/24 Суб 20:11:12 927457 103
Ребята... Вы же тут все в соло что-то делаете? Подскажите, вы в моделинг 3д вкатывались? Если да, то сколько примерно у вас уходило времени например на то, чтобы научиться нормально моделить оружие и людских персонажей?
Аноним 13/01/24 Суб 21:10:18 927473 104
>>927457
Я в блокбенче херачу модельки. Главное не охуевать с комплексной геометрией и тем более анимацией.
Аноним 13/01/24 Суб 21:18:30 927474 105
>>927457
> нормально моделить оружие и людских персонажей
Если ты не человек-оркестр, мессия, рождающийся раз в тясячелетие, то даже и не думай о том, чтобы тащить в одиночку такие вещи, качай готовые анимированные модели с миксамнимо, и не выёбывайся.
Аноним 13/01/24 Суб 22:02:52 927480 106
>>927473
Тоже недавно вкатился в блокбенч. Неплохо знаю блендер, но понял что нужно упростить модели для скорости их создания. Да и пиксель арт люблю.
Аноним 13/01/24 Суб 22:10:44 927484 107
>>927474
Готовые модели мне не подойдут. Я сурьёзный гамедевелопер и делаю хорошую игру.
Аноним 13/01/24 Суб 22:20:45 927486 108
Аноним 13/01/24 Суб 22:24:27 927487 109
Аноним 14/01/24 Вск 01:43:55 927496 110
>>927457
Я не считал, технологические предметы не очень долго, там все таки по чертежам можно, может полгода-год, гуманоидов даже не начинал еще, ну как кучу курсов пересмотрел, там столько нюансов в анатомии. Наверное года 2-3 минимум на просто приятную аниме девочку. Да сам процесс даже с готовыми долго занял, освоить риги, миксамо, каскадер, собрать все это в анимейшн три может месяца три-6 занять.
Аноним 14/01/24 Вск 03:37:21 927503 111
image.png 2964Кб, 1920x1080
1920x1080
>>927496
Тем временем самая продаваемая игра в мире.
Аноним 14/01/24 Вск 04:25:55 927506 112
>>927503
Ну да, а потом идет GTA V
Или например рядом с террарией RDR2
Не все так однозначно
Второй раз продать кубы еще поди попробуй.
Аноним 14/01/24 Вск 04:33:48 927507 113
>>927506
А, и если говорить про анимэ, то сразу после гта5 по скачиваниям идет ф2п геншин
Аноним 14/01/24 Вск 04:40:54 927508 114
2024-01-08 02-1[...].mp4 2713Кб, 1280x720, 00:00:24
1280x720
Эх, пару лет назад я едва мог скопировать чей-то туториал, а сейчас уже могу что-то сделать минимум, но всё же почти без помощи...
Может, через 10 лет на Годоте8 таки выпущу свой первый Понг
Аноним 14/01/24 Вск 13:32:20 927540 115
>>927506
И каковы шансы у тебя повторить визуал РДР2 или ГТА, и каковы шансы повторить визуал майнкрафта? Кроме того, в РДР2 и ГТА люди все равно в геймплей играют, а не в графику. Тогда как графонистые безгеймплейные залупы помирают никем не замеченные на дне стима.

Люди играют в геймплей. В игру. То, что крупные компании способны прицепить к крутому геймплею крутую графику - это бонус, а не основа. Если ресурсов мало и ты работаешь один, то разумней фокусироваться на более важном геймплее, чем на графоне. Я так щитаю. Впрочем, ты и сам это поймешь через пару лет твоего геймдевного приключения.
Аноним 14/01/24 Вск 14:25:12 927545 116
Просто проинформирую вас что get_nodes_in_group раза в два медленней чем parent.get_children. Так что замена родителей на группы ради повышения гибкости такая себе идея.
Аноним 14/01/24 Вск 17:22:44 927580 117
Годачеры, объясните мне, пожалуйста, как работает call_deferred()
Вот тут есть объяснение https://dzen.ru/a/YBKPwfJr9iwWW5iD
Но я тупой не понял, каким образом call_deferred() спасает положение? Если отслеживание сигнала уже прошло. Разве не нужно его добавлять тогда в B1?

И вообще, разве отслеживание сигнала не работает всегда? Почему не срабатывает без call_deferred()?
Аноним 14/01/24 Вск 17:27:11 927582 118
>>927580
Алсо, объяснение из доки:

>Idle time happens mainly at the end of process and physics frames. In it, deferred calls will be run until there are none left, which means you can defer calls from other deferred calls and they'll still be run in the current idle time cycle. If not done carefully, this can result in infinite recursion without causing a stack overflow, which will hang the game similarly to an infinite loop.

>This method supports a variable number of arguments, so parameters can be passed as a comma separated list.

Ситуацию не прояснило
Аноним 14/01/24 Вск 17:30:10 927583 119
>>927457
Не могу позволить себе тратить время на прокачку скиллов в визуал. так что отдаю графон, анимации и саунд на аутсорс. С меня код и все остальное
Аноним 14/01/24 Вск 17:32:27 927584 120
>>927580
Я понимаю это так.
Колл деферред, это когда написал пост в тред, отошёл покурить, по пути похавал на кухне, посмотрел ютубчик на толчке, посрал. Покурил ещё раз. Возвращаешься к пека, а там пост твой не отправленный. Вводишь капчу и отправляешь.
Аноним 14/01/24 Вск 17:36:09 927585 121
>>927584
Как тогда понять, завершения каких процессов ждет call_deferred?
Аноним 14/01/24 Вск 18:09:59 927594 122
>>927585
Я же описал.
Ждёт пока годот покушоет, покакоет, покурит, рыгнёт, почешет пузо, и присядет отдохнуть. "О, у меня тут деферед коллы навалены, а ну, колл, колл, колл!"
Аноним 14/01/24 Вск 19:14:04 927598 123
Подскажите, если в блендере сделать 1 из 2 способов с видосов:
1.https://www.youtube.com/watch?v=G4VEHi3dI6w&ab_channel=ALLTHEWORKS[РАСКРЫТЬ] Сделать деревья через ноды, то создаваемые после модели можно ли будет экспортировать в ГОДО ?
2. https://www.youtube.com/watch?v=zk6aUkl115E&ab_channel=CGIGuru[РАСКРЫТЬ] Создания через привязку листьев через ту же сферу, саму сферу спрятать как альфа каналом, в рендере самого блендера выглядит норм, а если перенести в ГОДО кто нибудь сталкивался ?
Аноним 14/01/24 Вск 19:37:04 927602 124
>>927594
Почему они тогда не работают в движке по умолчанию? Или почему их не использовать всегда, типа:

_ready():
call_deferred("eat")
call_deferred("poop")
call_deferred("sleap")
Аноним 14/01/24 Вск 19:57:31 927603 125
>>927602
Потому что по умолчанию нужно вызывать методы сразу, а не отложенно. Отложенный вызов наоборот требуется редко.
Аноним 14/01/24 Вск 20:38:32 927611 126
image.png 7Кб, 285x141
285x141
Что это за фигня вообще? Зачем она нужна?
Аноним 14/01/24 Вск 20:48:48 927613 127
>>927611
Поле для заметок на полях.
Аноним 14/01/24 Вск 21:00:22 927615 128
>>927613
Оно потом показывается где-нибудь в тултипах, или так и остается только в этом поле?
Аноним 14/01/24 Вск 22:12:43 927632 129
>>927615
Я не в курсе. Сам проверь.
Аноним 14/01/24 Вск 22:27:20 927639 130
>>927583
А можешь подробнее об этом? Я сам тоже нихуя не умею кроме сценариев и кода, ну может быть дизайна персонажей и интерфейса но это нужно суждение профессионалов уже.
Аноним 14/01/24 Вск 22:38:05 927642 131
>>927639
Тоже думал что легко смогу в дизайн персонажей. Хуй там. Чтобы задизайнить оригинального, приятного и удобного для игры персонажа придется постараться.

И нет, анимедевочки с цветыми волосами - не оригинальные персонажи.
Аноним 14/01/24 Вск 22:44:15 927644 132
>>927642
Хуй ебёшь? Про аутсорс расскажи, пожалуйста.
Аноним 14/01/24 Вск 22:46:18 927645 133
>>927545
Особо не закапывался в это и группами не пользуюсь, но подозреваю что там сравнение строк участвует.
А насчет parent.get_children, можешь сравнить еще просто с массивом нод, который сам заполняешь, думаю это еще быстрее будет.
Аноним 14/01/24 Вск 22:47:52 927646 134
Аноним 14/01/24 Вск 23:07:22 927650 135
1629935647933.png 31Кб, 623x138
623x138
1610054300535.png 15Кб, 511x111
511x111
>>927580
Вызов call_deferred происходит "между" кадрами.
Полного описания всех процессов, вроде бы, нигде не находил.
Очевидные два - это физика и дерево нод.
Говоря терминами программиста, когда происходит инвалидация итератора
Пример 1 - движок перебирает в цикле все ноды и вызывает у них процесс. Ты в процессе хочешь сделать add_child или remove_child. Если это сделать сразу, то получится, что дерево, которое перебирал движок, уже не соответствует реальности.
По сути то, что описано в статье, этот случай, поскольку связан с _ready, то есть именно с тем в какой момент создаются/удаляются ноды.
Пример 2 - физический движок это черный ящик с коллбеками, внутри него на c++ есть ссылки на разные объекты. Если поменять какой то объект в произвольный момент, то все упадет.

>>927582
Это значит, что сначала в кадре выполнились все _process, и некоторые могли составить список deferred вызовов. Теперь, между кадрами, начинается вызов deferred, всех из списка пока он не опустеет. Но, видимо, если внутри deferred вызова взывать другую функцию deferred, она добавляется в текущий список, который сейчас обрабатывается, логично ведь мы между кадрами и свободны. Но может быть ситуация, что ты из deferredA вызвал deferredB(), а из нее deferredA(), и они будут бесконечно добавлять друг друга по кругу и все встанет

>>927602
Это будет геморно (у тебя исчезает все автодополнение и проверки типов например), это будет вносить задержку (даже откладывать что то на 1 кадр заметно - помню тут анон жаловался что у него персонаж появлялся на сцене смотря влево, а потом флипался смотря вправо), и скорее всего потом появятся ситуации где тебе нужен условный deferred_from_deferred.

В Самодумии мне понадобилось 2 раза call_deferred (конечно потому что это игра на джем и некогда продумывать архитектуру)
1 раз это опять add_child, плюс там я еще жду 2 кадра чтобы я получил доступ к global_transform (такой подводный, ведь если ты deferred add_child, то глобальная координата на этот момент неизвестна)
2. Мне надо было чтобы первый button получил фокус автоматически из _ready и там тоже она была не готова это сделать.
Аноним 14/01/24 Вск 23:10:06 927651 136
>>927650
> Если поменять какой то объект в произвольный момент, то все упадет.
P.s. тут они кажется делают так - в годоте есть "копии" физических объектов из физдвижка, если ты что-то поменял, то ничего не упадет, но физдвижок просто перезатрет твое изменение в следующем кадре. Чтобы вносить изменения, надо делать это только там где предусмотрено - в integrate_force() или через physicalserver.set(...)
Аноним 15/01/24 Пнд 00:43:30 927663 137
1598955415403.png 43Кб, 200x252
200x252
1641548788491.png 48Кб, 300x168
300x168
1587708331635.png 1128Кб, 1920x1080
1920x1080
1649277761963.png 682Кб, 1319x589
1319x589
>>927598
1. Да, в геометри нодах надо чтобы была нода realize instances и можно сделать apply и получить статичную модель. Которую можно обычным образом экспортировать. Но моделька может выходить тяжелой.
Хотел как то воспроизвести нечто подобное нодам в самом годоте, чтобы одинаковые листики рисовались через multimesh, но руки не дошли.
2. Не понял вопрос честно говоря. Если сфера отдельный объект, то ее лучше как то совсем скрыть или вообще использовать только позиции листьев, а саму сферу удалить.
Вообще самые легковестные деревья не используют отдельные объекты листьев. Самое простое дерево это два квадрата пересекающихся с текстурой с листьями и прозрачными дырками. Ну или как вариант если ты запечешь на эту сферу текстуру листьев.
Можешь так же поискать что именно для деревьев в годоте делали. Этокак минимум какой то генератор попадался, и еще плагин для импостеров (это когда 3д дерево впекается в 2д спрайт, для рисования кучи деревьев на большой дальности), и всякие плагины на scatter (чтобы расставлять кучу одиинаковых объектов автоматически через multimesh)
Аноним 15/01/24 Пнд 01:38:22 927673 138
>>927639
Ну, тащемта секретов тут нет. У меня есть четкое видение визуала/звука, есть референсы, нормально составленное тз. Далее идут на какой-нибудь сайт по типу https://gamedev.ru и там на форуме ищу людей для разовых заказов по своим нуждам (там есть раздел с поиском работы)
Аноним 15/01/24 Пнд 01:38:58 927674 139
Аноним 15/01/24 Пнд 01:45:19 927676 140
>>927603
>>927650
Спасибо, аноны, за объяснение и подробные ответы. Вроде понял
Аноним 15/01/24 Пнд 11:40:34 927721 141
>>927663
Спасибо большое за ответ.
По поводу 2 квадрата с текстурой дерева, и прозрачным альфаканалом видел, так делают и траву и кусты и деревья, но если посмотреть на них сверху выглядит стремно.
Что до тяжести, больше всего это и напрягает, посмотрел кучу видосов как делают растительность разного рода в блендере, вроде часть простая, но выглядит тяжелой. Даже про те же 2 квадрата, видел много кто так делает, но говорилось в одном из видосов, что создания большого количества такие моделей нагружает видюху, посколько она пытается высчитать кучу наложений друг на другу прозрачных альфа каналов, и ладно если у тебя дерево из 2 таких 2д спрайтов, а если каждая ветка такая?
Я вот и думал, лучше ли склипать 2-3 дерева lowpoly самому, или поебаться с генерацией деревьев этих, с помощью стороних программ или же аддонов к годоту.
Аноним 15/01/24 Пнд 13:00:50 927738 142
Аноним 15/01/24 Пнд 13:03:01 927740 143
>>927721
Конечно лучше слепить самому, нр советую скачать на скетчфабе разных, засунуть в движрк и пощупать производительность и визуал.
Аноним 15/01/24 Пнд 14:01:26 927757 144
Аноним 15/01/24 Пнд 23:37:36 927877 145
Вопрос: Как лучше реализовать квестовую систему в игре? Пробовал всякие туториалы, но они слишком продвинутые для меня.
Как, например, подключить джава-док и вообще нужен ли он, если у меня, скажем, сотня квестов всего?
Аноним 16/01/24 Втр 03:26:17 927903 146
Screenshot from[...].png 111Кб, 1571x947
1571x947
Анон, графики выглядят как-то страшно для небольшой мобильной дрочильни.
Все ли ок?
Аноним 16/01/24 Втр 03:56:34 927904 147
image.png 16Кб, 407x310
407x310
>>927903
Тут не ок. У тебя потерянные ноды-сироты болтаются. В идеале там должно быть 0. Ты где-то удаляешь ноду у родителя, но не освобождаешь ее.
Аноним 16/01/24 Втр 04:03:16 927905 148
image.png 38Кб, 580x542
580x542
Кстати про мобилки. Как на мобилке лучше реализовать "альтернативный огонь" из условного "оружия"? На пк вот все понятно - левая мышь, правая мышь.

Тач-кнопки для перпеключения режима огня не хочу - моя дрочильня слишком проста для кнопок. Один палец / два пальца кажется неудобным - моя игра в горизонтальном режиме, а у людей, как правило, всего по одному большому пальцу на каждой руке.
Аноним 16/01/24 Втр 07:40:28 927909 149
>>927905
двойной тап, жест, долгое нажатие
Аноним 16/01/24 Втр 12:59:32 927974 150
>>927905
Визуальную кнопку переключения типа огня попробуй.

А вообще, не забывай, что для мобил есть геймпады, и что при наличии геймпада в ОС, годот автоматически видит его и принимает с него инпут. И поэтому забинди управление на геймпад, и при активации этого управления убирай с экрана всё что относится к тач-управлению. Твои игроки тебе спасибо скажут. Посоветуют твою игру друзьям. Станешь богат и знаменит. Тяночка твоей мечты сама найдёт тебя и сама предложит тебе встречаться. А если у тебя уже есть тяночка, то она не откажется от жмж. А если ты тяночка, то инвертируй предыдущие два предложения на кунчика.
Аноним 16/01/24 Втр 14:26:35 927991 151
>>927645
>А насчет parent.get_children, можешь сравнить еще просто с массивом нод, который сам заполняешь, думаю это еще быстрее будет.
Проверил. Все так.
Аноним 16/01/24 Втр 14:42:55 927997 152
Блять как реализовать логику инвентаря и подбираемых предметов?
У mr D дошел до этого урока но он во первых нихуя не обьясняет + он на старой версии и там дохуя чего изменилось

Вот лежит на карте предмет нагенерированый главной сценой и добавленый как чайлд сцене items, содержит текстуру и имя, вот функция у персонажа get_item на кнопку
Как мне сделать чтобы она проверяла рядом ли предмет с персонажем, удалить его с карты и добавить в инвентарь grid conteiner как дитятко

У меня голова дымится от этой хуйни
Аноним 16/01/24 Втр 14:47:10 927998 153
>>927997
Делай коллизию персонажа/мышки и предмета. По коллизии удаляешь предмет из мира и добавляешь в инвентарь.

Я бы еще советовал подумать нужен ли тебе инвентарь вообще, или достаточно простого неинтерактивного списка.
Аноним 16/01/24 Втр 14:53:16 927999 154
>>927998
>По коллизии удаляешь предмет из мира и добавляешь в инвентарь.
Как логика кода выглядит? Ее в скрипте персонажа писать?
Аноним 16/01/24 Втр 15:14:56 928005 155
>>927997
> У меня голова дымится от этой хуйни
А игра ещё не начиналась, заметь. А я говорил, геймдев - вершина айти. Без 10 лет формошлёпства в тырпрайзе в геймдев соваться - сомнительная затея.
>>927999
> Как логика кода выглядит?
1. Предмет - это абстрактная математическая сущность. В программировании это будет отдельный класс.
2. У него будут поля, указывающие на его представление в интерфейсе инвентаря и на его представление в игровом мире.
3. Предметы игрового мира должны быть через связь с базой данных быть привязаны к классу инвентарного предмета, например через композицию, иметь накинутый сверху компонент "подбираемый предмет"
4. Вот в скрипте этого класса логику и надо писать. В общем случае, нужны методы, задающие поведение при подборе игроком получающие от игрока ссылку на его инвентарь, делающие там соответствующие записи и уничтожающие свой объект-хост вместе с собой (или выключающие видимость, но это уже вопросы оптимизации, опустим пока).
5. Инвентарь это тоже должна быть математическая абстракция, манипулирующая через сигналы и ивенты своим отображением в интерфейсе, но зачастую код инвентаря ебашат в сам ГУИ. Осуждаю.
6. Что бы ты не выбрал, логика инвентаря у тебя всегда будет разновидностью CRUD из тырпрайза. И если ты в геймдев из тырпрайза пришёл, то с крудами проблем не должно возникнуть. Просто пилишь круд. И всё как бы. Ему приходят новые записи в базу данных, он их выводит в листбокс. Можно перемещать, изменять, удалять.
7. В некоторых играх в инвентарь можно пихать объекты контейнеры. Некоторые объекты могут стакаться, это можно реализовать через создание контейнера идентичного по внешнему виду предмету который стакается. В общем, полезно уметь создавать коллекции типа "коллекция".
Аноним 16/01/24 Втр 15:20:47 928008 156
>>928005
Я неебу что такое круд и я нихуя не понял
Аноним 16/01/24 Втр 15:42:45 928012 157
>>928008
Ты - это я, антоша.
Тоже скоро начинаю пилить инвентарь. И сука, пока это самое сложное из всего. А еще его нужно будет как-то с сохранениями коннектить...
Аноним 16/01/24 Втр 15:48:01 928014 158
>>928005
>Без 10 лет формошлёпства в тырпрайзе в геймдев соваться - сомнительная затея.
Либо надо СИЛЬНО упрощать. Берете свои графонистые фуллбоди 3д, свои открытые миры, свои инвентари, и делите все эти хотелки на 10.

>>928008
Упрощая, можешь сделать так: у каждого предмета area2d. У персонажа area2d. Делаешь сигнал на их коллизию. Персонаж наступает на предмет. У персонажа триггерится сигнал, в нем вызываешь функцию get_item, передаешь ей предмет, с которым произошла коллизия. Добавляешь текстуру и имя предмета в инвентарь. Картинка и текст. Тут я хз как ты добавлять будешь - зависит от реализации твоего инвентаря. Я бы сделал тупо словарь имя:картинка. Сам предмет удаляешь из мира через ту же функцию внутри игрока, remove_child, queue_free. Если предмет нужно из инвентаря-словаря поставить обратно в мир, берешь имя из словаря, по нему берешь сцену, создаешь новую сцену и ставишь ее в мир в нужное место. Из словаря удаляешь.

Все, проще не будет. Если все еще сложно и непонятно - отложи этот проект, сделай 3-4 игры попроще, потом вернешься с опытом.
Аноним 16/01/24 Втр 15:48:33 928015 159
>>928005
Кстати, на счет CRUD. Логика - логикой, но насколько вообще реально и удобно использовать sql для подобных задач в связке с годот? Есть ли адекватные примеры/туториалы?
Аноним 16/01/24 Втр 16:16:10 928025 160
Аноним 16/01/24 Втр 16:38:45 928031 161
>>928014
Хммм, ну это надо разобраться как сигналы юзать, вроде понял

Этот ютубер просто делает сцену, в нее сует плашку текстурой, в нее скролл контейнер, и в нутрь него грид контейнер
Предметы добавляются в грид контейнер как дети и сразу отображаются, хз может потом поменяет в следущих уроках
Аноним 16/01/24 Втр 17:28:55 928043 162
image.png 6Кб, 647x27
647x27
Снова вернулся к годот спустя время и снова эта же ебучая ошибка (пик)


Код игрока:
var Main_instances = GlobalResourceLoader.Main_instances
func _ready():
Main_instances.Player = self

Ресурс:
extends Resource
class_name Main_instances
var Player = null

Ресурс лоадер
extends Node
var Main_instances = preload("res://Resources/Main_instances.tres")

Что не так блять? Что этому говну не нравится? Почему он сука просто не может закинуть player в player блять?
Аноним 16/01/24 Втр 18:02:43 928060 163
>>928043
Не работал с ресурсами, а что непонятно в ошибке? У Resource нет поля Player. Проверяй что у тебя загрузилось. Может быть надо объявить тип переменной. А откуда вообще тут появилась нужда в ресурсе?
Аноним 16/01/24 Втр 18:16:40 928066 164
>>928060
>У Resource нет поля Player
А это что?
var Player = null
>Может быть надо объявить тип переменной
Делал вот так, тоже не помогает
var Player:CharacterBody2D = null
>А откуда вообще тут появилась нужда в ресурсе?
Нужно сконнектить скрипт, где меняется уровень, когда player проходит через дверь
Аноним 16/01/24 Втр 19:37:16 928085 165
>>928014
> Упрощая, можешь сделать так: нахуячить абы чего абы куда и через неделю игра в производственном аду крошится в рандомных местах, предметы дюпаются, сейвы херят прогресс квестов, нихуя не можешь понять, где в этой каше с лапшой что фиксить.
Упростил твой пост до одной строчки.
Аноним 16/01/24 Втр 19:40:27 928087 166
>>928008
> и я нихуя не понял
Перечитай начало поста, первую строку. Дальше можешь не читать.
>>928012
> Ты - это я, антоша.
И ты перечитай:

> А игра ещё не начиналась, заметь. А я говорил, геймдев - вершина айти. Без 10 лет формошлёпства в тырпрайзе в геймдев соваться - сомнительная затея.
Аноним 16/01/24 Втр 20:12:42 928090 167
>>928066
В том то и дело, что var Player - в Main_instances, а тебе пишет, что Player нет в Resource.
А что если написать var Main_instances : Main_instances= GlobalResourceLoader.Main_instances
А не может ли быть этой путаницы из за того что у тебя имя переменной и имя класса одинаковое? Так вообщем то не принято делать. Делают к примеру Player player.
Аноним 16/01/24 Втр 20:44:04 928098 168
>>928090
> Так вообщем то не принято делать.
Откуда это знать школьнику, возомнившему себя кодзимой?
Аноним 16/01/24 Втр 21:14:20 928104 169
Снимок экрана о[...].png 163Кб, 1366x768
1366x768
что ему не нравится? два других предмета спавнит нормально а тут проблема с путем которой нет
спрайт никак не перемещается или типа того
Аноним 16/01/24 Втр 21:18:42 928106 170
Снимок экрана о[...].png 7Кб, 766x92
766x92
Снимок экрана о[...].png 10Кб, 650x145
650x145
>>928104
вот список из которого выбирает имя по индексу от нуля до двух
далее _ready вызывает функцию set_item которая передает в нее имя из списка, в set_item уже имя подставляется в название ссылки на файл

На что он блять ругается?
Аноним 16/01/24 Втр 21:20:36 928108 171
Снимок экрана о[...].png 10Кб, 650x145
650x145
Аноним 16/01/24 Втр 21:21:26 928109 172
фыфы.png 25Кб, 847x162
847x162
>>928104
Дико извиняюсь что надристал в тред
Аноним 16/01/24 Втр 21:31:13 928112 173
Снимок экрана о[...].png 94Кб, 1366x768
1366x768
Нашел ошибку, в списке имен было не apple a aplle
Аноним 17/01/24 Срд 08:57:17 928149 174
У мен такое дерево
Root
UI
Control
Plashka (текстура)
Scroll conteiner
Grid conteiner
Item apple
Item hui

Tilemap
Player
Items on map (сюда добавляются предметы при генерации)

И у меня плашка интерфейска как бы привязана к тайлмапе и двигается вместе с ней пока я бегаю, а надо чтобы в углу экрана постоянно была как везде сделано
Как фиксить?
Аноним 17/01/24 Срд 10:38:54 928154 175
>>928149
Один из способов это размещать весь гуй дочерним к CanvasLayer.
Там бывают неочевидные приколы, но для новичка простой способ
Аноним 17/01/24 Срд 10:51:05 928155 176
>>927903
как накатить такие графики?
Аноним 17/01/24 Срд 17:09:52 928201 177
image.png 26Кб, 988x300
988x300
>>928155
Включаются в дебаггере.
Аноним 17/01/24 Срд 17:33:19 928204 178
Насколько требовательны массивы и словари, если я создам скажем словарь, в который вложены несколько массивов, куда вложены словари и так 5 раз вложений, самих данных не очень много, пугает именно монструозное ветвление этого говна?
Аноним 17/01/24 Срд 17:38:35 928206 179
>>928204
У меня словарь с "айди объекта: [аррей даты]", где аррей - 10к записей. И так с каждым объектом. Объектов 5-15 на уровень. Потери производительности не заметил, памяти 400мб улетает. Зависит от твоих данных короче.
Аноним 17/01/24 Срд 18:12:38 928215 180
Я запутался со словарем, мне условно надо значение ключа, второго по порядку в словаре, как мне его получить?
Аноним 17/01/24 Срд 18:18:09 928218 181
>>928215
Все вопрос снят, я разобрался.
Аноним 17/01/24 Срд 18:24:40 928219 182
>>928218
А нет, не разобрался, такое вообще возможно?
Аноним 17/01/24 Срд 18:31:43 928220 183
Аноним 17/01/24 Срд 22:07:39 928261 184
Вот в предмете есть скрипт при нажатии кнопки он удаляется со сцены
Но как мне его название добавить в словарь инвентаря, который лежит в скрипте игрока, как ключ с дефолт значением 1?

Как вообще можно реализовать словарь инвентаря, чтобы из него можно было и название и количество получить?
Аноним 17/01/24 Срд 22:40:00 928263 185
image.png 32Кб, 388x353
388x353
Почему все сигналы коллизий есть только у area2d? Почему их нет у characterbody2? Как у игрока я могу вызвать get_overlapping_bodies()?

1) Есть игрок, есть дверь (в скрипте, куда ведет дверь и т.п.).
2) Игрок рядом с дверью -> func _on_body_entered() даем игроку знать, что он рядом с дверью
3) Игрок жмет кнопку, дверь должна отправить сигнал с данными о себе в сцену, которая меняет уровень

Так вот, как двери дать знать, что игрок нажал кнопку? func _on_body_entered() отрабатывает то единожды, а не следит за состоянием игрока.
Через синглтон пилить с отслеживанием переменной через process? Или через _on_body_entered давать player данные двери в какие-нибудь переменные, и уже оттуда посылать сигнал?

Есть изящное решение?
Аноним 17/01/24 Срд 23:12:24 928266 186
>>928263
добавить чарактеру аналогичный area (возможно чуть другой формы/размера, например больше для интеракций, меньше для хитбокса), поместить его в отдельный слой физики по необходимости.
Аноним 17/01/24 Срд 23:13:16 928267 187
>>928263
Кроме body_entered есть и body_exited
Аноним 18/01/24 Чтв 01:51:41 928278 188
>>928266
А, точно... Спасибо анонче
Аноним 18/01/24 Чтв 02:11:51 928279 189
Чем дешевым можно нарисовать 3д шлейф, аля сильно упрощенный дым? Сходу сделал партиклями - больно ударило по фпс.
Аноним 18/01/24 Чтв 03:19:08 928281 190
>>928279
Добавлю что делаю с расчетом на слабые мобилки, поэтому надо что-то реально простое.
Аноним 18/01/24 Чтв 09:19:28 928297 191
Как по вызову функции добавить ключи 'хуй' в словарь "жопа" ?
if жопа.has(хуй) = false:
Жопа += хуй
?
Аноним 18/01/24 Чтв 09:43:19 928300 192
>>928297
Уже нашел ответ в документации
Аноним 18/01/24 Чтв 10:25:00 928303 193
>>928279
Попробуй этот аддон https://github.com/HungryProton/proton_trail
Я им вроде пользовался в 3-ке, но сейчас он для 4-ки.
Другие аддоны для 4-ки требуют или с++ модуль или C#
Еще в 4-ке вроде какая то специальная нода добавлена parcticle trail, но я не знаю как она на мобилках и вообще.
Аноним 19/01/24 Птн 01:31:47 928441 194
>>928303
Спасибо.

Подошло решение через обычные партикли, но с лимитом фпс в самих партиклях. Свойство fixed_fps. Поставил 25, ведь как известно больше глаз не видит!!1 Тем более глаз мобильных геймеров.
Аноним 19/01/24 Птн 06:01:44 928445 195
Короче такая проблема. Я беру строку "|что-т|о.|" и начинаю её проверять на наличие этих самых "|". Если вижу эту херню, то удаляю её из строки и делаю пометку где она была. Сама проверка идёт не через простой цикл, а через таймер. Собственно таймер завершился - проверяем следующий символ в строке и т.д. Проблема вот в чём: как узнать что у нас суканах конец строки и остановить таймер? Считаю по индексам типа "строка[индекс]" и когда перехожу через количество символов в строке годот выдаёт ошибку, как и должен собственно. Мне бы при этой ошибке таймер просто остановить а не убивать весь процесс.
А там же ещё из-за того что удаляю "|" длинна строки меняется постоянно, так что даже по длине не посчитать.
Аноним 19/01/24 Птн 06:49:39 928449 196
>>928445
Блятд вроде справился. Смотрю каждый раз равен ли индекс длине всей строки.
Аноним 19/01/24 Птн 08:04:58 928451 197
>>928445
Попробуй такой вариант: в таймере отрезаешь от входной строки один символ, проверяешь его, если он нужен, помещаешь его во вторую, выходную строку. Если символ не нужен, он просто исчезает, а входная строка уже обрезана. Если входная строка нулевая - процесс завершён.

Хотя... Этот вариант ничем не лучше. Тоже два ифа будет.
Аноним 19/01/24 Птн 10:43:07 928455 198
Если я создам список "жопа = [хуй1, хуй2, хуй3]"
И ниже функцией буду в переменную "жопа" присваивать элемент списка "хуй2"
Жопа = жопа[1]

То жопа останется списком или станет переменной со строкой "хуй2" внутри?
Аноним 19/01/24 Птн 13:15:16 928469 199
>>928455
> станет переменной со строкой
Это. Но если ты сделаешь статическую типизацию:
> var jopa : = []
То при попытке записать в неё строку проект упадёт в исключение.
Аноним 19/01/24 Птн 13:49:25 928471 200
>>928455
Зачем так делать? Заведи новую переменную,иначе потом не разберешься в лапше которую наворотид.
Аноним 19/01/24 Птн 14:06:45 928473 201
>>928469
Тогда я блять непонимаю почему обьекты недобавляются в массив инвентаряй
>>928471
Это так подбираемый предмет устроен

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

Простенькая система

Но почему то он не хочет добавляться в грид контейнер, домой приду скину код
Аноним 19/01/24 Птн 14:08:10 928474 202
>>928445
Звучит как жуткий оверинжиниринг. Зачем удалять это из строки? Если ты делаешь какие-то спецэффекты при выводе, просто пропускай этот символ, выставив нужные тебе флаги и все.
Упрощенный псевдокод
while index < my_string.length():
_var c = my_string[index]
_if c == '|':
__flipflags()
_else:
__print(c)
__break
_index += 1
Аноним 19/01/24 Птн 14:14:31 928475 203
>>928473
Вопрос не в этом. Вопрос - зачем делать так?
Почему нельзя написать other_var = var[key]? Почему понадобилось именно в эту же переменную присваивать var = var[key]?
Или ты пытаешься изменить что-то в словаре?
var[key] = new_value
var["твой_ключ"] = new_value
Словари работают примерно одиноково во всех ЯП
Если ключа нет, создается пара ключ-значение
Если ключ уже есть, то значение для этого ключа заменяется.
Аноним 19/01/24 Птн 14:29:28 928482 204
>>928473
> Тогда я блять непонимаю почему обьекты недобавляются в массив инвентаряй
Ну если ты не понимаешь, нам-то как понять? Экстрасенсов в тред не завезли. Показывай портянку кода, что ты там нахуевертил?
Аноним 19/01/24 Птн 14:38:12 928487 205
>>928475
Ну генерится при запуске сцены условное яблочко, нахуй там продолжать хранить список названий итема для генерации если можно туда просто присвоить имя и список как бы самоудалится
Аноним 19/01/24 Птн 14:38:56 928488 206
>>928482
Как с заводика прийду
Аноним 19/01/24 Птн 14:41:27 928489 207
>>928475
В самой сцене итема хранится список с названиями и при добавлеии экземпляров этого итема на условную карту у него под функцией _реади выбирается рандомное имя и присваивается уже в туже переменную где был список
Аноним 19/01/24 Птн 14:59:00 928497 208
>>928487
Ты не там оптимизируешь. Не неси хуйню. Ты сам себя запутаешь такими широкими трактовками содержимого переменных.
Аноним 19/01/24 Птн 15:17:58 928504 209
>>928497
Хули там путаться
item name = [apple, rock, stick]

_ready():
Var a = randi_range(0, 2)
item name = item name[a]

И все, предмет лежит на карте пож своим именем и больше не содержит списка
Аноним 19/01/24 Птн 15:22:47 928506 210
>>928504
>Хули там путаться
Чел, через неделю ты уже в этом не разберешься. Это ты сейчас думаешь такой ого как круто наебал систему, и че эти тупые погромисты так не делают.
Аноним 19/01/24 Птн 15:23:13 928507 211
>>928504
Ну ладно, о вкусах не спорят. На мой вкус было бы лучше:
> _ready():
>
> item_name = ItemManager.get_name()
Аноним 19/01/24 Птн 15:24:57 928508 212
>>928506
Я только вкатываюсь и сделал по гайду с ютуба, но я не понимаю где по твоему я еще буду юзать эти одинкавые списки в каждом экземпляре итема?
Аноним 19/01/24 Птн 15:26:48 928509 213
>>928507
ItemMeneger типа отдельной нодой?
А код там какой примерно?
Аноним 19/01/24 Птн 15:35:03 928510 214
>>928509
Ну опять, же код там в зависимости от потребностей. Чисто теоретически представим, что у нас есть необходимость раздавать предметы из некоторого набора, по некоторым критериям. Мы заводим список предметов. В методе get_name можем параметром указать критерий. Для критериев заводим энум. и вот это всё будет выглядеть так.
(Щас наваяю код и запощу.)
Аноним 19/01/24 Птн 16:10:57 928511 215
1705669857181.png 127Кб, 826x799
826x799
>>928510
Пользоваться так:
> item_name = ItemManager.get_name(ItemManager.Level1)
Да, длинно. Да, многословно. Зато код высокоподдерживаемый, мидловский. Любому мидлу видно, что откуда берётся в этом коде.

Там вверху закоменчен еще более сложный код. Можешь пока на него не смотреть, так, для общего развития добавил.
Аноним 19/01/24 Птн 16:13:41 928512 216
>>928511
Можно покороче сделать. Вопрос вкуса, опять же.
> _ready():
> var im := ItemManager.new()
> item_name = im.get_name(im.Level1)
Аноним 19/01/24 Птн 16:27:37 928513 217
>>928511
Хуя ты заебенил, схороню

Правда я еще не шарю что такое энум и что значит (item_set: ItemSet)
Аноним 19/01/24 Птн 16:29:53 928516 218
>>928511
А функция pick_random() по дефолту в годоте?
Аноним 19/01/24 Птн 16:58:24 928530 219
>>928516
Добавлена 2 года назад.
Аноним 19/01/24 Птн 17:22:00 928549 220
image.png 13Кб, 404x80
404x80
>>928511
тяжела жизнь без do ... while
Аноним 19/01/24 Птн 17:31:10 928554 221
>>928549
>while true:
>>random_key = items.keys().pick_random()
>>if random_key != item_set:
>>>break
Аноним 19/01/24 Птн 17:54:45 928566 222
1705676084736.png 13Кб, 398x106
398x106
1705676084769.png 14Кб, 405x110
405x110
1705676084770.png 13Кб, 425x107
425x107
>>928549
Ну да, я сам когда запостил, был уверен, что к этому моменту доебутся. Цикл с постусловием нужен так редко, что в современных языках про него забывают.
А дублирование кода да, устранять надо. Еще и мидлом назвался, ага. (эт я про себя)
Вот варианты как без дублирования кода. Просто с дублированием цикл иногда не будет выполняться ни разу, а в пикрелейтедах всегда один раз или больше.
Аноним 19/01/24 Птн 19:27:30 928605 223
Снимок экрана о[...].png 163Кб, 1366x768
1366x768
image.png 182Кб, 1366x768
1366x768
image.png 135Кб, 1366x768
1366x768
image.png 149Кб, 1366x768
1366x768
Ну вот, прошу помочь понять, почему в гридконтейнер не добавляются предметы
Код повторил за mrD с ютуба но что то может проебал
func clear() закомнетировано для теста
Аноним 19/01/24 Птн 19:29:08 928607 224
image.png 140Кб, 1366x768
1366x768
image.png 9Кб, 228x272
228x272
и еще
Аноним 19/01/24 Птн 19:46:37 928611 225
Годаны, а я игру делою.
Аноним 19/01/24 Птн 20:15:46 928621 226
Аноним 19/01/24 Птн 20:45:46 928627 227
image.png 527Кб, 922x867
922x867
Аноним 19/01/24 Птн 20:55:23 928629 228
>>928605
> почему в гридконтейнер не добавляются предметы
ЯННП, но возможно там туториал по трёшке, а ты не глядя лепишь в четвёрке.
Аноним 19/01/24 Птн 21:50:23 928639 229
>>928605
А картинки в папке Sprites/items есть? Она выглядит пустой, а TextureRect подсасывает картинки по пути с файлами 0.png, 1.png итд
Аноним 19/01/24 Птн 22:38:58 928644 230
image.png 99Кб, 1366x768
1366x768
image.png 16Кб, 475x198
475x198
image.png 38Кб, 792x225
792x225
Нашел где ошибка
Итем в радиуе игрока вызывал у него функцию _pick передавая имя
но потом удалялся, а скрипт _pick обращался опять к итемуб запрашивая имя и количество, а он то блять удален! и вылетала ошибка
Чутка переписал и сразу в функцию передаю и имя и количество в функцию

думал конечно что сначала функция у игрока выполнится и он потом удалится а оказывается хуй

>>928639
есть, просто это вид навигации такой, в одном окошке папки в другом их содержимое
Аноним 19/01/24 Птн 22:43:47 928647 231
image.png 16Кб, 745x485
745x485
>>928644
стоит упомянуть что я скорее всего проебал момент где надо в итем писать функцию _пик
Аноним 19/01/24 Птн 22:52:08 928648 232
>>928644
Ну ок, малаца, учись, постигай. Ждём шедевров от тебя. Обращайся за помощью. Поможем.
Аноним 19/01/24 Птн 23:25:25 928649 233
170569550238176[...].jpg 21Кб, 600x332
600x332
Аноним 20/01/24 Суб 11:49:43 928706 234
1705740582967.jpg 55Кб, 497x550
497x550
>>928649
Жоская игра на пикче, выглядит жоще серии дарксоулс.
Аноним 20/01/24 Суб 12:36:29 928712 235
Дайте совет, пожалуйста, как найти причину падения, если игра просто закрывается и ничего не пишет в лог?
Аноним 20/01/24 Суб 12:43:41 928713 236
>>928712
Создать новый проект и по очереди забрасывать ресурсы из старого, пока не произойдёт крош. Тогда и узнаешь, что вызывает крош.
Аноним 20/01/24 Суб 12:45:18 928714 237
>>928713
Не вариант, он падает во время игры в неопределённые моменты, одна и та же последовательность действий не ведёт к его повторному падению.
Аноним 20/01/24 Суб 12:56:00 928718 238
>>928714
Как вариант, сделай бэкап проекта, удали из проекта все файлы импорта и кэша, создаваемые годотом. Запусти и дождись реимпорта.
Если не поможет, то - >>928713
Аноним 20/01/24 Суб 13:01:00 928721 239
>>928712
>если игра просто закрывается и ничего не пишет в лог?
Уверен что у тебя ни в каком забытой коде не вызывается get_tree().quit() или подобное? Я помню на бете сегфолт поймал, но даже он в лог написался.
Аноним 20/01/24 Суб 13:39:08 928723 240
>>928718
Попробую, но сперва оберну всё-всё в трай-кэчи
>>928721
Точно нет, у меня только один выход в меню, который срабатывает исключительно по нажатию
Аноним 20/01/24 Суб 13:42:02 928726 241
>>928723
> трай-кэчи
В гдскрипте нет трайкэчей. Или уже есть? У тебя код на шарпе?
Аноним 20/01/24 Суб 13:44:17 928727 242
>>928726
На шарпе, наверно стоило это сразу сказать
Аноним 20/01/24 Суб 13:47:39 928730 243
>>928727
Ну как бы да. Ты как бы по факту сейчас мозги нам всем присутствующим ебал. Чистый годот без дополнений (а связка с шарпом выполнена как аддон, просто это упрятано с глаз) всегда пишет в лог и в консоль, когда падает.
Аноним 20/01/24 Суб 15:25:45 928746 244
Как сделать, чтобы add_child добавлял узел не к узлу, где прикреплен скрипт, а к другому?
Аноним 20/01/24 Суб 15:35:47 928750 245
>>928746
$nuzhniy_uzel.add_child(peremennaya_s_ekzemplyarom sceny)
Аноним 20/01/24 Суб 15:43:45 928752 246
>>928750
Спасибо, а то я уже хотел колхозить сигнал к другому скрипту
Аноним 20/01/24 Суб 19:24:37 928789 247
image.png 15Кб, 675x123
675x123
вот тут ютубер сравнивает дистанцию (distance_to) между прошлой позицией (prev_pos) и текущей(position) с 0.6
0.6 чего епта?

все это вызывается функцией _process(delta): каждый раз когда у обьекта есть скорость
Аноним 20/01/24 Суб 19:40:36 928794 248
>>928789
Условное значение, которое он посчитал достаточно маленьким, чтобы остановить на нем движение. Чтобы считать что объект пришел к своей цели.
Аноним 20/01/24 Суб 19:45:09 928795 249
>>928794
это вообще функция для того чтобы если моб упрется в стенку то немедленно перестал идти и выбрал другую точку на карте для прогулки

так это 0.6 чего? координат? сантиметров? пикселей?
Аноним 20/01/24 Суб 20:01:38 928797 250
Аноним 20/01/24 Суб 20:25:19 928801 251
Аноним 20/01/24 Суб 20:25:34 928802 252
>>928795
Если 2д то пикселей
Если 3д то абстрактных единиц (которые можно считать метрами, а можно не считать)
Аноним 20/01/24 Суб 20:40:25 928807 253
Как проще всего запилить в 2д игре вывод текста под углом?
Хочу сделать монитор на столе с текстом, кнопками и прочим, стоящий под небольшим углом к игроку
Аноним 20/01/24 Суб 20:44:17 928809 254
>>928807
Сплюснуть и повернуть
Или шейдер написать
Или нарисовать спец шрифт
Аноним 20/01/24 Суб 23:48:13 928832 255
image.png 6Кб, 220x26
220x26
а что в этих скобках принимает функция?

и еще в видосе чел сделал так
var healf : float
это как понять? почему не через знак "=" ?
Аноним 20/01/24 Суб 23:57:00 928833 256
Аноним 20/01/24 Суб 23:59:22 928834 257
>>928833
> Нахуя через двоеточие?
Автовыведение типа. Двоеточие - это токен указания типа, если тип не указан, а стоит равенство, то тип выводится из значения после него, в данном случае 10.0 - будет float
Аноним 21/01/24 Вск 00:00:37 928835 258
>>928834
Гениальная хуйня, похоже не уёбищное присваивание в паскале, но в отличие от него имеет смысл, а не просто понтуется, как паскаль.
Аноним 21/01/24 Вск 00:08:19 928836 259
>>928834
так оно же и просто через "=" само определяет тип, разве нет?
чето не догоняю, нахуя отдельно указывать тип данных
Аноним 21/01/24 Вск 00:09:39 928837 260
>>928833
переменная : тип = значение
Тип опционален
Присваивание опционально
Аноним 21/01/24 Вск 00:10:41 928838 261
>>928836
Есть тип объекта (значения), а есть тип переменной
Аноним 21/01/24 Вск 00:18:51 928839 262
>>928836
> разве нет?
Нет. Просто через равно присваивается как бы динамически, но по факту в тип Variant, который выполняет функции динамической типизации, что ооооочень медленно и из-за этого на годот постоянно ругались, что гдскрипт медленный. Поэтому Хуан сделал статическую типизацию, да ещё бонусом сделал автовыведение типа.

Мы это выше обсуждали, без конкретики:
> var d = 2
> d = "two"
Это работать будет, d поменяет вариантное значение-инт на вариантное значение-строку.
> var d := 2
> d = "two"
А тут вывалится эксепшн. Потому что d автоматически выведено как int и строку больше не примет.
Аноним 21/01/24 Вск 00:32:25 928842 263
Аноним 21/01/24 Вск 04:25:33 928853 264
Спите? А могли бы игры делать. Часики-то тикают.
Аноним 21/01/24 Вск 07:57:15 928858 265
>>928853
Купи электронные
Аноним 21/01/24 Вск 09:10:46 928859 266
>>928853
Вы молодец.
Мотивируете анончиков.
Спасибо вам за вашу гражданскую инициативу.
Аноним 21/01/24 Вск 16:20:49 928887 267
>>928853
да блядь, я уже заебался отвлекаться на всякую хуйню в интернете. Работаем ребята!!!
Аноним 21/01/24 Вск 23:47:14 928941 268
image.png 223Кб, 427x320
427x320
>>928838
>Есть тип объекта (значения), а есть тип переменной.
Аноним 22/01/24 Пнд 00:38:23 928949 269
1638202956726.png 243Кб, 426x512
426x512
>>928941
Да, иногда пишу в блокноте.
Аноним 22/01/24 Пнд 15:01:16 929044 270
>>928949
> 1638202956726.png
Вся суть пориджей в одной пикче.
Аноним 22/01/24 Пнд 15:26:58 929057 271
>>929044
Этот мем старше тебя.
Аноним 22/01/24 Пнд 17:45:48 929097 272
Хочу вкатиться но помимо официальной документации очень мало полезной информации в виде текста, все снимают видео туториалы для школоты. Есть информация о примерной структуре проекта? Как понять что эту механику лучше разбить на компоненты? Паттерны программирования?
Помимо официальной докусентации не нужно ничего, чтобы делать игры на годоте Аноним 22/01/24 Пнд 18:10:39 929100 273
>>929097
Анон, без обид, но все вопросы, которые ты спрашиваешь - не относятся к движкам напрямую, а являются общими знаниями для геймдева, а такая вещь как паттерны так и вообще - фундаментальна для кодинга.
Нахуй тебе связка с годотом?
Изучи всё это в связке с си и консолькой, если всё будешь понимать, то реализация в годоте не составит труда, более того, обладая знаниями, ты сам будешь видеть, какие паттерны применялись в архитектуре годота, какие методы объектов редактора оставлены для реализации паттернов для тебя, и т.д.

Извини, но сейчас я в твоём посте знаний не вижу, я вижу, что ты выучил умные слова, но смысла их не понимаешь, и что самое страшное (для тебя), ты уверен что есть где-то волшебные книжки, в которых всё написано так, что ты мигом станешь новым Кодзимой.

Это так не работает. Пиздуй в /pr/ и смотри там в закрепе литературу. Вот её и читай. В геймдев рано тебе.
Аноним 22/01/24 Пнд 18:15:04 929101 274
>>929097
Смотри туториалы про систему компонентов. Можешь на х2 смотреть и на английском, не почувствуешь себя тупой школотой.
Аноним 22/01/24 Пнд 18:16:04 929102 275
Реквестирую лучший гад по сохранениям
Аноним 22/01/24 Пнд 18:19:17 929103 276
>>929102
Пишешь что важно в файл
@
Не важное в файл не пишешь

При загрузке читаешь важное
@
Не важное считаешь заново
Аноним 22/01/24 Пнд 19:00:14 929110 277
>>929103
Базовый гайд. Базовитый. Возбазвлённый. Схоронил. Отчеканю в золоте. Внукам покажу.
Аноним 22/01/24 Пнд 19:04:42 929112 278
>>929110
Иронизировать не надо, к этому всё и сводится, дальше идут варианты в зависимости от архитектуры и в принципе игры. Если ООП - у каждого объекта должен быть своя функция сохранения/загрузки, если ЭКС - то по всем проходишься и сохраняешь у кого какие компоненты.
Аноним 22/01/24 Пнд 19:21:42 929114 279
>>929112
Мне нравится сохранение через синглтон-менеджер. Буду всегда воспевать его и форсить. (Пока не найду идею еще круче).
Аноним 22/01/24 Пнд 19:22:40 929116 280
image.png 13Кб, 659x138
659x138
Обьясните что за (control as Control)
Как понять? Переменная становится узлом контроля для узлов в сцене и глобально меняет видимость?
Аноним 22/01/24 Пнд 19:25:37 929117 281
>>929116
>(вася_пупкин as Человек).пукнуть(вонюче)
>(вася_пупкин as Двачер).постить_на_дваче(хуйню)
Приведение типов это называется в информатике.
Аноним 22/01/24 Пнд 19:32:19 929119 282
>>929117
Всеравно не понял
Аноним 22/01/24 Пнд 19:33:27 929120 283
1687188614190.png 221Кб, 904x832
904x832
Как лучше всего добавить на тачскрин кнопки для перемешения персонажа? Есть TouchScreenButton, он практически идеально подходит для моей задачи, но вот только он наследуется от Node2D и годо меня нахуй шлёт когда я пытаюсь его прилепить к интерфейсу
Аноним 22/01/24 Пнд 19:47:35 929123 284
>>929120
покажи все дерево от рута
Аноним 22/01/24 Пнд 19:51:24 929124 285
image.png 16Кб, 283x418
283x418
>>929123
Совершенно новый проект, который я создал только-только накатив себе one-clock deploy. Гугл сказал что можно использовать button, но не уточнил каким именно образом
Аноним 22/01/24 Пнд 19:52:08 929125 286
1705942328132.jpg 67Кб, 700x700
700x700
>>929119
> Всеравно не понял
Сочувствую.
Аноним 22/01/24 Пнд 20:41:45 929136 287
image.png 23Кб, 266x428
266x428
>>929124
Ладно, пока я тут думал, я решил просто обернуть их в Control подогнав у них custom_minimum_size под сами кнопочки. Хз насколько это хорошее решение, но оно пока у меня работает
Аноним 22/01/24 Пнд 21:08:28 929143 288
>>929136
Это плохое решение. Тач-функционал есть и у зелёных кнопок. А синие тач кнопки нужны не для интерфейса, а для внутриигровых действий.
Аноним 22/01/24 Пнд 21:12:48 929146 289
1705947168883.png 17Кб, 690x174
690x174
>>929136
Вот тебе пять секунд гугла за разницу между зеленой кнопкой и синей тачскринкнопкой.
В игровых интерфейсах мультитач используется редко, мультитач используется именно в самих играх, поэтому такой функционал вынесли в синие ноды.
Если тебе нужен от кнопок мультитач, несложно его самому реализовать на зелёных кнопках, там десяток строк кода будет.
Аноним 22/01/24 Пнд 21:56:57 929153 290
>>929097
Базовые рецепты текстом
https://kidscancode.org/godot_recipes/
Также, на гитхабе сотни проектов-примеров которые можно скачать и посмотреть архитектуру.
Аноним 22/01/24 Пнд 22:11:41 929154 291
>>929116
Это называется каст, приведение типов. А конкретно, up-cast, приведение к базовому типу.
В массиве тебя объекты разных типов - TextureRect, Label. Но все они наследуются от Control.
Конкретно в данном примере - нахрен не нужно. А вообще
Плюсы
-Автодополнение.
-Доступ только к полям/методам указанного класса. Не будешь использовать поля label у texture_rect.
-Проверка ошибок во время разработки - если в массив попадет спрайт, программа здесь остановится с ошибкой.
Минусы
-Производительность. Если всю программу обмазать таким, наверное просядет на пару процентов
-В релизе программа будет падать. Надо бы еще обмазывать проверкой if control is Control и предусматривать что делать в таком случае. Возможно все равно падать.
Где полезно, например наоборот down-cast:
В обработке ввода, тебе прилетают InputEvent. У базового InputEvent мало свойств. Но если сделать что-то вроде
var mbevent = (event as InputEvenMouseButton)
if mbevent: var pressed = mbevent.pressed
Получаем доcтуп к полям которые у класса-наследника.
Можно писать и без каста, но с ним чуть удобнее разрабатывать.
Аноним 22/01/24 Пнд 22:15:54 929155 292
>>929154
> У базового InputEvent мало свойств. Но если сделать что-то вроде
> var mbevent = (event as InputEvenMouseButton)
> if mbevent: var pressed = mbevent.pressed
В четвёрке еще круче сделали. Если ты пишешь
>if event is InputEvenMouseButton:
внутри этого ифа для event происходит апкаст автоматически и подтягиваются методы в автодополнеии. Лично пользовался. Радовался.
Аноним 22/01/24 Пнд 23:35:14 929161 293
>>929146
Спасибо, нацепил таки на кнопочки скрипты с нужными строчками и всё вроде работает как надо
Аноним 23/01/24 Втр 07:04:25 929197 294
>>929097
Чел если хочешь вкатится, то просто вкатываешься и все. Читать книжки, смотреть гайды ДО вката полная хуйня и нахуй не нужно

Открываешь в офф документации гайд по 1 игре, делаешь всё по пунктам и все. Просто чтобы ты понимал какие где находятся кнопки.

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

И уже сильно позже, когда у тебя получится кривой багованный кал, который невозможно дальше разрабатывать, ты начнёшь понимать как надо было делать, какая должна быть структура проекта, как подходить ко всему этому, чтобы работало нормально. И тут ты спокойно дропаешь свою демку и можешь начинать делать что то чуть серьезнее. А все эти видео, и особенно целые книги как правильно срать не нужны по крайней мере в начале
Аноним 23/01/24 Втр 07:25:06 929199 295
>>929197
Бля а я решил сначала по ютуб гайдам игры поделать простенькие и уже потом чето свое пилить
Аноним 23/01/24 Втр 07:25:29 929200 296
Аноним 23/01/24 Втр 08:12:10 929201 297
>>929197
Двачую этого. Базу выдал.
Аноним 23/01/24 Втр 12:24:20 929218 298
>>929199
Норм план. Я так делал. Потом на основе гайдов можно пилить что-то свое адаптируя информацию из них под свои нужны + гуглить недостающую инфу.
Аноним 23/01/24 Втр 14:09:46 929232 299
image.png 285Кб, 1000x656
1000x656
>>929100
>к движкам напрямую, а являются общими знаниями для геймдева
сцены, структурирование кода, является специфичным для godot
оно отличается от обычного программирования

лучше бы вместо сцен сделали структуру проекта в виде нод как на пикрил, т.е. универсальный абстрактный слой

в godot с наскоку непонятно к чему скрипты прикреплять и как вообще должна выглядеть программа, хочется создать "main.c" и модули/библиотеки для нее
Аноним 23/01/24 Втр 14:20:16 929238 300
На что влияет расширение файла сохранения? Посмотрел несколько туториалов и встретил такие расширения: .cfg, .dat, .json, даже .save

Какая разница, что использовать? учитывая, что везде файлы можно хранить в json
Аноним 23/01/24 Втр 14:22:06 929239 301
>>929238
Без разницы какой формат файла, важно что внутри
Аноним 23/01/24 Втр 15:13:58 929256 302
Есть ли аналог GameLevels Blueprint https://godotengine.org/asset-library/asset/1402 но для 4 версии годо? Выглядит очень удобно

Не очень хочется заморачиваться со сторонними сервисами, типа draw.io
Аноним 23/01/24 Втр 15:55:17 929266 303
>>929232
> оно отличается от обычного программирования
Это всё древовидные структуры данных, бои. Это еще в прошлом веке на курсах преподавалось. А самым ярким представителем прикладных языков разметки, основанном на НОДАХ является XML.
> лучше бы вместо сцен сделали структуру
Кому лучше? Тебе лучше? Так у тебя же каша в голове, даунинг-крюгерская. Ты не знаешь, что тебе лучше.
> универсальный абстрактный слой
Пустые слова рикошетом отразились в пустой голове и выплеснулись на двачи.
> в godot с наскоку непонятно к чему скрипты прикреплять
Всем понятно одной бабе яге непонятно.
> и как вообще должна выглядеть программа, хочется создать "main.c" и модули/библиотеки для нее
О, снова решил блеснуть умными словами. Скачиваешь исходники движка и пишешь ПРОГРАММУ прямо там, в проекте движка, дополняя его своими модулями с игрой, там тебе и мэйн.си будет и указатели на указатели. Но ты почему-то так не делаешь, ты прибежал ИТТ доёбываться к редактору движка, прикладному инструменту. Я тебя насквозь вижу, движкосрачерское животное.
Аноним 23/01/24 Втр 16:52:17 929271 304
>>929266
Хорошо бомбанул :)
я просто проходил мимо

>ты прибежал ИТТ доёбываться к редактору движка, прикладному инструменту
ты просто очередной пограммист который наворачивает фреймворк с костылями и потом защищает костыли, потому что потратил на их изучение время
да да, сделай лучше, иди нахуй
Аноним 23/01/24 Втр 17:39:26 929281 305
Аноним 23/01/24 Втр 17:54:41 929284 306
>>929266
Базанул, два чая.
Аноним 23/01/24 Втр 18:40:05 929290 307
image.png 627Кб, 588x680
588x680
Делайте игры.
Аноним 23/01/24 Втр 18:44:33 929292 308
давайте сделаем клона пакимонав с хрущевками и ментами
Аноним 23/01/24 Втр 18:53:30 929294 309
Зачем писать return у фнкций?

var a = 0

func test():
a += 1

Переменная a ведь все равно изменится, так? Так!
И второй вопрос. Зачем писать func test() -> void:?
Аноним 23/01/24 Втр 19:16:28 929297 310
>>929290
Да делаю, делаю, блин! Вот заканчиваю набросок функциональности главного меню!
Аноним 23/01/24 Втр 19:53:52 929299 311
>>929294
Void это вроде делает функцию глобальной
Return это когда ты в переменную суешь функцию из другого скрипта
Типа
var pipiska = $hui.drochit()
И в функции droichit() будет ruturn(cum)
То будет var pipiska = cum
Аноним 23/01/24 Втр 21:23:36 929310 312
image.png 25Кб, 505x294
505x294
зачем в дельта_мувмент умножать на дельту? что вообще такое дельта я нихуя не пойму, чето про кадры
Аноним 23/01/24 Втр 21:26:49 929311 313
>>929310
Сколько времени прошло с последнего кадра, если кадры часто меняются - за раз движение маленькое, если редко - сразу на большое расстояние переместишься
Аноним 23/01/24 Втр 21:28:09 929312 314
>>929310
Дельта это delta time, то есть разница времени между кадром и предыдущим. Формула расстояния S = t * v, поэтому чтобы узнать расстояние скорость умножают на это время, так движение будет пропорционально "порции", вне зависимости от фпс
Аноним 23/01/24 Втр 21:29:40 929313 315
>>929294
void значит return не должно быть, и если ждать что то возвращаемое от это функции будет ошибка.
Аноним 23/01/24 Втр 21:30:17 929314 316
>>929290
Некогда, свой движок сейчас пишу 2d, на Zig
Аноним 23/01/24 Втр 21:31:25 929315 317
>>929299
Войд не делает функцию глобальной. Войд это тайпхинт, показывающий что функция возвращает ничего. Если внутри такой функции сделать ретурн "пенис", то годот поймает это как ошибку.

Тайпхинты повышают понимаемость кода, помогают ловить ошибки типов и иногда ускоряют код - поскольку годоту не приходится самому распознавать чего ты там ему в переменную кладешь, он знает заранее. Актуально в интенсивных участках кода.
Аноним 23/01/24 Втр 21:32:23 929316 318
170603451745835[...].png 129Кб, 800x769
800x769
Аноним 23/01/24 Втр 21:35:32 929317 319
170603408966399[...].gif 405Кб, 112x112
112x112
>>929315
>Тайпхинты повышают понимаемость кода, помогают ловить ошибки типов и иногда ускоряют код - поскольку годоту не приходится самому распознавать чего ты там ему в переменную кладешь, он знает заранее. Актуально в интенсивных участках кода.
Хуя годноту нубикам сыплют в треде
Аноним 23/01/24 Втр 23:25:55 929325 320
image.png 30Кб, 396x377
396x377
Как заставить партикли собираться в хвост? То есть, чем дальше от эмиттера, тем сильнее они притягиваются к центру. Чет все опции перетыкал, ничего не найду. В видосах на ютубе люди такое делают уменьшая размер партиклей. Мне нужно чтобы они были одинакового размера и в начале и в конце.
Аноним 23/01/24 Втр 23:46:36 929328 321
>>929325
Хотел посоветовать GPUAttractor,но в 2д их пока не завезли
Аноним 24/01/24 Срд 16:04:41 929424 322
image.png 313Кб, 1200x628
1200x628
Хеллоувордщик итт

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

>zalupa.speed = 100px
>if press(arrow_up) zalupa.y += 10

а не

>export balls
>$zalup_zalupa_speed = 666 * delta / alpha^1488
>$huesos(if_pidor) = !down
>func _pidoras($huesos(if_pidor)).govno.mocha:
>dvacher = !human + virgin
>zalup_zalupa = 100/10
>$CollisionShit2D.set_pidoras("disabled", true)
Аноним 24/01/24 Срд 16:07:29 929427 323
>>929424
> а вот в годотееее
> а вот в гамакеее
Репорт за движкосрач.
Аноним 24/01/24 Срд 16:13:13 929432 324
image.png 356Кб, 1280x720
1280x720
>>929424
Потому что годот изначально считает тебя умным
Аноним 24/01/24 Срд 16:16:50 929435 325
>>929432
Поэтому в своё время я послал его нахуй и переехал на юнити.
Аноним 24/01/24 Срд 16:27:20 929440 326
>>929435
Ну и зачем тогда ты сюда пришёл? Не боишься что за посты деньги брать начнут?
Аноним 24/01/24 Срд 16:33:14 929446 327
image.png 251Кб, 482x623
482x623
>>929424
>>zalupa.speed = 100px
>>if press(arrow_up) zalupa.y += 10
Аналогично можно и в годоте. Разница в том, что туториалы учат тебя делать тебя правильно, а не кое-как, и рассказывают как строить проект размером больше чем один спрайт.
Аноним 24/01/24 Срд 16:45:06 929449 328
>>929424
чел ты буквально решил насрать в тред, но при этом забыл снять штаны
Аноним 24/01/24 Срд 18:21:50 929462 329
>>929435
А мы послали на хуй юнити
Аноним 24/01/24 Срд 18:42:02 929468 330
3д. Как заставить объект повернуться ДО его добавления в дерево? Я использую look_at. Если его дернуть до добавления объекта через add_child, он ругается что condition !is_inside_tree is true. Логично, ок. Но поворачивая объект внутри _ready у меня будто фрейм проходит, прежде чем он повернется. Объект спавнится, фрейм сидит как есть, потом поворачивается. Выглядит дергано и всрато.
Аноним 24/01/24 Срд 18:54:22 929470 331
>>929468
Навскидку никак. В такой ситуации только вычислять поворот самостоятельно и передавать объекту. Но может кто подскажет хитрый хак?
Аноним 24/01/24 Срд 18:59:40 929472 332
>>929470
Хитрый хак есть в каждом втором чарактер контроллере и туториале.
Воспользоваться силой нод.
Повернуть пустую ноду в нужную сторону, а уже ей спавнить дочернюю нужную. Потом при желании перенести заспавненное в другое место.
Аноним 24/01/24 Срд 19:05:41 929476 333
Стикер 0Кб, 512x512
512x512
>>929424
Ладно, погуглил и полистал другие статьи с их же сайта, стало понятнее. Но какого хуя не добавить все в первый тутор? Вот блять выбирай тут такой тип ноды, а тут такой, а в чем между ними разница - иди нахуй в гугл
Аноним 24/01/24 Срд 19:54:29 929484 334
>>929470
>>929472
Сделал проще:

new_object.hide()
add_child(new_object)
yield(get_tree(), "physics_frame")
new_object.show()

Таким образом все еще используется look_at внутри реди, а первый фрейм, в котором апдейтится поворот, скрыт.
Аноним 24/01/24 Срд 20:15:34 929485 335
>>929424
>оф сайта этого вашего годота
Любого оф гайда
Аноним 24/01/24 Срд 22:47:38 929506 336
Снимок экрана о[...].png 10Кб, 609x73
609x73
Вот скрипт от ютубера для предотвращения вылезания персонажа за границы экрана
Что делает "||" и "return" ?
Аноним 24/01/24 Срд 22:54:37 929508 337
1706126077346.png 219Кб, 1319x884
1319x884
1706126077372.png 89Кб, 1023x777
1023x777
Аноним 24/01/24 Срд 22:58:33 929509 338
>>929508
С "или" понял
А что собственно возвращает return ? Прошлый кадр?
Аноним 24/01/24 Срд 23:10:09 929511 339
>>929509
Ничего, раз не написано. Просто возвращает досрочно, не продолжая выполнение функции.
Аноним 24/01/24 Срд 23:19:14 929512 340
>>929511
Аааа, тепепь понял
Там просто под ней уже в переменную новые координаты персонажа записываются

Жаль ютуберы это нихуя не обьясняют
Аноним 25/01/24 Чтв 00:56:18 929524 341
cover01.webp 176Кб, 620x778
620x778
Аноним 25/01/24 Чтв 00:57:43 929526 342
Аноним 25/01/24 Чтв 01:02:43 929527 343
image.png 435Кб, 1920x1080
1920x1080
image.png 22Кб, 706x294
706x294
image.png 42Кб, 718x521
718x521
Что за белые полосы по краям экрана, когда запускаю fullscreen?
И еще есть проблема, как только ставлю mouse_captured, то экран начинает как бы моргать позади окна игры, если не в фул скрине запущено, но если перенесу окно на другой монитор, или скрою сам окно движка, то все ок.
Аноним 25/01/24 Чтв 01:09:13 929528 344
>>929512
Начни учить основы какого-нибудь языка, параллельно тыкаясь в игры, чтобы не скучно было. Ты простейших основ не знаешь
Аноним 25/01/24 Чтв 01:13:40 929530 345
>>929524
Неплохо. Тут как раз кто-то недовольный ютуб гайдами пробегал.

А я все еще на тройке сижу.
Аноним 25/01/24 Чтв 03:45:53 929545 346
Аноним 25/01/24 Чтв 07:09:30 929557 347
>>929528
Когдато учил и питон и с# тоже по урокам с ютуба, но успешно задушился и бросил
Уж лучше так, на практике познавать
Аноним 25/01/24 Чтв 07:12:40 929558 348
>>929512
Рекомендую канал "godot для всех" на ютубе. Там довольно шарящий чел с самого нуля все рассказывает доходчиво и подробно. У него есть цикл, где игру с нуля делает, + параллельно цикл где разбирает основы гдскрипта.
Аноним 25/01/24 Чтв 07:35:38 929559 349
Аноним 25/01/24 Чтв 07:41:31 929560 350
Аноним 25/01/24 Чтв 09:04:28 929567 351
Хочу допилить свою игру до +- играбильного состояния осталось уже не так много и выложить сюда, а ля pre-super-ultra альфа доступ в виде ссылки на гугл диск с билдом, какие подводные?

Просто есть параноидальные мысли, что код/идею и прочее могут украсть или ещё как то поднасрать
Аноним 25/01/24 Чтв 11:34:18 929585 352
>>929313
>void значит return не должно быть
Из Void функций можно делать return, но без значения.

Возможно, я путаю с питоном
Аноним 25/01/24 Чтв 12:06:25 929591 353
>>929567
Выложи видео, с него точно код не спиздят
Аноним 25/01/24 Чтв 12:10:45 929592 354
>>929567
>>929591
А разве компиленую игру так легко сдекомпилить?
Аноним 25/01/24 Чтв 12:22:04 929600 355
>>929567
>Просто есть параноидальные мысли, что код/идею и прочее могут украсть
Именно поэтому не буду сюда ничего выкладывать, пока не буду на финальной стадии
Аноним 25/01/24 Чтв 13:12:55 929613 356
1706177576221.jpeg 331Кб, 1920x1080
1920x1080
>>929567
> есть параноидальные мысли, что код/идею и прочее могут украсть
Код твой нахуй никому не нужен. У тебя же там каша из туториалов вместо кода. Проще с нуля всё переписать чем твоё пиздить.
Идею спиздят сразу же как увидят. От этого не застрахован никто. Посмотри, Palworld - наглый пиздинг покемонов и зельд, нинтенда в ахуе и уже пишет иски в суды, пиздинг фортнайта, пиздинг любых игор с данжами, нужное подчеркнуть.
Аноним 25/01/24 Чтв 13:19:11 929614 357
>>929567
Подводных никаких. Но лучше бы сразу на итч выкладывал - аудитория шире и веб-версию погонять можно.

Код твой никому не нужен, если только у тебя не йоба-хитрая идея, основанная на еще более йоба-хитром алгоритме. И то маловероятно.

>>929592
https://github.com/bruvzg/gdsdecomp
Да, годот без обфускации/шифрования легко декомпилируется. А андроидовские апк/абб можно открыть как зип-архив и почитать не-исходники голыми руками, например .txt. Сами исходники в байт-коде, поэтому их надо восстанавливать отдельно. Я как-то упаковал в андроид билд свой безумный TODO.txt, потом вспомнил что ЩАС ВСЕ ПРОЧИТАЮТ МОЮ ШИЗУ, и побежал пересобирать. Всем было похуй, 20 загрузок в гугл-плее за месяц.
Аноним 25/01/24 Чтв 13:25:19 929616 358
>>929614
А что если я игру залью а ее кто то просто возьмет и выдаст за свою, а на меня жалобу кинет
Как защититься от этого? Открывать струдию? Как права защитить?
Аноним 25/01/24 Чтв 13:34:06 929618 359
>>929616
А я не знаю. Ну, для перезаливки-перепродажи твою игру и декомпилировать не надо - взял экзешник и перезалил как свой. Так со всем итчем можно провернуть.

Помимо юридических залуп, в которых я не шарю, предположу что стоит делать все публично, заранее, и брендируя. Выкладываешь демки, видосы, девлоги, раскидываешь по соцсетям, чтобы всем было видно что vasyan666 работал над Cube Craft World 2D аж целых 8 лет. Заодно реклама. Я так делою, и ты так делой.
Аноним 25/01/24 Чтв 13:42:39 929622 360
>>929618
Еще ж можно в главное меню засунуть список авторов
Аноним 25/01/24 Чтв 14:46:15 929636 361
>>929567
Я так подумал, действительно кроме идеи пиздить у меня нечего, код это просто смех. Да и идею без специфических знаний просто так не украдешь.

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

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

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

Я думаю будет хотя бы забавно, уже для теста я набросал 3 отделения по 5 диагнозов, у каждого несколько специфических симптомов + неспецифические.
Аноним 25/01/24 Чтв 15:20:33 929641 362
>>929636
> идею без специфических знаний просто так не украдешь
Чивобл?
Кабанчик проходит твою игру и делает 10 таких же.
Аноним 25/01/24 Чтв 15:46:24 929643 363
>>929641
Так понимание какое никакое надо, чтобы грамотно написать те же диагнозы и симптомы. Конечно все можно спиздить, но если кабанчик не разбирается в медицине, то хуй он что нормально даже спиздит.
Аноним 25/01/24 Чтв 16:12:09 929645 364
>>929643
Скажу честно, как человек много лет дрочивший симуляторы и всякие дотошно честные воссоздания разных явлений - в игре главное фановость, даже если там неправильные диагнозы. Врачи все равно найдут у тебя кучу неточностей. Еще хуже если кто то решит что твоя игра похожа на реальность и начнет по ней судить о здоровье. Как раз кабанчику проще, он просто будет пихать смищнявые несуществующие волчанки.
Аноним 25/01/24 Чтв 16:43:53 929649 365
image.png 984Кб, 1415x1041
1415x1041
Сап, годач.

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

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

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

Ничего не путаю?
Аноним 25/01/24 Чтв 17:11:34 929657 366
>>929636
>Я так подумал, действительно кроме идеи пиздить у меня нечего
Т.е. кроме самого ценного, лул.
Аноним 25/01/24 Чтв 18:33:02 929672 367
image.png 5Кб, 218x103
218x103
Какие подводные камни в editable children?
Аноним 25/01/24 Чтв 18:41:02 929674 368
Аноним 25/01/24 Чтв 18:43:24 929678 369
>>929649
> Ничего не путаю?
Ну вроде всё верно. Главное, чтобы тебе было удобно, не пытайся прямо буква в букву воссоздавать советы из прошлого треда. Действуй по ситуации.
Аноним 25/01/24 Чтв 19:00:46 929682 370
Аноним 25/01/24 Чтв 19:10:50 929687 371
>>929672
Какие-то были, точно не смогу описать, связано с тем, когда что-то поменяешь в той сцене, или с экспортами. В общем, была ситуация что я чарактер контроллеру прицепил камеру,во время едит чилдрен. А потом передумал и сделал камеру внутри сцены чарактер контроллера. У них вообще-то одинаковые имена ноды получились, и потом галочки и возможные действия с ними подглючили.
Аноним 25/01/24 Чтв 19:12:28 929689 372
>>929682
Е-е-е, время обновиться к твг, самое то для проверки фич.
Аноним 25/01/24 Чтв 19:25:33 929696 373
>>929687
У меня похожее с наследованием сцен было на какой-то древней версии. Вроде пофиксили.
Аноним 26/01/24 Птн 01:04:06 929786 374
>>929649
Ну, можно так.
Все предметы, которые должны сохраняться, добавляешь в группу Save. При сохранении глобальный скрипт опрашивает все ноды в этой группе на предмет изменений.
ИЛИ
В момент изменения предмет сам сообщает глобальному скрипту, что в нём что-то изменилось.
При загрузке глобальный скрипт смотрит все ноды, о которых у него есть записи. Обращается к ним и восстанавливает их состояния. О которых записей нет - к тем не обращается.

Мой личный подход:
Я храню глобальный словарь, внутри которого словари уровней и всякая глобальная метаинфа, внутри которых словари нод и всякая уровневая метаинфа.
Глобальный скрипт ничего не знает о нодах, он обращается к уровню, чтобы тот сам опросил своих детей. И ни глобальный скрипт, ни уровень не знают, как сохранять/загружать данные для конкретной ноды, этим должна заниматься сама нода.
У нод, которые надо сохранять, есть функция save() -> Dictionary, возвращающая собсно инфу о ноде; а что там сохранять - это для каждой ноды индивидуально прописывается. Если функции нет, то просто пишем пустой словарь. Если нода удалена, то вместо словаря - строка "deleted".
У тех же нод есть функция load_saved(data: Dictionary) -> void. Соответственно, скармливаем ноде её сохранённые данные, она уже сама разберётся, что с ними делать. Ну или если нету функции, то не скармливаем.
И да, обе эти функции есть и у уровня.
А получившийся глобальный словарь очень легко (одной строчкой буквально) отконвертить в жсон, хмл, сериализовать в бинарный или текстовый формат, чтобы сделать из этого сейв-файл. Ну и обратно точно так же в одну строчку. И да, в словарях для save и load_saved следует использовать только строки и числа.
Можно (но не очень желательно) всяким комплексным нодам разрешать в свой сейв-словарь вкладывать словари детей, чтобы они тоже сохраняли и загружали, но это чревато трудноуловимыми багами, когда у тебя что-то не загрузилось, а ты не знаешь, когда и почему.

А, и ещё. Глобальный словарь висит в памяти, но он не обязан сохраняться в файл всякий раз, когда получает изменения.
Аноним 26/01/24 Птн 06:19:06 929811 375
Аноны, здравствуйте.

Какой вариант схавает билдер и кодогенератор годота на шарпе?
1. [Signal] delegate CockSuck + EmitSignal(nameof(CockSuck)) + handler в другом классе
2. event Action{add;remove;} + emit + handler в другом классе
3. event EventHandler + Invoke +EventHandler в другом классе

Переживаю что годот мне напарафинит генерейтед классов и придется потом все перепиливать
Аноним 26/01/24 Птн 07:01:30 929815 376
изображение.png 26Кб, 518x222
518x222
изображение.png 5Кб, 344x67
344x67
>>929811
Пишу пока так, не знаю во что годотик развернёт это дело при билде
Аноним 26/01/24 Птн 12:26:48 929910 377
Реквистирую гайд, как найти лоха друга, который мне бесплатно за процент с продаж сделает неплохой хотя бы пиксельный графон и не будет выебываться подсказывать и советовать, как мне делать игру, продумывать сюжет и прочее
Аноним 26/01/24 Птн 12:33:11 929917 378
>>929910
>неплохой хотя бы пиксельный графон
О каком разрешении спрайтов идет речь?
Аноним 26/01/24 Птн 12:35:35 929921 379
Аноним 26/01/24 Птн 12:38:43 929925 380
Аноним 26/01/24 Птн 12:45:53 929931 381
>>929917
Если брать персонажа за точку отсчета, то сначала нужно накидать вариантов. Ориентировочно 32x32. Вряд ли понадобится больше
>>929921
"мрачная"
Аноним 26/01/24 Птн 12:46:53 929933 382
>>929931
>32x32
Тяжело
Какого рода игра и что нужно рисовать?
Аноним 26/01/24 Птн 12:51:46 929938 383
>>929931
И "мрачная" это не ответ
Количество цветов и оттенков решает
Аноним 26/01/24 Птн 13:02:28 929949 384
>>929933
2d survival horror. Персонажи, анимация, тайлы. Вообще можно пилить черновой вариант. Главное, чтобы размеры, кол-во кадров и т.п. подходили. А отполировать можно будет на финальных этапах.
>>929938
Вопрос понял. Сразу не отвечу, нужно будет прошарить палитры
Аноним 26/01/24 Птн 13:12:33 929958 385
>>929949
Всеравно 32х32 тайлы ебанешься рисовать, особенно если там будет больше трех оттенков
Ну нахуй
Аноним 26/01/24 Птн 13:15:37 929962 386
>>929910
Возьми бесплатные сс0 ассеты на итче.

>неплохой хотя бы пиксельный
>хотя бы
Иные пиксели посложнее лоу-поли 3д будут. С пикселями тебе самому надо перспективу, форму и все такое прорабатывать, еще учитывая их пиксельность и стиль. В 3д, если ты не охуеваешь с хай-поли, у тебя уже готовые формы из примитивов, а перспективу за тебя код считает.
Аноним 26/01/24 Птн 13:24:22 929968 387
>>929962
На итче все ассеты разные для конкретных задач. Не подходят друг-другу. В итоге будет винегрет, который потом еще и фиксить придется. Где-то кадров больше нужного, где-то размер, и т.д.


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

Я не против лоуполи. Но и лоуполи, и просто 2д графон со скелетной анимацией выходит и дороже и в больше шагов. Часто ассеты делает один человек, а анимацию другой. И тут уже надо колотить команду с бюджетом. Пиздец короче. А если все делает один человек, то он и денег возьмет больше, чем чел, который покадровую анимацию в пикселях сделает. Не говоря уже про совершенно другие текстуры окружения, эффектов и прочнго
Аноним 26/01/24 Птн 13:24:22 929969 388
170626389315419[...].jpg 616Кб, 2560x1920
2560x1920
170626386112594[...].jpg 61Кб, 590x590
590x590
170626413836347[...].jpg 68Кб, 680x433
680x433
170626422701884[...].jpg 172Кб, 1920x1548
1920x1548
>>929962
Базу говорит
Но там всеравно надо в цвет и светотень уметь
Аноним 26/01/24 Птн 13:31:08 929974 389
>>929962
>>929969
Вообще да, лоуполи даже предпочтительнее будет. Типа как в первых резеках и сайлет хилле. Коряво, но от этого атмосферней и страшней, ну вы поняли.

Но да
>Но там всеравно надо в цвет и светотень уметь
И в производстве сложней получится. А я знаю, что не потяну в соло сейчас. Нужно с чего-то попроще начинать
Аноним 26/01/24 Птн 14:52:44 930014 390
valentine-skull[...].gif 584Кб, 500x475
500x475
>>929524
Кста реально годнота, особенно для нюфагов. Лучше и последовательнее погружение так сказать
Аноним 27/01/24 Суб 02:33:15 930184 391
Как правильно загрузить уровень, чтобы прокешировать все визуальные эффекты? Как пример - запускаю код на старой мобилке, по хиту вылетают партикли, получаю микрофриз. Все последующие хиты микрофризов не вызывают. То есть, как понимаю, после первого удара партикли закешировались и дальше работают плавно.
Аноним 27/01/24 Суб 08:27:01 930197 392
Аноним 27/01/24 Суб 08:34:59 930199 393
>>930197
Никак не пойму че эту херь в сам движок не встроят, бесит же пиздец.
Аноним 27/01/24 Суб 08:48:26 930200 394
>>930184
Там же галочка есть
Аноним 27/01/24 Суб 10:15:56 930207 395
>>930199
> бесит же пиздец
Галоперидолу выпей.
Аноним 27/01/24 Суб 13:06:47 930249 396
>>930197
Спасибо!

>>930200
А где галочка? В глаза ебусь?
Аноним 27/01/24 Суб 13:18:03 930253 397
>>930249
> А где галочка?
В версии 4. Для версии 3 юзай ссылочку. Всё просто: трёшка - ссылочька, четвёрка - кнопочька.
Аноним 27/01/24 Суб 13:24:57 930256 398
1598510316119.png 82Кб, 1028x514
1028x514
>>930253
Как раз в 3 галоку завезли. Правда, в GLES3 только, не обратил внимание. Так что да, лучше предпоказ для надежности.
Аноним 27/01/24 Суб 13:28:55 930257 399
>>930256
Да, блять, я забыл, я всё перепутал, в трёшку завезли кнопочку бэкпортом.
Аноним 27/01/24 Суб 23:03:55 930396 400
А ошибку (не варнинг) можно заигнорить?
Аноним 27/01/24 Суб 23:09:49 930398 401
Аноним 27/01/24 Суб 23:19:53 930401 402
>>930396
Я не помню, в гдскрипте есть экспешоны?
Аноним 27/01/24 Суб 23:23:29 930403 403
Аноним 28/01/24 Вск 00:07:37 930410 404
>>930401
В гдскрипте применяется принцип возврата кодов ошибок. Если некий метод может вернуть ошибку, он будет возвращать int, в котором 0 - это ОК, всё остальное - коды ошибок. Тебе следует делать так же. Впрочем, делай как хочешь.

> func true_godot_style_divide(a: int, b: int, result: ref int) -> int:
> > if b == 0:
> > > result = INF
> > > return ERR_DIVIDE_BY_ZERO
> > else:
> > > result = a / b
> > > return OK

Разумеется, этот код работать не будет. Домашнее задание - придумать, как заставить такой код заработать.
Аноним 28/01/24 Вск 00:25:39 930411 405
изображение.png 8Кб, 214x111
214x111
изображение.png 4Кб, 154x51
154x51
изображение.png 13Кб, 205x176
205x176
time_left стартует с 30 и каждую секунду -= 1

Функция с пикрила работает наоборот. Как такое может быть нахуй??? Аудиофайлы правильные привязаны, 100 раз проверил.
Аноним 28/01/24 Вск 00:27:56 930412 406
>>930411
>работает наоборот
в том плане что при => 20 фаст, а потом нормал
Аноним 28/01/24 Вск 00:28:16 930413 407
Аноним 28/01/24 Вск 00:31:54 930415 408
>>930413
Как стоп повлияет на то, что первым фаст включается?
Аноним 28/01/24 Вск 08:42:27 930430 409
>>930415
Может быть и не влияет, но у тебя нет конечного автомата. У тебя просто два независимых плеера которые играют когда ни попадя.
Зачем вообще два одноуровневых if, когда есть else?
Про play() я уже писал выше, он означает не "продолжить играть", а "сбросить поток и играть с начала". Который, судя по всему ты дергаешь каждый кадр.
Ну вот скорее всего так и получается, что тот плеер, который надо, ты этим каждый раз заглушаешь постоянными рестартами, а тот, который не надо, из за независимости, продолжает играть потому что его никто не стопает.
Аноним 28/01/24 Вск 08:50:46 930431 410
>>930415
А почему играет фаст, по указанным обрывкам сложно угадать. Например процесс вызыаается всегда, включая первый кадр, а переменную ты инициализируешь позже, таким образом есть момент когда тайм лефт = 0, до того как станет 30. И поверь что не стоит галочка автоплея.
Аноним 28/01/24 Вск 10:14:54 930446 411
>>930411
Код - пиздец.
Иф таймлефт меньше 20: эмит сигнал фастсаунд. Вот как надо. А в плеере подписаться на сигнал и при эмите сигнала переключить поток. Вместо этого два (2!) плеера! Судя по картинке, первый плеер как играл, так и играет, и после истечения времени плееры играют вдвоём.
Аноним 28/01/24 Вск 10:30:32 930454 412
>>930446
Да еще и в процессе (через функцию-прокладку, что не поможет) дёргается дерево 60 раз в секунду (через сахарный $). Вообще пиздец.
Аноним 28/01/24 Вск 14:43:30 930502 413
Как сделать, чтобы определенные слова в тексте были другого цвета

Например, чтобы во всех диалогах и прочем говне названия скилов всегда были красными?
Аноним 28/01/24 Вск 15:05:15 930505 414
>>930502
RichTextLabel с BB кодами, если не будет хватать, пробовать разные аддоны типа диалоговых
Аноним 28/01/24 Вск 18:52:29 930563 415
Может глупый вопрос, но что-то я не могу докумекать: есть дерево сцены, где-то в глубине есть курсор, на который я навешиваю обработку событий мыши. Как можно получить самую верхнюю ноду, над которой прямо сейчас находится курсор? Помогите пожалуйста. Если поможет зачем я это делаю, я хочу контекстное меню по правой кнопке мыши и чтобы с разными окнами оно было разным.
Аноним 28/01/24 Вск 18:57:26 930565 416
>>930563
Я бы контекстное меню привязывал к элементу, на которой ты кликаешь, а не к самой мыши. Это, собственно, и был бы контекст. Каждый элемент содержит свой контекст.

Сделай сцену-компонент, назови ее типа ContextMenu, и втыкай ее всем элементам, по клику на которые должно вылезать меню. Потом, в этом элементе, лови эвент pressed, и по нему вызывай ContextMenu.display_your_menu()
Аноним 28/01/24 Вск 19:05:04 930570 417
>>930505
> пробовать разные аддоны
Там всё делается через него же, по сути RichTextLabel с BB кодами - единственный штатный способ. Если анону не нравятся ББ-коды, то можно всё делать на низком уровне, через коллбэк _draw() делается, собсна пресловутый draw call. В нём через функции рисования на холсте можно с нуля построить всё что хочешь, в том числе самодельный ричтекст с разметкой.
Аноним 28/01/24 Вск 20:23:48 930578 418
>>930565
Возможно ты прав, надо подумать...
Аноним 28/01/24 Вск 21:26:13 930589 419
>>930570
Самому можно по разному сделать, вот навскидку:
- Состаалять динамический массив Label из подстрок
- то же самое, но делать Label только для цветных слов поверх них
- запилить модуль на c++ через freetype что нибудь
Аноним 28/01/24 Вск 21:41:26 930592 420
>>930589
> динамический массив Label из подстрок
Ну это оверхед. Новичковый.
> запилить модуль на c++
А это наоборот слишком продвинуто.

Для среднестатистического годана намного выгоднее мой вариант, ИМХО.
Аноним 28/01/24 Вск 22:08:12 930602 421
>>930592
Там есть draw text, но когда ты захочешь прыгающие по синусоиде буковки, то их вме равно по одной выводить, так что я не уверен что это сильно быстрее отдельных label
Аноним 28/01/24 Вск 22:21:30 930606 422
1706469690044.mp4 354Кб, 1280x720, 00:00:03
1280x720
>>930602
> их вме равно по одной выводить
То ты выводишь буковку в одном дравколле спецметодом, либо ты выводишь оверхед из кучи инстансов класса-ноды, набитых в дерево сцены, каждая из которых своим дравколлом рисует одну букву. Нуя хуй знает, конечно.
Аноним 28/01/24 Вск 23:15:41 930616 423
>>930592
Вставлю свои 5 копеек
RichLabel + простенький модуль для оборачивания нужных слов в нужные теги по словарю

Щас бы это все вручную делать, конечно или целую либу на крестах писать

Мимошарподебил
Аноним 28/01/24 Вск 23:22:28 930617 424
Задумываюсь о том чтобы пересесть с юнити на годот. Какие минусы и плюсы у него по сравнению с юнити?
Аноним 28/01/24 Вск 23:25:43 930618 425
>>930617
На ютубе миллион видосов со сравнениями, особенно после осеннего бредка юнитеков, базарю, ты там быстрее и проще всё наглядно разузнаешь, чем будешь ждать ответов ИТТ.
Аноним 28/01/24 Вск 23:31:14 930619 426
>>930618
>>930617
Но если вкратце, в основе отличий нет. Тот же мэйнлуп с коллбэками, как везде. Отличия в мелочах и в названиях. Там иерархия монобехов, тут дерево сцены из нод. Там префабы, тут сцены. Там ивенты как в винде, здесь сигналы как в линуксе. Там скриптобьекты, здесь ресурсы. И т.д. и т.п.

Для перекатунов с си-шарп-движка здесь искаропки поддержка сишарпа (ну как искаропки, отдельный билд с офсайта скачай всё равно), встроенный язык можно не учить. Официальная документация в основном на обоих языках даётся.
Аноним 28/01/24 Вск 23:39:57 930620 427
>>930619
Щас пойду значит документацию всю читать, а потом и видосы разные наверну. Первый плюс который уже увидел, скорость блять. Как же он летает нахуй.
Аноним 29/01/24 Пнд 00:03:25 930625 428
>>930616
Я пробовал сделать двачебраузер, скажем так оборачивать пришлось бы дохуя и все равно не вся разметка покрывалась
Аноним 29/01/24 Пнд 00:53:09 930629 429
>>930625
Ты большой молодец, серьезно, но плохо продумал механизм работы с тегами, мог бы еще большим молодцом быть

Как бы ты сделал решение с подкрашиванием?

Я бы сделал так:
Допустим, диалоги это такая статичная штука, значит пишутся один или около того раз.

"Теперь ты умеешь пукоть %Skill%"

И вот нам надо покрасить этот %Skill%
На выходе получив что-то типа:
"Теперь ты умеешь пукоть [Color=green]%Skill%[Color/]"

Но, а если мы захотим изменить цвет отображения? Ползать по всем строчкам и менять? Да ну его нахуй.
Превратим строку в
"Теперь ты умеешь пукоть [Color=SkillColorTemplate]%Skill%[Color/]"

Я завожу класс DialogTextProcessor, где делаю словарь типа <string, string>, в который кидаю "StringColorTemplate"="Green"

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

И возвращающий результирующую строку.
В итоге будем юзать так.
var incomingString = dialogsCache[dialogId][replicaId];

RichLabelText = DialogTextReplacer.Process(incomingString);

Сложность прохода foreach по словарю О(n), сложность поиска в словаре О(1), реплейс тоже О(n)

Значит все произойдет оче быстро.
Вот такую хуйню я придумал.
Аноним 29/01/24 Пнд 01:00:50 930630 430
>>930629
Ну или унаследоваться от ричтекста, переопределив сеттер Value

И название скилла из темплейта и словаря собирать
Аноним 29/01/24 Пнд 08:09:04 930649 431
>>930629
> Сложность прохода foreach по словарю О(n), сложность поиска в словаре О(1), реплейс тоже О(n)
Годаны, научите считать сложность вот в этих терминах? Несколько раз пытался понять - нихуя.
Аноним 29/01/24 Пнд 10:32:24 930665 432
Аноним 29/01/24 Пнд 11:09:41 930666 433
image.png 448Кб, 503x501
503x501
image.png 64Кб, 735x747
735x747
image.png 148Кб, 842x730
842x730
>>926070 (OP)

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

пикичи: 1-результат на пока что. видно что повторяется.
2- выражение в ноде, по сути ядро шейдера, тут то мне и надо что то дописать, думаю через 2д шум наверно рандомно крутить.
4- узлы визуального шейдера до выражения. Прошу помощи поскольку этот шейдер довольно важный.
Аноним 29/01/24 Пнд 11:22:33 930667 434
image.png 82Кб, 249x193
249x193
image.png 82Кб, 174x176
174x176
>>930666
добавлю как выглядит ЮВишка на выходе сейчас и как примерно надо
Аноним 29/01/24 Пнд 12:42:43 930677 435
>>930649
Все просто, считается по тому сколько данных мы обработаем. Самые легковесные операции типа сложения, вычитания или поиска в словаре или хешмапе, где время не зависит от размера входных данных - О(1)

Циклы О(n), потому что пройдем чаще всего всё
Цикл двойной вложенности О(n^2)
Тройной n^3 и так далее.
Обычно вот тут и появляются бутылочные горлышки

Поиск в бинарном дереве - О(log(n)), из-за постоянного деления количества элементов в котором ищем на два

Факториал O(n!) При, допустим, реализации комбинаторики, где сопоставляешь каждый элемент со всеми другими

Ну и экспонента n^сколько-то
При рекурсиях типа вычисления чисел фиббоначи

Тут можешь почитать подробнее
https://habr.com/ru/articles/782608/
Аноним 29/01/24 Пнд 13:01:26 930683 436
>>930666
А для меня шейдеры до сих пор ебаный темный лес. Удачи.
Аноним 29/01/24 Пнд 13:31:38 930692 437
>>930683
да для меня тоже, всё то что на экране -- понимаю лишь отчасти (а код с реддита спизженный), но вот это избегание паттерна нужно пиздец как сильно, без него никуда.
Аноним 29/01/24 Пнд 13:55:51 930696 438
>>930683
это потому что ты пользуешься движком
Аноним 29/01/24 Пнд 14:48:19 930700 439
image.png 136Кб, 1239x942
1239x942
Аноним 29/01/24 Пнд 14:54:11 930702 440
>>930700
вроде оно, но чёто угол не сильно рандомный. или рандом угла меньше 90 градусов? бля это получается я дебил, мнеж нужно чтоб 90 градусов кратное значение было, ибо швы будет видно. Но я наверное уж сам поиграюсь, спасибо анон, я тебя запомню.
Аноним 29/01/24 Пнд 15:02:50 930704 441
>>930665
Не понял, на кого это вешать? На InEvent? Но так нельзя же. Или я тебя не понял?
Аноним 29/01/24 Пнд 15:05:47 930708 442
>>930702
как будто надо умножить на что то но не ебу на что
Аноним 29/01/24 Пнд 15:06:50 930709 443
>>930704
на курсор скрипт с "гет парент", или в случае если тебе надо верхушку сцены можешь попробовать "гет_рут"
Аноним 29/01/24 Пнд 15:18:04 930711 444
>>930704
Не слушай этих. Щас накатаю тебе пример. Вешать надо во внутреннюю export -переменную, через инспектор редактора, если есть возможность, если нет, то через код туда же. Тебе для трёшки или для четвёрки?
Аноним 29/01/24 Пнд 15:22:39 930712 445
>>930709
Но тогда я получу родителя курсора, а я его и так знаю, не понимаю...
>>930711
Для четвёрки
Аноним 29/01/24 Пнд 15:27:00 930714 446
>>930712
тогда родителя родителя, ты может писать гет_парент один за другим
Аноним 29/01/24 Пнд 15:27:26 930715 447
>>930708

Пидор умножать на число, кратное 0.5, чтобы вращать дискретно на 90 градусов.
Аноним 29/01/24 Пнд 15:30:20 930716 448
>>930714
Но зачем, я же всегда знаю где в дереве объект курсора, мне нужно то, на что над чем находится объект курсора, когда нажимается кнопка мыши, то есть если кликается в всплывающем меню - то одно, если на игровом поле - то другое, если на боковой панели, то третье.
Аноним 29/01/24 Пнд 15:30:42 930717 449
>>930715
я в этой хуйне постоянно путаюсь, то у них 1 это 180 градусов то у них радианы ебучий цирк блять. Как мне из рандома вычлинить это самое число кратное 0.5 ?
Аноним 29/01/24 Пнд 15:33:18 930718 450
image.png 87Кб, 1190x508
1190x508
>>930717

А тебе не нужен рандом.
Аноним 29/01/24 Пнд 15:33:59 930719 451
>>930716
так это дружок, через другое делается, а не гет парент вовсе. погугли( да бля, в доске помощи говорить погулить, я знаю) как определять объект на который кликнули. Это и у контрольных узлов есть и у простых 2д-шек. Есть сигнал такой _gui_input -- он показывает где мышка на узле(а если мышка и вовсе не на узле, то сигнал ничего не возращает).
Аноним 29/01/24 Пнд 15:34:10 930720 452
>>930718

0.5 можно заменить на 0.25, и получатся углы кратные 45 градусам.
Аноним 29/01/24 Пнд 15:36:08 930721 453
>>930720
это да. Но если без рандома то паттерн же потом заметно повторяется, когда увеличивает колл-во квадратов, разве нет?
Аноним 29/01/24 Пнд 15:43:02 930723 454
>>930719
точнее возвращает он event вообще, то есть и клики тоже.
Аноним 29/01/24 Пнд 15:43:47 930724 455
>>930716
> мне нужно то, на что над чем находится объект курсора, когда нажимается кнопка мыши, то есть если кликается в всплывающем меню - то одно, если на игровом поле - то другое, если на боковой панели, то третье
Тебе же выше написали, что это неправильный подход. При нажатии мышки генерирует событие клика тот объект, на котором произведён клик. У этого объекта должно быть контекстное меню для показа. В этом суть слова "контекст" в выражении "контекстное меню". Это такая база, что просто фейспалм. Знаешь что. Не буду я тебе ничего накатывать. Пиздуй учить матчасть.
Аноним 29/01/24 Пнд 15:44:57 930725 456
image.png 966Кб, 1080x834
1080x834
Аноним 29/01/24 Пнд 15:46:17 930726 457
>>930717
> я в этой хуйне постоянно путаюсь, то у них 1 это 180 градусов то у них радианы ебучий цирк блять
Запомни, у "них" всегда радианы, всегда! Если ты где-то встретил углы в градусах (которые при этом никак не подписаны градусами), то сразу же знай, что между "ними" и "тобой" находится "мэн ин да мидл" который нахуярил градусов из дефолтных радианов, но тебе не сказал.
Аноним 29/01/24 Пнд 15:46:50 930727 458
image.png 7Кб, 432x127
432x127
>>930721

Ты текстуру натяни и посмотри как оно будет выглядеть в игре.

Вот еще варианты.
Аноним 29/01/24 Пнд 15:49:23 930728 459
>>930727
>angle_v

Название хуевое, должно быть cellCoord
Аноним 29/01/24 Пнд 15:55:43 930729 460
image.png 882Кб, 615x557
615x557
>>930727
по идее второе то что нужно, но почему то ровные 90-кратные повороты оно не делает

На пикриле синим то что не 90-кратное.
Аноним 29/01/24 Пнд 16:01:46 930730 461
>>930729

Выглядит будто углы по 45.
Аноним 29/01/24 Пнд 16:02:32 930731 462
>>930729
>>930730
снова я еблан, забыл фракт поставить правильно перед синусом. а чё он делает вообще?
Аноним 29/01/24 Пнд 16:03:24 930732 463
>>930731
забыл добавить, да, заработало как надо.
Аноним 29/01/24 Пнд 16:05:26 930733 464
Можно ли как-нибудь через call_group дернуть метод, принадлежащий детям этой группы?

У меня сейчас так:

for object in get_nodes_in_group("mygroup"):
object.get_node("SomeChildNode").myfunc()

Думаю как это переписать на call_group
Аноним 29/01/24 Пнд 16:06:03 930734 465
>>930731

Фракт берет дробную часть. Чтобы в итоге результат был в пределах [0, 1]
Аноним 29/01/24 Пнд 16:11:40 930735 466
>>930734
а как он это делает вообще? ну в плане, я понимаю как нормализовать вектор, берёшь самую большую переменную (X, Y или Z) и делишь на неё все, получается что самая большая по итогу один (X / X = 1) а остальные пропорционально поделились. А с одной переменной как узнать максимальное значение?
Аноним 29/01/24 Пнд 16:13:41 930736 467
>>930735
>а как он это делает вообще?

1.2345 ->0.2345
Аноним 29/01/24 Пнд 16:15:52 930738 468
>>930736
а... я думал пропорционально уменьшает. ну одной загадкой меньше. пойду переписывать шейдер в годот штоли.
Аноним 29/01/24 Пнд 16:22:57 930739 469
>>930724
Да я понял уже ещё тогда, не нужно взрываться, блин. Не хочешь - не делай, ты не на зарплате. Я объяснял этому анону >>930665 >>930714 что get_parent не то что мне нужно.
> Пиздуй
Вот это уже лишнее, хамло
Аноним 29/01/24 Пнд 16:24:33 930740 470
>>930739
Ну ладно, извини, погорячился. День тяжёлый. Успехов тебе.
Аноним 29/01/24 Пнд 16:24:56 930741 471
image.png 787Кб, 1152x648
1152x648
Девочки, не деритесь.
Аноним 29/01/24 Пнд 16:28:29 930744 472
>>930740
Спасибо, не извиняйся, но больше постарайся на других не срываться
Аноним 29/01/24 Пнд 16:30:10 930745 473
>>930741
А вот и арт на перекат подвезли!
Аноним 29/01/24 Пнд 18:14:24 930764 474
image.png 275Кб, 427x419
427x419
>>930730
ещё раз спасибо, уже конвертировал в шейдер для годота (тоже пришлось поебаться но всё работает и вроде даже не костыльно).
эффект не особо заметен но я ещё шума сверху накину и нормально будет думаю.
Аноним 30/01/24 Втр 00:20:41 930824 475
Вот вы говорили что сохранения - легко. А как сохранить состояние партиклей? Вот хуй их как сохранишь. И я имею ввиду не банальный is_emitting, а сами партикли, каждую отдельную частицу. Чет даже хз куда копать.
Аноним 30/01/24 Втр 01:01:14 930829 476
>>930824
А зачем? Частицы и перерисовать можно, никто париться не будет запоминая ХУЗ координаты каждой
Аноним 30/01/24 Втр 01:08:36 930832 477
>>930829
Я длинный шлейф делаю. Объект, испускающий частицы, двигается и поворачивает. Шлейф, соответственно, изгибается. И он может быть реально длинным - дальше экрана. И зигзагообразным. Сохранись-загрузись, и он пропадет. На форумах советуют preprocess выставить, но тут он не поможет.
Аноним 30/01/24 Втр 03:32:21 930839 478
>>930832
Выходит, твой шлейф это ломаная линия, сохрани сет координат или векторов
Аноним 30/01/24 Втр 04:24:32 930846 479
>>930839
Сработает только для этого конкретного случая. Есть десяток других. Для каждого костылять не будешь.

В packedscene индивидуальные партикли тоже не сохраняются. Проверил.
Аноним 30/01/24 Втр 05:06:27 930849 480
>>930846

Ну так пиши свой сохранятор/загружатор, который для каждого эффекта реализует свой алгоритм сохранения/загрузки частиц.
Аноним 30/01/24 Втр 05:11:34 930851 481
>>930846
Дак потому и не реализовано как и волшебной кнопки сохранения :)

Нужно костылять под конкретные потребности, абстрагироваться по максимуму и допиливать по необходимости, так что сохраняй свой шлейф, а частицы перерисовывай
Аноним 30/01/24 Втр 09:45:57 930867 482
>>930851
если тебе так важно сохранить шлейф, то это уже не совсем задача под чистицы. Они же просто дешёвые эффектики. Если что то своё нужно -- пиши своё, это не костыли а простая логика. Тем более что почти везде под свои нужды делается своя система партиклов.
Аноним 30/01/24 Втр 12:14:20 930892 483
>>930849
Только позицию конкретных отдельных частиц не получить никак. И не восстановить ее.
Аноним 30/01/24 Втр 14:21:03 930919 484
>>930832
Но партикли вообще для такого не предназначены. Они созданы как короткоживущий визуальный эффект, не имеющий особой смысловой нагрузки. На другом устройстве (мобилке, например) твои партикли вообще могут не отрисоваться или отрисовываться иначе.
Кароч переделывай свой шлейф на чём-то более персистентном.
Аноним 30/01/24 Втр 16:26:18 930937 485
>>930919
"персистном". ты хотел сказать точном?
Аноним 30/01/24 Втр 18:21:47 930985 486
Годачеры, подскажите, пожалуйста, о чем она вещает тут https://youtu.be/tzr-81qnS5g?si=86-in8yzz3AC7jZW&t=357 с 05:57. Как работает - я понял. Без этой хреновины не поменять текстурку у предмета на сцене. Но почему? Попробовал без tool и действительно не работает. Почему так?
Аноним 30/01/24 Втр 18:28:21 930988 487
>>930985
Щас будем посмотреть (18:28 МСК)
Аноним 30/01/24 Втр 18:28:31 930990 488
>>930985
tool означает что скрипт работает в редакторе, а не только в самой запущенной игре.
Аноним 30/01/24 Втр 18:34:40 930994 489
>>930985
Тул используется для того, чтобы прямо в редакторе менялись иконки предметов, когда ты им пикчи устанавливаешь.
Аноним 30/01/24 Втр 18:35:10 930996 490
>>930985
А все, отбой. Понял, почему. Но нахуя это используется в принципе...
Аноним 30/01/24 Втр 18:38:59 930998 491
>>930996
Чтобы можно было вручную что-то редактировать прямо в редакторе визуально. Ну как пример расставил ты на уровне нескольких врагов, и меняешь одному из них спрайт с гоблина на орка.
Аноним 30/01/24 Втр 18:50:16 931005 492
>>930998
Так можно просто editable children и сразу в ноду спрайта пихать текстурки
Аноним 30/01/24 Втр 20:12:48 931028 493
>>931005
Ты не понял. ТУЛ нужен, чтобы сразу в редакторе, во вьюпорте, видеть изменения, скрипт начинает работать прямо в редакторе, у него _процесс() работать начинает. Теперь понял?
Аноним 30/01/24 Втр 21:01:38 931040 494
tool.mp4 3633Кб, 2560x1440, 00:00:20
2560x1440
>>931028
И все еще не понял. У меня как-то наоборот работает. Записал видео.

Код выглядит так:

@tool
extends Node2D

@export var texture_of_item : Texture
@onready var Item_sprite = $Sprite

func _ready():
if not Engine.is_editor_hint():
Item_sprite.texture = texture_of_item

func _process(delta):
if not Engine.is_editor_hint():
Item_sprite.texture = texture_of_item
Аноним 30/01/24 Втр 21:07:03 931043 495
>>931040
Второй нот не нужен. Смотри туториалы внимательнее. В _реди ты делаешь иф нот, а в _процессе ты должен делать просто иф! Без нот!
Аноним 30/01/24 Втр 21:07:52 931044 496
>>931040
И отучайся копипастить, да душно, но пиши ручками код ,а не копипасть бездумно.
Аноним 30/01/24 Втр 21:18:15 931046 497
до переката 3
Аноним 30/01/24 Втр 21:18:25 931047 498
до переката 2
Аноним 30/01/24 Втр 21:18:34 931048 499
до переката 1
Аноним 30/01/24 Втр 21:18:42 931049 500
ПЕРЕКАТ Аноним # OP 30/01/24 Втр 21:19:51 931050 501
1706638791252.jpg 129Кб, 750x914
750x914
Аноним 31/01/24 Срд 00:06:08 931097 502
>>930937
Нет, от английского persistent. В великомогучем нет слова, которым можно было бы однозначно это перевести.
Стабильное, постоянное, существующее. Антоним - эфемерное.
Аноним 31/01/24 Срд 08:53:04 931131 503
>>931097
ну так стабильное скорее тоже хорошо попадёт. размытые аналогии в программировании ни к чему(читай: я ненавижу англицизмы).
Аноним 01/02/24 Чтв 22:35:50 931461 504
>>927061
Это все решается обычным двумерным графом с кастомной функцией определения соседей, зачем ты высрал трехосевые координаты абсолютно непонятно.
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов