Godot #21.01.01

 Аноним OP 11/01/21 Пнд 12:55:58 #1 №719977 
1610358958443.png
Добро пожаловать в тред любви, взаимопомощи и векторной графики!

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

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

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

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

Архивный: https://arhivach.net/thread/622866/
Loading...
Аноним 11/01/21 Пнд 18:15:52 #2 №720072 
https://youtu.be/EsTSf5dytbs
>>719944 →

Хоба, оказывается уже кто-то сделал либу для работы с SVG.
Но она давно не обновлялась, и что-то подсказывает мне что она уже не работает.
Кажись, придётся в ней копаться и фиксить...
Аноним 11/01/21 Пнд 18:56:16 #3 №720077 
>>720072
> уже кто-то сделал либу для работы с SVG
Облегчение-то какое. Я уже джва часа изучаю этот твой бленд2д и у меня башка вскипела нахуй! К такому низкоуровневому коду меня жизнь не готовила.

Аноним 11/01/21 Пнд 19:00:35 #4 №720078 
>>720077
Нас обманули, там просто РЕДАКТОР svg. их даже нельзя экспортировать вне редактора.
Всё очень запущено в общем.

Да я уже не знаю на саомм деле.
https://youtu.be/Cqp3PJQIrUc
Вот можно посмотреть тут, вроде как есть какой-то прогресс в морфинге объектов, но при этом заморфить объект под другой объект в определённой степени скорее всего не получится. Изменить текстуру не получится также легко как с помощью векторной графики. Я думал насчёт векторной графики только из за ее возможностей параметризации, тут их пока нет. Ничего готового нет.
Blend2D не умеет кажись в SVG импорт, только кодом.

Возможно вот этот умеет, но я не знаю: https://www.amanithvg.com/
сейчас еще
Аноним 11/01/21 Пнд 19:30:00 #5 №720079 
>>720078
> Нас обманули, там просто РЕДАКТОР svg.
Только хотел написать, а ты уже.
Такое ощущение, что конкурировать с флешем было запрещено. Кривые есть. Безье есть. Но используется всё это только для игровой логики, пути там, это всё. Насчёт использования их в графике - молчок. Строжайший запрет. Векторные форматы при импорте растеризуются. Графика только растровая! Ни о каком векторе даже не мечтайте.
Функции отрисовки примитивов есть, как я описал в прошлом треде. Но они все только рантаймовые, без поддержки редактором. То есть, все эти draw_line придётся прописывать вручную, не видя результата. Даже с опцией tool колбэк отрисовки не запускается. И даже если окажется, что отрисовать можно в редакторе. В этих функциях не имплементировано сглаживание, что делает их, скажем прямо, хреновым конкурентом флэшу.

Ну флэш вроде как официально умер, хуле? Сделайте замену (крик в пустоту).
Аноним 11/01/21 Пнд 19:38:00 #6 №720080 
>>720079
Потому что векторная графика может вещи мощные мутить, но её потенциал можно раскрыть только будучи аутистом.
Например - представь у тебя как в каком нибудь рогалик все предметы будут генериться не просто процедурно, а параметрически. Условно у предмета будет shape которая задаёт какие-то параметры аычисляемые типо объёма и свойств (а ля шейп лезвия даёт свойство остроты предмету) а ты потом на этот шейп можешь любой материал надеть, и у тебя получится процедурно сегнеренный ножичек. Так можно несколько частей тип рукояток и прочего нашпилить, а потом только успевай свойства материалов балансить. Это только начало.
Я хочу рогуль написать, но подобрал настолько шизоидно дотошную симуляции всего, что теперь не представляю а как это собственно аизуализировать. Не текстом же. А пилить спрайт под каждый вариант не комильфо. А пилить всратый пиксель арт тоже. В общем дело дрянное. Не зеаю как выйти из ситуации
Аноним 11/01/21 Пнд 19:43:27 #7 №720081 
>>720080
Ещё потребовалось бы масштабироаание, растягиванте шейпа, а в растре без потери качества сделать такое невозможно. Или вообще сблендивание двух шейпов.
Возможно я просто перегибаю. Видимо сначала надо сделать хоть что то с формальным отображением.
Аноним 11/01/21 Пнд 19:47:59 #8 №720082 
>>720081
> сначала надо сделать хоть что то с формальным отображением
Я тебе уже написал в прошлом треде.
Закоди свой айтем как скрипт с функцией _draw в которой параметрически задаётся рисование нужной тебе фигуры из примитивов. Работать это будет. Для прототипирования сойдёт. А там поглядим. Может сама идея такого детального рогалика окажется унылой.
Аноним 11/01/21 Пнд 19:52:21 #9 №720083 
b71.gifv
Годаны, есть вопрос по сетевой составляющей.
Для своей игрульки мне нужно заебенить некоторый сетевой функци онал. Авторизация для лидерборда, передача картиночек с серва, обмен текстовыми данными между сервом и клиентом - это вроде буквально ВСЁ. Пока пилил на жаве, но вдруг ёбнуло в голову, что это наверно даже легче заебенить как веб-сервер(?), тип игруля будет просто обращаться за всем к техническому сайту и не нужно будет париться с хостом, как в случае в сервером-приложением. Я вообще правильно мыслю? хз, просто первый раз полез в сетевуху.
Аноним 11/01/21 Пнд 19:52:27 #10 №720084 
>>720082
А что вообще там за инструменты находятся? Право имею к ним допустим применять текстуре и какие-нмбкдь?
Да и по хорошему, вектор должен в рилтайме растпризироваться, иначе фпс непосредственно молниеносно вылетит в 0
Привет Новичек в треде 11/01/21 Пнд 20:30:51 #11 №720091 
dvach.jpg
Скачал движок, читаю документацию, может кто на мой вопрос ответить? Вот, только без занудства и оскорблений, умоляю! Я хочу свою диабло 2 сделать, с блек джеком и пиксель артом! Хватит ли движка на это? Сама диабло 2 вроде простенькая не ААА по современным меркам.
Аноним 11/01/21 Пнд 20:38:45 #12 №720092 
>>720091
Более чем хватит, можешь не сомневаться
Аноним 11/01/21 Пнд 20:42:31 #13 №720093 
>>720091
Очень простенькая, сделаешь за неделю, а с годотом вообще за 2 дня запилишь.
Аноним 11/01/21 Пнд 20:52:20 #14 №720094 
>>720093
Как думаешь! Процедурная генерация это трудно?
Учил питон когда-то, там в ткинтере была функция рандом!
Принцип такой же?
Аноним 11/01/21 Пнд 20:52:38 #15 №720095 
>>720094
ой не в ткинтере, а там импортишь рандом уже
Аноним 11/01/21 Пнд 21:31:03 #16 №720097 
>>720091
Дьябла - не простенькая и делалась большой командой топовых спецов.
Размытие при передвижении игрока (картинки) Аноним 11/01/21 Пнд 21:38:35 #17 №720099 
Совсем недавно начал делать 2D игру в Годоте.

Заметил, что при передвижении картинки через move_and_slide картинка начинает слегка блюриться и оставляет очень короткий след чтоли.
Снял галочку с опции фильтра в импорте картинки (png), в опциях проекта выставил Window -> Stretch -> Mode -> 2D, след при передвижении всё также остаётся.

Когда картинка не передвигается - выглядит чётко. Может кто-то знает в чём беда?
Аноним 11/01/21 Пнд 21:41:01 #18 №720101 
>>720094
> Процедурная генерация это трудно?
Возьми эту функцию и будет прям как в питоне https://pastebin.com/skZTvQW1
Аноним 11/01/21 Пнд 21:43:02 #19 №720102 
>>720099
> Может кто-то знает в чём беда?
Код показывай. Экстрасенсы в отпуске.
Аноним 11/01/21 Пнд 21:44:51 #20 №720104 
>>720084
> Право имею к ним допустим применять текстуре и какие-нмбкдь?
Кстати, возможно будет гораздо эффективнее делать параметрическую векторную графику на шейдерах!
Аноним 11/01/21 Пнд 21:49:20 #21 №720105 
image.png
>>720102
Вот код передвижения
Аноним 11/01/21 Пнд 21:53:16 #22 №720106 
>>720105
Что за деление пополам в 10 строке? Что это тебе предположительно должно дать? Учитывая, что в 11 строке полученный вектор нормализуется, это твоё деления я уверен работает не так, как ты предполагаешь.
Аноним 11/01/21 Пнд 22:01:24 #23 №720109 
>>720106
Да, случайно взял деление на 2 с проекта с изометрическим видом. Спасибо.
Аноним 11/01/21 Пнд 22:09:27 #24 №720112 
1610392166855.png
>>720109
Вот тебе для шпаргалки код моего компонента топдаун движения. С коээфициентами разгона и торможения. Параметр direction аналогичен твоему, компонент работает с указанным извне KinematicBody2D. Ну и на стейтмашину внимания не обращай, тебе полезны строки 11-16
Аноним 11/01/21 Пнд 23:24:48 #25 №720123 
>>720101
А вот теперь прям точь в точь питоновский чойз https://pastebin.com/NbbujcuL
Аноним 12/01/21 Втр 05:35:25 #26 №720163 
>>720104
Разве что на компьют шейдерах, так как опять же требуется результат один раз получить в виде картинки а потом уже рендерить его пересчитывая только если он изменился.

У тебя есть какие-то дополнительные мысли на этот счёт?
Аноним 12/01/21 Втр 08:10:42 #27 №720177 
>>720104
Алсо, вот ещё вот такая вещь есть.
Чудовищно мощная, но НЕДОДЕЛАННАЯ
https://github.com/protongraph/protongraph

Советую посмотреть видосы автора.
Аноним 12/01/21 Втр 08:27:18 #28 №720179 
>>720163
> У тебя есть какие-то дополнительные мысли на этот счёт?
Да! Стайлбоксы!
Есть безумная идея рисовать векторную графику на предварительно настроенных стайлбоксах через draw_stylebox()
Аноним 12/01/21 Втр 08:31:13 #29 №720180 
>>720179
УХХХ
Не, мне кажется стайлбоксы не настоллько гибкие, но может я ошибаюсь?

Пока что я лучше отвлекусь на логику внутри игры а не на визуализацию. Иначе у меня фляга засвистит (я уже порядочное время эти темы изучаю просто).

Но если какие-то мысли будут, излагайте.
Аноним 12/01/21 Втр 08:44:49 #30 №720181 
>>720180
> стайлбоксы не настолько гибкие, но может я ошибаюсь?
В них хотя бы сглаживание есть.
Но ни они, ни чистая отрисовка не имеют возможности рисовать кривые произвольной формы.
Аноним 12/01/21 Втр 10:17:11 #31 №720201 
ну что почаны сделаем свою Noitа?
https://youtu.be/WZrGBz7IBa0
Аноним 12/01/21 Втр 10:18:27 #32 №720202 
>>720201
отклеилось
https://godotengine.org/asset-library/asset/819
Аноним 12/01/21 Втр 10:25:05 #33 №720204 
>>720201
ВЕСЬМА мощно.
Только значем делать свою Ноиту? нНужно придумать что-то новое.
Аноним 12/01/21 Втр 12:25:19 #34 №720226 
>>720201
Тут вопрос как это работает. Если там GPU то как обратно на процессор данные передаются? А если не передаются, то игру из этого не сделать - откуда персонаж узнает, что там где он стоит уже пол провалился или стена появилась.
Аноним 12/01/21 Втр 18:35:26 #35 №720321 
Что-то посмотрел уроки, а там никакого C++ даже не видно. Там вообще можно на крестах скрипты писать? Есть какие-то руководства на русском?
Аноним 12/01/21 Втр 20:39:21 #36 №720352 
>>720321
Можно. >>658415 →
Аноним 12/01/21 Втр 22:57:03 #37 №720367 
>>720201
Мощный видос, как та прога, не помню название, опенсорсная, с симуляцией всех этих веществ.
Одно меня смущает: наши программисты непуганые, без задней мыслей палят в видосе гору перацкого софта на десятки тыщ.
Аноним 12/01/21 Втр 23:03:49 #38 №720369 
16103589596880.png
l2afYJYutY.mp4
>>720367
>без задней мыслей палят в видосе гору перацкого софта на десятки тыщ.

о каком именно софте идет речь?
Аноним 12/01/21 Втр 23:16:59 #39 №720372 
>>720369
Аида экстрим, например.
Аноним 12/01/21 Втр 23:25:04 #40 №720375 
>>720367
Уже удалили
Аноним 12/01/21 Втр 23:33:38 #41 №720379 
>>720375
Рикаминдую завести в дуалбут какую-нибудь убунту и в ней пилить видосы. Чтобы, стало быть, никто не доебался. А там глядишь привыкнешь и пошлёшь нахуй венду.

Аноним 12/01/21 Втр 23:40:04 #42 №720384 
>>720379
Можно просто чистого пользователя на винде завести (у меня такой для стриминга)
Аноним 13/01/21 Срд 00:17:28 #43 №720387 
1610486246794.png
>>720384
Не сочтите за политоту, но если уважаемый барен захочет доебаться, он до лицензии на венду, представленную на видео доебётся, а дальше уж опергруппа изымет пека и тщательно проанализирует хард.

Не, ну потом-то ты конечно 250 тыщ за моральный вред отсудишь (75 тыщ после вычета судебных издержек и пшёл вон, холоп), как пикрелейтед, но годы и нервы тебе уже никто не вернёт.
Аноним 13/01/21 Срд 12:27:01 #44 №720442 
>>720201
Что в видосе-то было?
Аноним 13/01/21 Срд 12:46:00 #45 №720448 
>>720442
Наверное обзор этого ассета
https://godotengine.org/asset-library/asset/819
Аноним 13/01/21 Срд 16:33:14 #46 №720522 
Как на годоте сделать клиент-серверную архитектуру?
Аноним 13/01/21 Срд 17:01:26 #47 №720531 
>>720522
Как в доках написано. Мне тебе доки копипастить в тред?
Аноним 13/01/21 Срд 17:03:56 #48 №720535 
>>720531
Да я уже нашёл, извиняюсь что потревожил
Аноним 13/01/21 Срд 19:02:45 #49 №720547 
изображение.png
Привет, анон. В Годо можно сделать смесь скелетной анимации и скелетной физики? То есть, чтобы физическое воздействие на анимированый скелет влияло на его движения, но чтобы движение всё равно потом стремилось вернуться в русло анимации?

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

Пример аналогичной фичи в уе: https://docs.unrealengine.com/en-US/AnimatingObjects/SkeletalMeshAnimation/PhysicallyDrivenAnimation/index.html
Аноним 13/01/21 Срд 19:33:56 #50 №720554 
>>720547
Можно. Создаёшь блендспейс 1D, в котором ограничиваешь нужные тебе кости, при выкрутке этого бледспейса в положение с ограничением, от анимации отключатся эти кости и можешь делать с ними любые свои дела.

Соответственно, гуглить тебе надо по блендспейсам, как ими пользоваться.
Аноним 13/01/21 Срд 20:02:50 #51 №720568 
>>720554
Я так понял, что ты говоришь просто об отключении кости от анимации и подключении её к физике при определённых условиях. Это не совсем то, что я хочу, хотя это тоже полезно.

Вот тут лучше показано, чего я пытаюсь достичь: https://youtu.be/2MPE620rKy4

То есть, мне важно, чтобы анимация не прекращалась, но я мог на неё в некоторой степени воздействовать извне. То есть, условно, скелет машет рукой, но если на её пути есть препятствие, рука как тру физическое тело в него упирается (может, даже немного отскакивает, колышется и т.д.).
Или если в скелета прилетает что-то, то кости, куда это что-то попало, как-то на это реагируют, смещаются немного, а потом возвращаются на место.
Ну и, самое главное, чтобы было и обратное взаимодействие. То есть, если скелет выпрямил руку, он оттолкнул то, что перед ним, или оттолкнулся сам, в зависимости от того, что перед ним.
Аноним 13/01/21 Срд 21:10:00 #52 №720583 
>>720568
Вот там на экране ползунок от 0 до 1, blend weight. В годоте это называется Blendspace1D https://docs.godotengine.org/en/stable/classes/class_animationnodeblendspace1d.html

Это достаточный ответ на твой вопрос? Дальше сам? Или ещё сопли пожуём?
Аноним 14/01/21 Чтв 16:42:19 #53 №720690 
>>720583
Это вообще не ответ на мой вопрос. Я же сказал, что мне нужен не блендинг между двумя анимациями, а блендинг между физикой и анимацией, причём работающий и в обратную сторону (анимация может порождать физическое воздействие на окружающие объекты).
Аноним 14/01/21 Чтв 16:46:23 #54 №720692 
>>720568
Это называется Inverse Kinematic, да такое возможно но работы будет много.
> если скелет выпрямил руку, он оттолкнул то, что перед ним, или оттолкнулся сам, в зависимости от того, что перед ним.
Ты вообще много таких игр видел? А сделанных одиночками?
Аноним 14/01/21 Чтв 16:49:33 #55 №720693 
>>720692
Ну так я и не хочу сам это делать. В уе есть такая фича, я спрашиваю, есть ли она в годо. Мне она нужна, а уе из-за неё одной я не хочу использовать.

Inverse Kinematic я смотрел немного, и это не совсем то, что мне надо. Мне нужна именно динамика, то есть физическое взаимодействие с миром, а не просто подстройка положения костей под определенные ограничения.
Аноним 14/01/21 Чтв 16:57:01 #56 №720695 
>>720693
Нет, без "сам делать" нет.
Аноним 14/01/21 Чтв 16:57:46 #57 №720696 
>>720695
Хорошо.
Аноним 15/01/21 Птн 01:56:14 #58 №720831 
>>720352
Благодарю.
Аноним 16/01/21 Суб 19:06:56 #59 №721479 
Редактор-кун, ты жив?
А то не слышно в последнее время
Аноним 16/01/21 Суб 19:40:26 #60 №721495 
>>721479
Начался трудовой год, всю неделю запары жоские на работке были. Вообще не притронулся к коду. Но напоминаю, не притронулся к коду демо-примера, само ядро редактора готово давно, еще в декабре. Могу хоть щас выложить.
Щас кумёкаю над темой ТВГ. Буду участвовать. Если всё получится, то моя ТВГ-игра и будет этим примером использования редактора локаций. Код выложу. Хуле там.
Аноним 16/01/21 Суб 22:45:29 #61 №721614 
ребят, я конечно понимаю что мне нужно видео карту обновить, но может есть какой то вариант потыкать 4 версию без вулкана?
Аноним 16/01/21 Суб 23:49:27 #62 №721628 
1610830166422.png
>>721614
Насколько я знаю, в четвёрке остаётся ГЛЕС2. Как раз для встроек.

Ребят, тут реальная проблем нарисовалась. Пикрелейтед. Если ускорение acceleration сильно меньше, чем замедление deceleration, то при быстром тыканьи клавиш управления, если все клавиши отпущены, срабатывает логика замедления и персонаж не разгоняется до полной скорости. Надеюсь внятно описал проблему. Что делать? Как забороть? Вводить койот-тайм на клавиши? Это же пиздец будет.
Аноним 17/01/21 Вск 00:42:35 #63 №721644 
>>721495
Не, не, просто проверял, живой ты или не очень. Если живой - это прекрасно.
Только это, можешь приложить пример пустой карты с парой тайлов на обоих слоях? Чтобы не было бесконечных ЧЯДНТ.
Аноним 17/01/21 Вск 16:34:54 #64 №721767 
Сегодня разбирал код этой своей технодемки, и подумал, а для чего мне переменная FRICTION, если у меня всё равно нет плавных движений.
Оказалось, что в состоянии IDLE английским по синему прописано motion.x = 0.
Иногда это может доставить веселья, даже если вы не погромист.
Аноним 17/01/21 Вск 19:07:27 #65 №721809 
image.png
А где искать доки на некоторые параметры?
https://docs.godotengine.org/en/3.0/classes/class_gridmap.html
Некоторые вещи вообще умещаются на одну страницу гугла, типа cell_octant_size.
Аноним 17/01/21 Вск 19:50:13 #66 №721825 
image.png
>>721809
А, всё, отбой, пересекается с гуями.
Аноним 18/01/21 Пнд 09:51:17 #67 №721957 
1610952676590.png
Я походу единственный, кто юзает draw_... функции. Но всё же спрошу. Если рисовать полилинию, которая согнута острыми углами, то в этих острых углах у неё неверно рассчитывается толщина. Как побороть проблем? Пикрелейтед.
Гугл говорит, типа, да проблема есть. Решений нет. Придётся рисовать отдельными сегментами штоле?
Аноним 18/01/21 Пнд 12:20:23 #68 №721989 
https://youtu.be/1mI04gPhd3E?t=216[РАСКРЫТЬ][РАСКРЫТЬ]
Объясните, что он говорит про процессы с этой 3:36 (таймер поставил). Вроде понял, но чет не до конца въехал, хотелось бы объяснение для тупых на великом и могучем
Аноним 18/01/21 Пнд 12:34:11 #69 №721993 
>>721989
Там субтитры с потраченным гуглопереводом. Рикаминдую!
Аноним 18/01/21 Пнд 12:40:19 #70 №721995 
>>721989
Ну а по сабжу: физический движок (хоть буллет, хоть собственный, хоть если ты туда ньютон вконпелируешь) обладает своими фреймами, которые считаются отдельно и фиксированно, графический фпс у тебя может быть 60, 30, с проп... просадками до 3, но физический фпс всегда маслает по таймеру одинаково, как ты выставил в настройках (по дефолту 60 ФПС). Поэтому для обработки физических параметров существует отдельный колбэк physics_process (в других движках fixed_update, например), в котором настоятельно рекомендуется обращаться к физическим параметрам физической симуляции.
Аноним 18/01/21 Пнд 12:47:25 #71 №721998 
>>721995
Ну и дальше, поскольку KinematicBody это не совсем физика, то есть, упрощённая физика, то ему не обязательно юзать физик_процесс, и он юзает просто _процесс, типа это помогает с проблемами при дрожании. Далее мой комментарий от себя: Например move_and_slide внутри себя юзает дельту физического сервера, которую берёт прямо на физическом сервере, так что неважно, откуда она будет вызвана. А вот move_and_collide уже дельту сама не берёт и её вызов из обычного _процесс может быть неточным.
Аноним 18/01/21 Пнд 13:42:32 #72 №722007 
>>721995
>>721998
Так-с, стало понятнее. Большое спасибо
Аноним 18/01/21 Пнд 17:30:22 #73 №722073 
image.png
>>719977 (OP)
Блять, сколько видео с хитбоксами не нахожу - везде покадровый дрочь с этими прямоугольниками. Нет способа с покадровым хитбоксом, типа маской, повторяющей форму удара, которую можно было бы закинуть, и она автоматом подгрузилась? А то вот так вот дрочить и все равно получать неровности.... Чай игра с пикселями, а не йоба-3д с дохулиард полигонами
Аноним 18/01/21 Пнд 17:51:46 #74 №722082 
>>722073
Сделай двумерный массив (матрицу) хитбоксов, выключенных по умолчанию и в анимации включай те, которые соответствуют лезвию клинка в этом кадре, а остальные отключай. За производительность не скажу. Т.к. это пул, то производительность не должна просесть. Но проверяй сам.
Обращение к сгенерированным узлам в любой момент Аноним 21/01/21 Чтв 00:18:25 #75 №722728 
image.png
Сделал простенький скрипт рандомной генерации комнат и расположения дверей в них. Двери спавню в цикле и сразу же расставляю в нужные места, впоследствии с этими дверьми мне нужно в любой момент взаимодействовать (активировать анимацию закрытия когда в комнату заходит персонаж).

Как я понимаю с кодом на скриншоте - такое сделать у меня не получится. Тогда как вызывать узлы (сцены) и при этом иметь возможность в любой момент (а не только при создании) к ним обращаться?
Аноним 21/01/21 Чтв 08:53:19 #76 №722753 
>>722728
У тебя грид содержит целочисленные значения? Заведи там словарики вида {"index" : 1, "object" : null}
Тогда, обращаясь к гриду, ты будешь делать так if grid[y2][x2].index = 1: grid[y2][x2].object = DEFAULTDOOR.instance()
Аноним 21/01/21 Чтв 08:58:39 #77 №722755 
>>722728
Можно сделать вариант на чайлдах. Тогда надо в код двери добавить имя класса, например class_name DefaultDoor после чего в коде парента, который у тебя в коде указан, можно делать такой код for child in get_children(): if child is DefaultDoor: do_something_with_door() но этот код хорош только для массовой работы со всеми дверьми. Вызывать его для обращения к конкретной двери - тупо, плохо, нирикаминдую.
Аноним 21/01/21 Чтв 10:13:53 #78 №722767 
>>722753
Не дописал очевидное. Теперь, когда в гриде словарик со ссылками на инстансы, ты в любом месте можешь по координатам обратиться к ячейке грида, и работать с инстансом в поле object: grid[3][7].object.open = true
Аноним 21/01/21 Чтв 10:49:23 #79 №722774 
>>722767
Понял идею, спасибо большое
Аноним 21/01/21 Чтв 14:20:24 #80 №722812 
Годаны, что не так? Если я написал класс, то при создании объекта класса надо ведь делать .new() так? Я пишу:
extends Control
var my_obj: MyClass
func _ready():
my_obj = MyClass.new()

И теоретически теперь всегда переменная my_obj должна что-то значить. Ну уж точно не null. Однако почему-то она null. В смысле, это буквально весь код (только имена другие), остальное я спрятал под комменты. Но даже если дальше в _ready обратиться к my_obj, то он всё равно будет null. Что за неведомое проклятье? Куда искать? Где копать?
Аноним 21/01/21 Чтв 14:47:04 #81 №722817 
>>722812
> Однако почему-то она null.
Сам дебаггер это говорит фразой null reference exception или это ты так предположил, потому что класс не работает?
Если второе, то опять же если ты наследуешься от потомков Node, одного .new() мало. Недо новосозданную ноду ещё в дерево добавить. Как правило в чайлды самому создающему:
var my_obj: MyClass
func _ready():
my_obj = MyClass.new()
add_child(my_obj)
Аноним 21/01/21 Чтв 15:01:54 #82 №722820 
>>722817
>Сам дебаггер это говорит фразой null reference exception или это ты так предположил
print(my_obj) говорит null. Принту я верю.
>если ты наследуешься от потомков Node
Тащемта нет, нода после создания уже будет не null. Но в моём случае класс наследуется от Resource.
Но таки да, я тупой. Ошибку сделал там, где вообще не ожидал. И долго не мог её увидеть или как-то отловить. Не поставил нижнее подчёркивание перед ready, вот оно и не вызывалось.
Аноним 21/01/21 Чтв 21:49:49 #83 №722887 
>>721957
Да, декомпозиция наше всё
Аноним 21/01/21 Чтв 22:11:12 #84 №722891 
>>722887
Я так ебашу. Не баг, а фича. И пох. Ну, может на второй неделе заморочусь.
Аноним 22/01/21 Птн 20:20:14 #85 №723063 
>>719977 (OP)
Зачем мне использовать load если я могу использовать preload?
Нихуя не понял
Аноним 22/01/21 Птн 22:41:49 #86 №723106 
>>723063
Лоад грузит в момент вызова. Прелоад грузит при запуске приложения.
В зависимости от ситуации (объём ресурсов, тяжесть инициализирующих эти ресурсы скриптов, наличие SSD в системе), выгоднее либо пропукать прелоадами все будущие объекты, чтобы фризы от их загрузки в момент создания не мешали играть, либо наоборот, быстро загрузить уровень и пропукивать по мере надобности лоадами.

Аноним 23/01/21 Суб 01:34:40 #87 №723212 
>>723106
Понял, спасибо. Значит в нетребовательных играх особой разницы нет
Аноним 23/01/21 Суб 14:53:33 #88 №723283 
>>723106
>фризы от их загрузки
этот ваш годот не умеет в многопоточность или че?
Аноним 23/01/21 Суб 15:12:30 #89 №723287 
1611403949003.png
>>723283
Годот-то умеет. Мы не умеем!
Аноним 23/01/21 Суб 17:29:22 #90 №723312 
Меня годот отталкивает своим GDScript'ом. Хороший движок должен требовать по минимуму специфических знаний, а знание GDScript - именно специфическое. Я уже и так слишком много всего знаю, чтобы забивать бошку ещё одним языком, даже супер-пупер клёвого. Внедрение C# - это их шаг в правильном направлении, но всё же пусть ещё добавят JS или Lua, тогда посмотрим.
Аноним 23/01/21 Суб 18:01:46 #91 №723328 
>>723312
>JS или Lua
Нинужно.
Аноним 23/01/21 Суб 19:13:06 #92 №723344 
> $13,644
> PER MONTH
Ебануться, больше чем по ляму рублей в месяц только с патреона собирает. Надо будет попробовать, чё такое.
Аноним 23/01/21 Суб 19:15:01 #93 №723346 
>>723312
Lua уже есть. И афтор прям нахваливает. Дерзай.
Тока там специфичные знания не в гдскрипте. Без знания объектного дерева движка ты и на луа немного накодишь. АПИ учить всё равно придётся.
А объектное дерево будут переделывать в четвёрке. Все затаились в ожидании. Кто не успел выучить и не начинает учить. Кто выучил (я) не торопится углублять знания.
Аноним 23/01/21 Суб 19:29:52 #94 №723351 
>>723312
https://github.com/perbone/luascript
https://github.com/GodotExplorer/ECMAScript
Аноним 23/01/21 Суб 21:52:32 #95 №723376 
>>723344
Так там зарплаты минимум 6 человек получает на фуллтайме. Это копейки.
Аноним 23/01/21 Суб 23:24:23 #96 №723401 
1611433461986.png
В целях процедурной генерации пришлось только что переписать на гдскрипт функцию shuffle из исходников.
Всё правильно свелосипедил? Или я проглядел возможность перемешивать массивы с фиксированным сидом?
Аноним 24/01/21 Вск 10:37:50 #97 №723438 
>>723401
Первое, что бросается в глаза: зачем использовать конструкцию
> if n < 2: return
когда можно написать
> if n > 1:
и херачить свои циклы?
больше одного ретурна в функции вообще редко оправдано и часто признак новичка.
кто-то набыдлокодил, а ты бездумно обезьянничаешь
Аноним 24/01/21 Вск 10:54:16 #98 №723439 
>>723438
А в данном случае и так один ретурн, кек.
Вообще, condition nesting vs guard clauses - холивар, идущий уже полвека. Моё мнение, что проверки с ретурном в начале функции допустимы. А вот в середине будь добр не выходи.
Аноним 24/01/21 Вск 12:08:35 #99 №723440 
>>723346
Какая нахуй четверка? Я только учить начал вот же бл...
Аноним 24/01/21 Вск 13:18:12 #100 №723445 
1611483491676.png
>>723438
>>723439
А как вам такой код, годаны?
Аноним 24/01/21 Вск 13:18:57 #101 №723446 
>>723445
Ой, n от старого кода осталась. Удолил.
Аноним 24/01/21 Вск 13:19:50 #102 №723447 
>>723445
Ретурнов нет. Ибо входящий массив приходит по ссылке.
Аноним 24/01/21 Вск 19:31:32 #103 №723509 
>>719977 (OP)
сука рот ебал
пчоему я могу написать if x != null, но не могу написать if x = null и получаю аНиКсПеКтЕд АсСиГн?!
Аноним 24/01/21 Вск 20:10:23 #104 №723517 
>>723509
Ты школьник? Зачем тебе годот?
Аноним 24/01/21 Вск 21:22:38 #105 №723538 
>>723509
if x == null
Аноним 25/01/21 Пнд 01:03:25 #106 №723585 
>>723517
Нет. Хочу разбогатеть, заиметь свою игровую студию. Вопросы?

>>723538
спасибо
Аноним 25/01/21 Пнд 02:26:59 #107 №723600 
Вот же, а в AStar не задать вес ребра, придется качать питонячью либу.
Аноним 25/01/21 Пнд 09:18:08 #108 №723629 
>>723600
Вес ребра это не вес ли обеих его вершин? Средний? Минимальный? Я не в курсе, но считается одной строчкой кода. Веса вершин есть. Просто берёшь без задней мысли их и юзаешь.
Аноним 25/01/21 Пнд 13:31:47 #109 №723671 
1493962854745.png
1570439101285.png
>>723629
>Вес ребра это не вес ли обеих его вершин?
Вес ребра это вес ребра, но функция connect_points вес рёбер не принимает.
(Думаю очевидно, что не во всех играх нужна просто цена клетки - например, если зайти из клетки леса в клетку воды стоит не столько же, сколько выйти из воды).
Пока что выглядит так, что мне надо отнаследоваться от AStar, переопределить _compute_cost и уже в ней считать ребра самому для соседних клеток. Судя по всему, туда же надо будет совать всякие рандомизаторы и подгонки, помогающие спрямлять путь (по дефолту он не очень в самом алгоритме AStar)
Аноним 25/01/21 Пнд 13:43:08 #110 №723674 
>>723671
> Вес ребра это вес ребра
Так неохота матчасть гуглить.
Аноним 25/01/21 Пнд 13:49:54 #111 №723676 
1611571793977.png
>>723671
> мне надо отнаследоваться от AStar, переопределить _compute_cost и уже в ней считать ребра самому
Ну как бы да. Пикрелейтед.
Аноним 25/01/21 Пнд 14:40:53 #112 №723685 
1496596578215.png
>>723676
Не идеально, но уже получше.
Аноним 25/01/21 Пнд 14:44:39 #113 №723687 
>>723685
Эм, крос в 24 строке это не кросспродукт? Кажется он в движке есть. Внутри на сях посчитаный.
Аноним 25/01/21 Пнд 15:05:18 #114 №723693 
>>723687
Это кросс, но считать его не от чего - сначала тогда придется конструировать новые векторы. (Тут вообще много нехорошего, например координаты сначала упаковываются в айди узлов, чтобы уйти в api, потом распаковываются).
Оптимизация пока не интересует, это ж для ТВГ. Потом хоть на сях переписать.
Аноним 25/01/21 Пнд 16:20:35 #115 №723709 
>>723693
Что значит "не от чего" ты по факту делаешь current.cross(goal) только велосипедом на несколько строк.
Аноним 25/01/21 Пнд 21:00:33 #116 №723745 
а в движке ентом можно списки ui-ные ебашить по быстрому?
Аноним 25/01/21 Пнд 23:13:57 #117 №723770 
>>723745
Не совсем понел шо ты имеешь ввиду? Приведи пример на своём языке программирования, а я покажу, как это у нас зделоть.
Аноним 26/01/21 Втр 10:38:54 #118 №723828 
>>723770
ну вот в нативном андроиде есть простые списки, как в телефонном справочнике, или плитка в галерее картинок.
Вопрос в том, есть ли возможности запиливать такие списки быстро, не рисовать самому. Мне нужен например список уровней в моей головоломке
Аноним 26/01/21 Втр 10:54:39 #119 №723829 
1611647678704.png
>>723828
Есть как минимум два варианта:
1) специальный объект-список, в который без задней мысли пихаешь айтемы, назначаешь им текст, иконку, объект аналогичен по функционалу классическим лист-вью-ле-виртуаль.
2) ноды-контейнеры, автоматически выравнивающие своих потомков. В такой контейнер ты можешь без задней мысли накидать кнопок, которые представляют собой запускаемый уровень. Я предпочел этот способ на нынешнем ТВГ.
Аноним 26/01/21 Втр 10:59:43 #120 №723831 
>>723829
а если у меня 200 уровней, 200 нод в памяти будет?
Аноним 26/01/21 Втр 11:04:07 #121 №723832 
>>723831
Слушай, без обид, но этот вопрос очень тупой. Мой тебе дружеский совет - подтяни матчасть. В любой среде программирования, если тебе не хватает памяти - ты делаешь постраничный вывод инфы. В переложении на мобильные игры - это наличие двух кнопок "вперед"/"назад" и фиксированное количество кнопок-уровней. Выведены с 1го по 20й. Нажимаешь вперёд - выводятся с 21го по 40й. Это знать надо! Это классика, блять!
Аноним 26/01/21 Втр 15:26:40 #122 №723856 
>>723832
это ты матчать подтяни, умник. В нормальных фреймворках ноды переиспользуются. Дохуя в своем айфоне или андроиде постраничного вывода в списках видел как на сайтах из 2000?
Аноним 26/01/21 Втр 15:49:24 #123 №723858 
>>723856
Переиспользуй ноды. Кнопок всё ещё двадцать, а названия меняются. Это и имелось ввиду, умник.
Аноним 26/01/21 Втр 15:52:52 #124 №723860 
>>723346
>А объектное дерево будут переделывать в четвёрке.

Как и в какую сторону? даже интересно стало
Аноним 26/01/21 Втр 16:01:47 #125 №723863 
>>723860
https://gist.github.com/Calinou/49aefe52ce8f67ffa3f743932123d14f
Аноним 26/01/21 Втр 16:14:00 #126 №723866 
>>723858
чтобы это выглядело как говно из двухтысячных, нет спасибо
готового listview нет, все понятно
Аноним 26/01/21 Втр 23:15:53 #127 №723932 
>>723866
> все понятно
Ага, пойди похвастайся победой в срачетреде.
Аноним 27/01/21 Срд 08:24:29 #128 №723957 
1611725068500.png
>>723866
> готового listview нет, все понятно
>>723829
> 1) специальный объект-список, в который без задней мысли пихаешь айтемы, назначаешь им текст, иконку, объект аналогичен по функционалу классическим лист-вью
Аноним 27/01/21 Срд 13:08:22 #129 №723977 
>>723957
ну хорошо, я обосрался, прошу прощения

А как в вашем годоте с подключением либ нативных?
Мне позарез нужна аналитика от яндекса
Аноним 27/01/21 Срд 14:24:59 #130 №723990 
>>723977
Нативные либы подключаются через паттерн проектирования "адаптер". Имеется АПИ нативных расширений. С его помощью пишешь адаптер в нативную либу. Итого в комплекте поставки твоей игры будет либа-адаптер плюс сторонняя либа. В этом варианте ты конпелируешь только свой адаптер. Второй вариант: встроить адаптер в сам движок модулем. Это потребует перекомпиляции движка, причём с редактором и без редактора (для экспорта) отдельно.
Всё описано в документации.
Аноним 27/01/21 Срд 14:42:34 #131 №723993 
>>723709
Нет, в том то и дело, что я делаю (current-goal).cross(start-goal). Легко проглядеть.
Аноним 27/01/21 Срд 15:00:47 #132 №723994 
1568722026677.png
1585199274404.mp4
>>723866
Дружище, это игровой движок, там будет выглядеть так, как офоримт художник текстурки, вот чувак делает РПГ как можешь заметить там все на зеленых контролах, просто стили навешаны.
Аноним 27/01/21 Срд 15:03:00 #133 №723995 
>>723977
Посмотри тут, кто то делал год назад
https://github.com/DrMoriarty/godot-yandex-ads
Аноним 27/01/21 Срд 15:15:32 #134 №723996 
так что же это получается. Я могу не учить opengl, а сразу сесть и пилить игру?
Аноним 27/01/21 Срд 15:23:37 #135 №723997 
>>723996
Учить всегда полезно. Если чего-то не будет хватать, будешь дописывать сам. Шейдеры, опять же, для красивости все равно свои писать.
Аноним 28/01/21 Чтв 11:51:05 #136 №724163 
Едрить я дебил!
Это ж так удобно, въебенить в ноду встроенный скрипт!
Сделал кучу сцен копированием, и теперь этот встроенный скрипт вшит в сцену и перекрывает изменения во вложенных объектах. Как почистить, кроме ручной правки tscn?
Аноним 28/01/21 Чтв 14:44:06 #137 №724180 
image.png
image.png
>>719977 (OP)
Код чисто для примера за секунду. Объясните, пожалуйста, зачем в скобках писать слово "value" ? Второй скрин из фака. Я так понимаю, что это чисто пометка, которая ни на что не влияет или что?
ваще не бум-бум в вашем программировании, иду по приборам
Аноним 28/01/21 Чтв 14:57:32 #138 №724182 
>>724180
Влияет, анон.
Сеттер - когда ты присваиваешь значение (set)
Геттер - когда ты получаешь значение (get)
Соответственно, сеттер - это всегда должна быть функция с параметром, который и будет присвоен, а геттер - это всегда функция, возвращающая значение того типа, с которым ты работаешь.
Всё просто же.
Ты неправильно используешь сеттер в своём примере. Сеттер вообще не для этого нужен (у тебя в коде декремент, уменьшение на единицу).
Сеттер нужен, когда тебе надо проверить новое значение.
Ща примерчик накатаю, развеюсь. А то уже башка кипит от ТВГ.
Аноним 28/01/21 Чтв 15:09:27 #139 №724185 
>>724182
>>724180
Держи https://pastebin.com/884Rd9Gk
Аноним 28/01/21 Чтв 15:10:56 #140 №724186 
>>724185
О, и я ошибку допустил. Править лень. Внимательно прочитай комменты в коде и найди ошибку.
Аноним 28/01/21 Чтв 17:04:38 #141 №724198 
image.png
>>724182
>>724185
>>724186
Вроде стало понятнее, спасибо.
Правильно выделил ошибку?
Аноним 28/01/21 Чтв 18:02:20 #142 №724199 
>>724198
Не, ошибка в принте
> print(test)
Не вызовет геттер и если в геттере были какие-либо проверки, они, стало быть, не пройдут. Правильно будет
> print(self.test)
Аноним 28/01/21 Чтв 18:14:22 #143 №724201 
>>724199
аэ, да, точно
Аноним 30/01/21 Суб 14:02:24 #144 №724431 
Годаны! Обнаружил странное явление. Проверьте у себя, это баг или чоа?
1. создаёшь переменную var t : float = OS.get_unix_time()
2. выводишь print(t, "\t", OS.get_unix_time())
Ожидается: два одинаковых числа, ибо различия в микросекундах не учитываются юникстаймом.
Получается: два разных числа, различающиеся на 40..50 секунд.

Я отдельно проверил онлайн-конвертером. OS.get_unix_time() это именно тайм без микросекунд.
Аноним 30/01/21 Суб 14:03:36 #145 №724433 
>>724431
А, и да. Если t : int проблемы нет, проблема вылезает во время приведения инта к флоату.
Аноним 30/01/21 Суб 15:51:47 #146 №724441 
1493570213000.png
>>724433
Да, это норма.
Флоаты не подходят для хранения одновременно большого и точного числа - выбери что-то одно.
Аноним 30/01/21 Суб 18:18:15 #147 №724458 
>>724441
Бля, стыдно. Такое следовало бы знать. Ну ничего, у меня числа небольшие.
Аноним 30/01/21 Суб 18:21:49 #148 №724459 
может быть кто-то хочет немного заработать? мне нужен простой проект крестиков ноликов - 1й экран с парой кнопок, одна из кнопок начать - открывает второй экрак, где нарисовано пару крестиков ноликов, кружочков квадратиков. Никакой логики не надо, только это. оплата битком @airmode77
Аноним 30/01/21 Суб 21:43:13 #149 №724480 
>>724459
Как финалку отправлю на ТВГ, могу помочь. Это послезавтра. Если другие анончики не перехватят.
Аноним 30/01/21 Суб 21:45:00 #150 №724481 
>>724480
>Как финалку отправлю на ТВГ
Дай потом посмотреть, хоть полюбуюсь на редахтур в действии
Аноним 30/01/21 Суб 21:55:21 #151 №724483 
>>724481
Какерман? Нет никакого редахтура. Увы. Выяснилось, что хранить уровни в виде искаробочных (t)scn-сцен практичнее, чем тот велосипед, что я написал две недели назад.
Как ТВГ закончим, будем разбирать полёты. Годот в принципе позволяет паковать наборы сцен в отдельные пак-файлы, а затем эти пак-файлы загружать. Следовательно, твоя задача, если я её правильно понимаю, сводится к тому, чтобы поставить мод-мейкерам твоей будущей игры набор прокси-классов-пустышек в составе проекта-шаблона, из которых они соберут мод-уровень, после чего экспортнут свой проект в пак-файл, положат этот пак-файл в папку модов игры, игра подхватит, если всё правильно, и отобразит контент в игре.
Аноним 30/01/21 Суб 22:47:10 #152 №724493 
>>724483
Хм.
То есть, лучше написать сохранялку, которая будет сохранять сцену каждый раз, когда игрок выходит из комнаты?
Получается, при новой игре сцены 200 файлов просто копируются в папку %save_name1% и изменяются по надобности?
Как-то печально звучит.
Аноним 30/01/21 Суб 22:49:54 #153 №724494 
>>724493
Нет, зачем, ты что? Как можно было ТАКИЕ выводы сделать?
Аноним 30/01/21 Суб 23:15:16 #154 №724496 
>>724494
Хм.
А какие тогда выходы?
Может, я бы и придумал чего получше, но не зная методов...
Аноним 30/01/21 Суб 23:26:32 #155 №724498 
1612038391345.png
1612038391442.png
1612038391445.png
>>724496
Метаданные и конфиги. Тут надо рассматривать на примерах. Вот, смотри, пикрелейтед конфиг по факту. Игра в процессе работы пишет в него данные, затем они сохраняются в файл, а при загрузке игры загружаются из файла и ты можешь продолжить играть с предыдущего места. Заметь, на пикче 1 нет части данных с пикчи 2, ибо эти данные записывает локация отдельно у себя при выполнении игровой задачи, в пикрелейтеде 3.
Этот вариант на скринах - простейший. А можно делать гораздо более сложные составные файлы, которые будут грузиться секциями, по индексу, ибо если файл в несколько десятков мегабайт, будет нерационально его держать в памяти целиком. А при блочной загрузке, загружаемая локация знает свой индекс, просит у загрузчика загрузить из файла блок с таким-то индексом. После чего поднимает сохранённые данные из полученного блока данных. При своей выгрузке локация просит загрузчик сохранить подкорректированный ею блок данных опять в файл с этим индексом.
Аноним 31/01/21 Вск 01:25:04 #156 №724506 
image.png
Годотаны, выручайте. Час искал ошибку в расчётах, понял, что в одном вычислении всегда получается ноль (pri). Как так?
Аноним 31/01/21 Вск 01:30:15 #157 №724507 
image.png
>>724506
Всё, я сам разобрался, сам болван.
Аноним 31/01/21 Вск 01:33:10 #158 №724508 
Суп, годотаны. Мне нужна ползущая шкала времени с отметками, вроде той, что во Фростпанке: большая линейка, разделённая по секундам и ходам, застывающая во время паузы.
На неё будут периодически добавляться маркеры (к примеру, если противник начал ченнелить какой-нибудь зловредный скилл, на линейке появляется отметка, что через секунду всем неувернувшимся станет больно, и она движется вместе с линейкой). И мне пока не нравятся идеи реализации, которые приходят мне в голову.

Очевидный метод номер 1: держать спрайт огромной длины, который постепенно проезжает по HUDу, а маркеры добавлять ему в детей будет работать хорошо, но как-то тупо. И если он таки закончится, будет некрасивая ситуация.

Можно делать спрайт в 2-3 экрана шириной и хитро копировать/вставлять его, когда заканчивается, перенос маркеров на нужный лист — не то чтобы очень хитрая процедура, но если мне захочется добавить, к примеру, номер хода, будет чуть побольнее. С другой стороны, на кой чёрт он мне там сдался?

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

Может я не замечаю очевидный готовый велосипед? Как бы сделали вы? В начале написания склонялся к первому, но пока писал, сообразил, что «сшить» два спрайта в общем-то совершенно просто.
Аноним 31/01/21 Вск 01:34:20 #159 №724509 
image.png
>>724507
А теперь кто объяснит, где я накосячил в r и q?
Или q как float из-за sqrt(3) воспринимает, а с r такого не случилось?
Аноним 31/01/21 Вск 01:47:11 #160 №724510 
>>724509
И вот я ещё раз болван. Вот поэтому ещё с универа я любил статическую типизацию данных.
Аноним 31/01/21 Вск 12:30:44 #161 №724538 
>>724508
ЯННП.
Можешь схематично нарисовать в пейнте, что конкретно ты хочешь?
Аноним 31/01/21 Вск 13:00:27 #162 №724542 
как в движке с подключением всякой социальной херни, типа фейсбуков, твиттера, рейтингов гугл игр?
Аноним 31/01/21 Вск 13:04:33 #163 №724544 
ктонибуть из двачеров запилил что-то до конца? хотелось бы посмотреть
Аноним 31/01/21 Вск 15:17:17 #164 №724569 
>>724498
Нет в мире более демотивирующей фразы, чем "Да, но с этим придётся пердолиться".
Ладно, спасибо за совет.
Аноним 31/01/21 Вск 15:35:16 #165 №724575 
1612096514110.png
>>724569
> пердолиться
Без труда не вытянешь и рыбку из пруда.
Аноним 31/01/21 Вск 15:43:24 #166 №724581 
image.png
>>724575
Да, пожалуй ты прав. Попробую пойти курить мануалы.
Да ёбаный рот я ж гей-дезигнер а не погромизд за щито мне всё это.......
Аноним 31/01/21 Вск 17:42:56 #167 №724621 
>>724510
Так ты и тут можешь. Что-то типа
var a : float = 3.0 / f
Аноним 31/01/21 Вск 17:53:46 #168 №724625 
>>724508
>«сшить» два спрайта в общем-то совершенно просто
Там была галочка Repeat texture при импорте, это вроде бы зацикливание картинки на спрайте.
> в игре постоянно появляются и исчезают объекты, которые не делают ничего.
Для такого используют пул объектов, тогда ничего не создается лишнего.
Аноним 31/01/21 Вск 21:20:05 #169 №724694 
4.jpg
>>724538
Мои извинения. Я потом перечитал, и понял, что ясная картина сложилась только у меня в голове, а на экране вышло говно.
Вот живой пример примерно того, что мне нужно: шкала, на которую указывает жырная корявая стрелка, постепенно лезет влево и отмеряет время. Как только она дойдёт до жёлтого символа, температура в игре повысится, и, если время было ускорено, оно притормозит, потому что игроку надо на это реагировать, и всё такое.
Вот примерно такая же ползущая шкала времени мне и нужна, только я хочу сделать её здоровой и точек на неё наносить побольше.

>>724625
Зацикливание задников и всяких кусков параллакса я точно помню. Настройка этого дела — вечная неочевидная боль, ну или я просто редко это делаю. Надо будет глянуть, но если для этого придётся тянуть длинный-длинный спрайт, то получится как раз первый вариант, только без дурацкой длинной текстурины на диске.
Аноним 31/01/21 Вск 21:52:49 #170 №724706 
>>724694
> Вот примерно такая же ползущая шкала времени мне и нужна
Тебе поможет обжект пул! Не надо никакого длинного спрайта. У тебя есть шкала, по ней из стороны в сторону движутся маркеры. Стало быть, маркеры ты делаешь отдельными спрайтами, организуешь их в массив, который и будет пулом. И двигаешь их по шкале вправо-влево, согласно твоей логике.
Уверен, во фростпанке на скрине организовано так же.
Аноним 31/01/21 Вск 22:06:17 #171 №724710 
>>724706
Да, но на шкале кроме значимых маркеров есть ещё и риски, которые явно не стоят того, чтобы ради каждой из них заводить отдельный объект в дереве.
Я, кстати, сообразил, как обойтись одним недлинным спрайтом: просто в момент переключения хода надо добавить «возврат каретки»: сдвигать шкалу на ход назад, а маркеры — на ход вперёд относительно неё, и не сношать себе мозг. Ладно, спасибо, пойду куда-нибудь в папку с манялгоритмами это запишу, чтобы не совсем потерялось.
Аноним 31/01/21 Вск 22:18:37 #172 №724715 
1612120715937.png
>>724710
> явно не стоят того, чтобы ради каждой из них заводить отдельный объект в дереве
Стоят. Просто их надо добавлять в пул с отдельным параметром, чтобы при достижении конца своего пути по шкале, он не "сдвигали каретку", а уничтожались.
> надо добавить «возврат каретки»: сдвигать шкалу на ход назад
Именно. Я тут тебе пример накатал, а ты уже сам понел.
Аноним 31/01/21 Вск 22:51:43 #173 №724722 
1612122702082.mp4
>>724715
https://pastebin.com/zSJiY8AD
Аноним 31/01/21 Вск 23:02:04 #174 №724727 
>>724722
Хочу подискутировать: сейчас они дрожат и колбасятся, особенно заметно там, где жёлтые с белыми соприкасаются. Плавнее, наверное, завести отдельную ноду, а их добавлять ей в потомки, и двигать родительскую ноду целиком. Тогда будет чуть больше возни с отлавливанием тех, кто уже уехал, но выглядеть должно намного лучше. Сегодня уже не буду проверять, сначала высплюсь, но проблем быть не должно.
Аноним 02/02/21 Втр 00:49:12 #175 №725344 
Коллективный разум, как ты делаешь систему прожектайлов/хитбоксов? Если прожектайл кинематик, а хитбокс — area, то удобно двигать прожектайл, но попадания отрабатываются целью, а не прожектайлом. (Мне, например, это неудобно, если я хочу, чтобы прожектайл взрывался и делал небольшое АоЕ.) Если наоборот — всё вроде как пишется проще, но в интернетах считают, что это говно идея.
Если оба кинематики, можно просто делать move_and_collide, но в таком виде они некрасиво столкнутся на границе хитбокса, а при взаимодействии kinematic body + area прожектайл успевает немного углубиться перед тем, как произойдёт проверка коллизии, и красиво взорвётся внутри.
Как делать нормально?
Кстати, это норма, что move_and_collide двигает тело раз в 10 быстрее, чем move_and_slide, или я поехал?
Аноним 02/02/21 Втр 16:57:28 #176 №725484 
>>724727
Тут две палки и обе о двух концах. Проблема в том, что этот пример я сделал на контрол-нодах (зелёненьких), а у них позиция приводится к целому. Потому всё и дрожит. Если сделать на синеньких нодах, будет плавно, но не будет свойств контролов, присущих контрол-нодам.
Аноним 02/02/21 Втр 16:58:32 #177 №725485 
>>725344
> это норма, что move_and_collide двигает тело раз в 10 быстрее
Документацию читать надо. move_and_collide не учитывает дельту. Читай документацию, там всё есть.
Аноним 02/02/21 Втр 21:42:49 #178 №725539 
>>725485
Ну ладно, ладно. Если все будут читать документацию, о чем писать в тред тогда?
Можно заставить кнопку полностью игнорировать правый клик, то есть превратить его в _unhandled_input?
>>725484
Ну те же всплывающие подсказки можно и самому сделать, например. А ещё можно сделать видимые спрайты, а поверх них — невидимые кнопки, и дрожание убрать.
Но мне всё равно кажется, что групповое движение лучше реализовывать через общего предка.
Аноним 02/02/21 Втр 21:48:39 #179 №725543 
>>725539
> о чем писать в тред тогда?
О том, чего нет в документации. очевидно же.
Аноним 02/02/21 Втр 22:16:06 #180 №725547 
>>725539
Анон, переписал на синенькие ноды https://pastebin.com/mwuJd6eJ и их тоже колбасит. Видос снимать нет смысла, всё такое же. Завтра попробую переписать на шейдер.
Аноним 04/02/21 Чтв 10:30:54 #181 №725894 
1488771699711.gif
Какая красота
https://godotengine.org/asset-library/asset/852
https://anima.ceceppa.me/demo/
Аноним 04/02/21 Чтв 10:32:00 #182 №725895 
>>725547
Шейдер ниасилил. Жизнь боль.
Аноним 04/02/21 Чтв 10:34:11 #183 №725896 
>>725484
>а у них позиция приводится к целому
Чиво
Аноним 04/02/21 Чтв 10:35:20 #184 №725897 
>>725894
Круто! А я говорил - ассеты и модули начнут нарастать как снежный ком. Сначала не замечают. Потом смеются. Потом топят. Потом побеждаешь.
Аноним 04/02/21 Чтв 10:37:17 #185 №725898 
>>725896
У меня так. Ну, я глазами вижу, что позиция приводится к целому - прыгает от пиксела к пикселю, минуя промежуточные дробные значения. Если я ЧДНТ, буду рад увидеть работающий вариант, без дрожания-скакания.
Аноним 04/02/21 Чтв 10:54:58 #186 №725899 
>>725898
Такое впечатление, что как раз наоборот, они рисуются сабпиксельно, но выглядит что они едут гармошкой - то в 2 пикселя, то в 1 пиксель шириной.
Аноним 04/02/21 Чтв 11:03:19 #187 №725900 
>>725899
Может и так. Мне не хватает скилла понять, что не так.
Аноним 04/02/21 Чтв 12:05:55 #188 №725906 
de7b467285142d39b3ce39d2d4228562.jpg
>>719977 (OP)
Спрашивал на ньюфаге, но там глухо, спрошу здесь.
Кароче у меня на чердаке есть настольная игра. которую я создал ещё лет 20ть назад, это что-то вроде героев и дисайплем, с рандомными картами для сражений, без экономики, но с прокачкой юнитов.
Планирую переделать её добавить, захват и обороны крепостей и в карте сражений добавить случайные тактические места, которые дают быфы или дебафы юнитам.
Вопрос, есть у когонить есть ссыль на открытый движок на годот с пошаговыми стратегиями в духе дисайплес или героев?
Так как я ни раз не программист, а скорее 3д аниматор, то самому кодить возможности нет(я пробовал, туповатс), а двигать картонные фигурки по разлинеенному полю, как то не айс.
Аноним 04/02/21 Чтв 12:25:26 #189 №725910 
>>725906
Движки, а точнее шаблоны проектов есть, но я уверяю, они будут ещё непонятнее тебе. Кнопки "зделоть зоебись" там нет.
Могу помочь с кодом. С тебя графон, я наоборот, шустро лабаю скрипты, а ф графон нимагу. Моя тележка @brightmike
Аноним 04/02/21 Чтв 12:50:11 #190 №725917 
>>725906
Сомневаюсь что есть готовое решение чтобы взять и засунуть туда графику.
А без кодинга в стратегиях никак - тебе как минимум ИИ боевки делать.
Аноним 04/02/21 Чтв 13:00:21 #191 №725920 
>>725917
>тебе как минимум ИИ боевки делать.
Ну я уже подумал об этом.
Глобальная карта статична и всё враги просто стоят и ждут, кроме игрока по карте будет двигаться всего один герой со своей армией, который просто будет считывать статистику врагов и нападать на них если они слабее.
Тактические бои тоже не будут не шибко умными. Рукопашники стараются дойти до стрелков, стрелки всегда стреляют по наиболее слабым. Всё происходит по очереди исходя из инициативы. Я думаю их интеллект не сложнее аркадных врагов.
Аноним 04/02/21 Чтв 13:03:24 #192 №725921 
>>725910
Этак тебя пол-треда мольбами/реквестами засыпет. Я бы и сам засыпал, тащта, но некультурно это.
Аноним 04/02/21 Чтв 13:56:28 #193 №725927 
>>725921
Разве? Я бы наоборот, на художника/моделлятора накинулся: душа просит доделать симулятор вайфу, а получается пиксельная параша.
Аноним 04/02/21 Чтв 14:16:01 #194 №725932 
>>725927
Чувак я избегаю визуализировать женщин и контент с ними я же старый сталкер и тнн.
Как и тебе наверное без особого желания захочется пилить игру другого чувака про роботов и космонавтов.
Аноним 04/02/21 Чтв 14:33:16 #195 №725933 
резак бежит.gif
>>725927
У меня у самого пиксельная параша получается.
И то обязательно сурс нужен. Без него выходит ещё вырвиглазнее.
Но кое-что всё-таки могу. Хуёво, конечно, но хоть так
Аноним 04/02/21 Чтв 14:55:01 #196 №725935 
>>725932
Вот потому я и не накидываюсь. Допилю proof of concept, убедюсь, что concept был так себе, и бог с ним. Ну а если концепт мне понравится — тогда можно и копилку распечатывать будет, не для того ли я регулярно на работку бегаю?
Кстати, подпилиться в чужую игру — это на самом деле весело, я по молодости время от времени пытался вкатиться на музыку, но ни разу, конечно, до релиза не доползал. Даже до релиза какого-нибудь трека, лол. Так и валяюся бесхозные наброски.
Аноним 05/02/21 Птн 09:03:01 #197 №726006 
>>725921
> Этак тебя пол-треда мольбами/реквестами засыпет. Я бы и сам засыпал, тащта, но некультурно это.
Скелет большинства игор описывается парой скриптов суммарно на 50 - 100 строк. Я поначалу запиливал универсальный шаблон, но быстро понял, что универсальность - зло. В этом вопросе изобретение велосипедов излишне, фактически, универсальный код уже вынесен отдельно и это (кто-бы мог подумать) и есть движки собственной персоной.

Тем не менее, есть некоторые вещи, которые в принципе не помешают никому в большинстве проектов. Я вот недавно задумался над тем, что в годоте мало тем юзер-интерфейса. Однако, в интернете есть куча сайтов, на которых бесплатно, т.е. даром выложены css веб темы. И вот я уже вторую неделю подумываю, а не написать ли конвертер css в формат годот-темы? Кому-то это может быть полезно?
Аноним 05/02/21 Птн 09:31:47 #198 №726010 
>>726006
> конвертер css в формат годот-темы?
Но есть одна проблема. 90% этих css тем гораздо быстрее по референсу в редакторе воссоздать, чем ебаться с написанием конвертера.
Аноним 06/02/21 Суб 18:24:01 #199 №726165 
>>726006
>Скелет большинства игор описывается парой скриптов суммарно на 50 - 100 строк
Кстати, сколько ананасиев уже прибегли к твоей помощи?
Аноним 07/02/21 Вск 12:09:55 #200 №726380 
>>726165
Ноль. Никто не пишет.
Какерман? Аноним 07/02/21 Вск 13:29:00 #201 №726402 
По вопросу конструирования левелов.
Вот я такой сбрасываю тебе этот левел-заготовку с прокси-скриптами из одних экспортов.
https://dropmefiles.com/Zlzkg
И ты такой конструируешь левел, как тебе хочется, и настраиваешь цвета, и настраиваешь параметры игрока. И потом ты мне бросаешь обратно десяток таких настроенных левелов. И я такой превращаю их в действительные левелы несложным скриптом, который кидаю в корень сцены левела, который проходит по чайлдам и создаёт функционирующие аналоги из имеющихся у него ассетов.
Таким образом в качестве редактора левелов выступает сам редактор годота на стороне мод-мейкера.
Аноним 07/02/21 Вск 14:17:02 #202 №726416 
>>726402
Но нахуя так заморачиваться?
Аноним 07/02/21 Вск 14:18:27 #203 №726417 
>>726416
Для пользовательского мод-контента, очевидно.
Аноним 07/02/21 Вск 15:13:08 #204 №726433 
1612699986924.png
1612699987025.png
>>726402
> превращаю их в действительные левелы несложным скриптом
Вот таким вот несложным индусским скриптом-фабрикой:
Аноним 07/02/21 Вск 16:03:13 #205 №726448 
image.png
https://youtu.be/GAEeE_tVQEI?t=875

Пробую писать код по этому туториалу, но столкнулся с такой проблемой - у него на видео (поставил таймкод) мыши начинают двигаться сразу, а у меня только после прохождения состояния CHASE (пункт 3 на пикче). Опытным путем понял, что это происходит из-за фунции seek_player (пункт 2) - он почему то автоматом кидает в стадию chase, где мышь и находится, пока я к ней не подойду, если ее убрать, то код "блуждания" (пункт 1) начинает исполнятся. То есть, чтобы код 1 исполнялся, нужно чтобы хотя бы раз исполнился код 3 (затем отбежать и смотреть как мышь исполняет код 1) и потом все работает корректно, хотя в пункте 4 вроде обозначен переход в другое состояние. Из-за чего такая ебала непонятно

Надеюсь +/- понятно объяснил
Аноним 07/02/21 Вск 16:11:22 #206 №726451 
>>726448
Видел этот туториал, правда прям по нему не делал, только уяснил основную идею и делал по своему.
Как правило такие ошибки происходят из-за глупейших мелочей, в которых потом невыносимо стыдно признаваться, наподобие проёбанного отступа где-нибудь при копипасте.
Совет тут может быть только один - принты и брейкпойнты, брейкпойнты с просмотром всех актуальных переменных. Тщательный анализ и продумывание.
Аноним 07/02/21 Вск 17:34:14 #207 №726465 
>>726380
Могу я написать. Или не надо?
Аноним 07/02/21 Вск 17:44:44 #208 №726470 
>>726402
Ага, вижу. Сцену схоронил.
Работать только с тем, что фкаропке? Или можно перетащить туды, например, игрока и тайлмап?
Аноним 07/02/21 Вск 17:45:33 #209 №726471 
>>726465
Пиши.
Аноним 07/02/21 Вск 17:47:53 #210 №726472 
>>726470
Чувак, ты не понимаешь. Для твоей игры тебе нужно сделать свои собственные сцены-шаблоны со своими скриптами-заглушками, которые реализуют логику твоей игры.
Сцену я выложил для примера, как это можно организовать.
Аноним 12/02/21 Птн 15:35:03 #211 №727480 
Годот может в чисто текстовый вывод?
Аноним 12/02/21 Птн 17:00:19 #212 №727498 
изображение.png
изображение.png
Привет годотеры.
Нужно сделать возможность клипать рендер для всех объектов в какой-то зоне. то есть у нас есть некоторая клиппинг сфера, и надо чтобы всё что находится перед ней не рендерилось. Как бы такой взор через стену лол. В пеинте накалякал как это должно выглядеть.
Аноним 12/02/21 Птн 18:16:50 #213 №727514 
>>727480
Йес.
>>727498
Через шейдеры как вариант. Если я правильно понял, надо делать стены прозрачными. Ещё можно отдельным вьюпортом со своей камерой, а затем с этого вьюпорта снимаешь текстуру и накладываешь там где хочешь просвечивать стену.
Аноним 12/02/21 Птн 18:20:10 #214 №727515 
>>719977 (OP)
https://youtu.be/2nk6bJBTtlA?t=335

Объясните, пожалуйста, что он тут (поставил таймкод) имеет ввиду. Как class_name помогает избегать load/preload и чем это полезно?
Аноним 12/02/21 Птн 18:26:36 #215 №727518 
>>727514
>Через шейдеры как вариант
А как? я не знаю как можно в шейдеры пихать определенную инуф о том как затенять отдельные регоины, параметризировать их.
Аноним 12/02/21 Птн 20:14:49 #216 №727541 
>>727518
Ну тут только ты сам можешь сидеть и учиться шейдерам. Готовых вариантов не подскажу. Сам в шейдерах novichock. Шейдер может делать пиксель прозрачным, отталкивайся от этого.
>>727515
> Как class_name помогает избегать load/preload и чем это полезно?
При помощи именованных классов, ты создаёшь их экземпляры по имени. Но дело в том, что это полезно только для классов-хелперов. Типа, ты сделал скрипт с утилитами, дал ему имя, создаёшь экземпляр через var my_script = MyScript.new() и рад. Но на практике у тебя не скрипты, а сериализованные (t)scn-файлы, которые грузить надо, как ресурсы лоадом/прелоадом. По факту десериализовывать.
Аноним 12/02/21 Птн 21:14:37 #217 №727554 
>>727541
Cпасибо
Аноним 13/02/21 Суб 00:26:25 #218 №727581 
>>727514
Прям вот можно ASCII игру сделать без костылей? Это праздник какой-то если это действительно так.
Аноним 13/02/21 Суб 01:03:10 #219 №727583 
>>727480
Никто не может уже лет 20. Все рисуется глифами.
Аноним 13/02/21 Суб 01:05:36 #220 №727584 
>>727583
Да это очевидно. Я про стиль, десу.
Аноним 13/02/21 Суб 01:27:13 #221 №727586 
>>727581
> ASCII игру сделать без костылей?
Аски-игра сама по себе костыль. Типа, вот смотрите, я хочу игру, но у меня только текстовая консоль 25х80, поэтому я вот возьму псевдографику и принесу вам сладкую игрышку, деревенскую. В деревнях играли, братишка!
>>727584
> Я про стиль, десу.
Рисуешь спрайты в виде псевдографических глифов и ебошишь нормальную человеческую игру на спрайтах.
Аноним 13/02/21 Суб 18:51:33 #222 №727670 
>>719977 (OP)
Какой функцией проверяется наличие эелемента в массиве?
Аноним 13/02/21 Суб 22:47:48 #223 №727696 
>>727670
Напиши сам через for, что как маленький?
Аноним 13/02/21 Суб 22:59:22 #224 №727697 
А кек. Тут же есть английские доки, они полные.

array_name.has(некая хуйня)

Возвращает True или False соответственно.
Аноним 13/02/21 Суб 23:00:28 #225 №727698 
Ещё как вариант if некая хуйня in имя_массива.
Аноним 13/02/21 Суб 23:33:10 #226 №727699 
>>727697
>>727698
Премного благодарю
Аноним 14/02/21 Вск 10:46:23 #227 №727742 
>>727699
Да не за что. Я сам сейчас годотовский форк удава осваиваю.
Аноним 14/02/21 Вск 19:03:54 #228 №727808 
>>727742
Удав не питон! Что за профанация?
Аноним 14/02/21 Вск 20:50:11 #229 №727837 
image.png
>>719977 (OP)
Ни дня без вопроса. Смотрите:
1 строка - прохожусь по массиву (массив из координат)
2 строка - создаю элемент на месте координат
3 строка - не нужна выдает мне координаты элементов массива

Так вот, почем элемент у меня создается на месте только одной координаты, а не на месте каждой?
Аноним 14/02/21 Вск 21:03:46 #230 №727839 
>>727837
Ты уверен в том, что ты создаешь элемент?
Как по мне ты просто меняешь позицию одного и того-же.
Аноним 14/02/21 Вск 21:08:25 #231 №727842 
>>727839
Бля, скорее всего да. Как мне тогда это исправить, чтобы создавались одинаковые объекты?
Аноним 14/02/21 Вск 21:51:28 #232 №727849 
>>727808
Ну как бы и да, и нет, ложноногие и питоны это разные семейства, но при этом они оба относятся к низшим змеям... Ну и Пайтон часто называют ужом, удавом етс.
Аноним 14/02/21 Вск 22:13:37 #233 №727851 
>>727842
> Как мне тогда это исправить, чтобы создавались одинаковые объекты?
for i in 10: add_child(Node.new())
Аноним 14/02/21 Вск 23:07:04 #234 №727862 
>>727851
Хмммм, nonexistent function выдает. Также попробовал через duplicate, но эффекта нет
Аноним 15/02/21 Пнд 08:20:41 #235 №727889 
Screenshot20210215081930.png
Screenshot20210215081922.png
>>727862
> nonexistent function выдает
Да шошты мне пиздишь, блять!
Аноним 15/02/21 Пнд 08:26:31 #236 №727890 
>>727862
Сука, читай документацию, блять! Я понял! Ты (пре-)лоадом загрузил десериализованную сцену и пихаешь ей метод .new() из моего примера, но если бы ты не был малолетним идиотом с клиповым мышлением, да к тому же не знающим английского, ты бы давно уже прочитал в документации, как правильно создавать инстансы пакованных сцен. А не сидел бы в пустом треде, ожидая пока случайно зашедший анон выдаст тебе готовое решение.
Аноним 15/02/21 Пнд 13:44:26 #237 №727914 
>>727890
Такая ахуенная документация, что в ней хуй, что найдешь. В итоге ответы ищутся на сторонних форумах, где человеческим языком (а не задротом-программистом без личной жизни) написано как и что.

>как правильно создавать инстансы пакованных сцен
Спасибо, буду копать в этом направлении
Аноним 15/02/21 Пнд 17:04:36 #238 №727944 
>>727914
> Такая ахуенная документация, что в ней хуй, что найдешь.
Ахуенная. Круче только МСДН.
Аноним 15/02/21 Пнд 17:17:10 #239 №727948 
Сап, аноны. Есть желающие немного заработать?
Мне нужно создать несложную игру, где основой является тест и подсчет баллов. Обязательно наличие меню, внутриигрового меню и возможность управлять персонажем (влево-вправо). В игре три раздела, в каждом свои вопросы. В конце игры вывод общего количества набранных баллов.
С меня спрайты и другая инфа для создания, с вас - код и скриншоты с пояснениями.
Почта: [email protected]
Аноним 15/02/21 Пнд 20:49:11 #240 №727988 
image.png
Смотрите, у меня есть некий пул ячеек размером 32 на 32. И есть код, который в каждую такую ячейку спавнит объект. Если объект 32 на 32 то он ложиться ровно, а если нет, то размещается от лвеого верхнего угла. Так вот, как мне сделать так, чтобы объект располагался от центра этой ячейки, а еще лучше - рандомно в пределах ее границы

>>727890
Еще раз спасибо, с этим >>727837 справился хакер.пнг
Аноним 15/02/21 Пнд 21:06:42 #241 №727994 
>>727988
Ну вот смотри, серым цветом пометил тебе фактическую область в которой тебе нужно сгенерировать случайную позицию. По факту это размер ячейки минус размер фигуры.
Аноним 15/02/21 Пнд 21:07:58 #242 №727995 
1613412478168.png
>>727994
Блять, когда не надо, пост без капчи улетает, сука блять! Пикча вдогонку.
Капча велосипеды.
Капча Автобусы.
Капча горы.
Капча светофоры.
Аноним 15/02/21 Пнд 21:11:23 #243 №727996 
>>727994
>>727995
Ха, хитро. Благодарю, анонче
Аноним 16/02/21 Втр 11:34:32 #244 №728042 
>>719977 (OP)
Так, хочу сделать говно в изометрии, типо соулслайк, без процедурной генерации. Какой шанс сделать такое на вашем движке? Можно будет это захуярить все на одном лвле, чтоб оно не жрало всю систему нахуй?
Аноним 16/02/21 Втр 11:38:54 #245 №728043 
>>728042
> Какой шанс сделать такое на вашем движке?
100%
> захуярить все на одном лвле, чтоб оно не жрало всю систему нахуй?
Выбери одно, толстяк. Либо лоды, либо оперативка.
Аноним 16/02/21 Втр 11:39:56 #246 №728044 
>>728043
Не, я понимаю, что там что-то выгружаться будет и тд. Я имею ввиду, что не хочу загрузок.
Аноним 16/02/21 Втр 13:29:17 #247 №728057 
>>728044
В теории можно выгружать части уровня, сохраняя их состояние и по необходимости подгружать. Но это в теории
мимо ламер
Аноним 17/02/21 Срд 09:05:01 #248 №728148 
>>728044
> Я имею ввиду, что не хочу загрузок.
Скорей бы спизженные хацкерами исходники ред-энжин оказались в паблике. Очень хочется посмотреть, как они сделали у себя во втором ведьмаке гибкую систему подзагрузки чанков открытого мира.
Когда играешь на слабой машине (а я тогда на слабой машине играл) то когда идёшь по миру не спеша, в углу крутится значок подзагрузки, ориентируешься краем глаза на него и останавливаешься. Иначе, если пойти слишком быстро, то подзагрузка динамически сменяется экраном загрузки. И всё это настолько органично сделано, что прям ощущается частью сеттинга.
Аноним 17/02/21 Срд 09:09:22 #249 №728149 
>>728148
>Иначе, если пойти слишком быстро, то подзагрузка динамически сменяется экраном загрузки.
Жиза. Тоже когда быстро с дивана встаю экран загрузки появляется.
Аноним 17/02/21 Срд 09:25:13 #250 №728155 
>>728149
Проверь хелсбар, он у тебя походу в красной зоне уже и мигает угрожающе.
Аноним 17/02/21 Срд 11:55:42 #251 №728172 
>>719977 (OP)
Здорово мужики!

Капризный анон вопрошает!

Мне бы курсы по годоту для 2д.

Что планирую создать для тренировки - сапёра с некоторыми улучшениями, тетрис или арканоид.

Что хочу узнать - как создавать меню, урок на тытрубе есть, но вдруг, по управлению и прочему не так страшно, а вот про индексную отрисовку очень бы хотелось узнать, ибо без неё совсем беда.

Скриптовый язык нарм, но я видел, что есть C#, с ним было бы лучше.

Готов сожрать даже на иностранном
Аноним 17/02/21 Срд 13:07:01 #252 №728181 
аноны, такой вопрос, может ли годот работать с номерами телефона, например, набор номера при нажатии на него в приложении? Или в андроид студио придется все это ваять ?
Аноним 17/02/21 Срд 14:30:47 #253 №728193 
>>728181
Конечно ваять. Зачем бы звонилке быть в игровом движке?
https://docs.godotengine.org/en/stable/tutorials/plugins/android/android_plugin.html
Аноним 17/02/21 Срд 14:37:11 #254 №728194 
>>728172
В доках есть официальный пример с C#
https://docs.godotengine.org/en/stable/getting_started/step_by_step/your_first_game.html
Аноним 17/02/21 Срд 15:20:11 #255 №728200 
>>728194
>В доках есть официальный пример с C#
Он там криво работает, пусть пишет на годоскрипте и невыпендривается. Сам пытался на сирешётке писать, баг на баге.
Аноним 17/02/21 Срд 15:31:34 #256 №728203 
>>728200
Не пиши ерунду.
Аноним 17/02/21 Срд 15:38:57 #257 №728206 
>>728200
Ты, наверное, давно пробовал. Где-то год пользуюсь, все отлично работает. Может быть ты про то что нельзя подключать либы из нугета, но это же не имеет отношения к языку. Я например пользуюсь многими либами из исходников.
Аноним 17/02/21 Срд 15:50:02 #258 №728208 
>>728203
Чувак ну какая ерунда? Я уже точно не помню, но так какой-то баг, который не даёт создавать проект на сишарпе и это из проекта в проект.
Аноним 17/02/21 Срд 16:06:50 #259 №728212 
>>728208
Когда вспомнишь, тогда и приходи.
Аноним 17/02/21 Срд 16:16:41 #260 №728213 
ккики.jpg
кики.jpg
>>728212
>Вспомнил
Самое интересное, что я делал по туториалу из документации.
И так постоянно, как только я в проект добавлял сишарп, он переставал работать. Ну или через раз работал.
Аноним 17/02/21 Срд 16:19:39 #261 №728215 
>>728208
Я помню что единственный раз когда годот не создал мне проект на сишарпе был, когда я сам своими ручками полез в структуру проекта, удалял там что то, переименовывал файлы, после чего редактор окончательно запутался, и при создании нового .cs скрипта не создавал проект. Впрочем, это все элементарно решилось созданием нового проекта с нуля и копированием туда всех скриптов из старого проекта.
Если же у тебя это не работает постоянно, то скорее у тебя засрана студия или какая нибудь несовместимая устаревшая версия.
Аноним 17/02/21 Срд 18:10:22 #262 №728232 
Годнота подъехала
https://www.youtube.com/watch?v=pL0RWVmlM6g
Аноним 17/02/21 Срд 21:11:15 #263 №728260 
>>728232
Вроде прикольно, это что же васянить больше не надо?
Аноним 17/02/21 Срд 21:35:41 #264 №728267 
>>728260
Да, хоспаде, да! Всё сделано, как я хотел! Теперь можно смело переходить к следующему этапу.
Аноним 18/02/21 Чтв 08:36:48 #265 №728314 
>>728213
> И так постоянно,
> отладчик: 11 сообщений
> показывает мне вывод вместо отладчика
Тебе ссаной тряпкой по ебалу настучать, дегенерат?
Аноним 18/02/21 Чтв 21:53:05 #266 №728494 
https://zen.yandex.ru/id/5ff96ae44b7e4d35ed289d4f?clid=101&country_code=ru

Это НЕ реклама. Совершенно случайно наткнулся на годные статейки на, представьте себе, яндекс-дзене. Просто и понятно объясняет на русском языке - как раз самое-то для вкатывальщиков и малолетних дэбилов незнающих англ
Аноним 18/02/21 Чтв 22:28:16 #267 №728500 
>>728494
Интересно, автор не тот ли анон, с которым мы хотели делать видеоуроки? Потом всё заглохло, правда. Надеюсь, это он, и он вкатился в текстовые статьи.
Аноним 18/02/21 Чтв 23:44:07 #268 №728511 
image.png
image.png
image.png
Происходит странная фигня. Помогите разобраться, пожалуйста.
Пик1 - я пересылаю сигнал из одной сцены в другую, когда куб уничтожается и пишу "cube destroy"
Пик 2 - создаю десять кубов, если один из них уничтожается, то посылается сигнал, написать "ok"
Пик 3 - В итоге он мне выдает лишь один "ок" и тот в случайном месте. А должен выдавать равное кол-во надписей
ЧЯДНТ?
Аноним 18/02/21 Чтв 23:51:34 #269 №728514 
image.png
>>728511
блять, 1 и 2 скрны одинаковые. Вот правильный первый
Аноним 19/02/21 Птн 00:11:40 #270 №728519 
>>728511
Нуу... Скорее всего ты недопонимаешь суть сигналов. Из скринов увы непонятно, где конкретно ошибка. Попробуй переписать всё заново. Но сначала выбери верную стратегию:
1. Кто держатель сигнала? (в чьём скрипте сигнал объявлен)
2. Кто излучатель сигнала? (эмить_сигналь)
3. Кто приёмник сигнала? (коннекть(сигналь))
4. Кто обработчик принятого сигнала? (коннекть("сигналь", "кто?", "функция"))
Всё это могут быть разные объекты и все могут видеть или не видеть друг друга. Способность сигнала излучаться будет зависеть от существования одних объектов, способность приниматься - от других.

Аноним 19/02/21 Птн 00:17:46 #271 №728520 
1613683065164.png
>>728519
Ты, допустим уничтожаешь куб, а куб является обработчиком же сигнала, который сам же и излучает, поэтому, он только один раз обработал, а потом всё, нет объекта, нет сигнала, нет обработки.

Чтобы избавить себя от таких траблов, я регистрирую все свои сигналы в одном глобальном синглтоне. Обработчики сигналов регистрирую исключительно в скриптах сцен (существующих долго, дольше временных объектов). Если в обработчике сигнала требуется учитывать объектизлучатель, я при регистрации указываю его инстанс параметром. Примеры, первые два сигнала из строк 86, 88
Аноним 19/02/21 Птн 15:17:26 #272 №728643 
image.png
>>728519
>>728520
Ммм, спасибо, попробую сделать так.

Еще сейчас выяснил, что только первый куб из списка, который создается отсылает сигнал корректно. Остальные почему-то нет. Хотя остальной код исполняется исправно у каждого куба, а вот тот, что с сигналом - нет, хммм
Аноним 19/02/21 Птн 17:14:50 #273 №728706 
image.png
>>728643
Нашел в чем затык был. Я тянул сигнал только с родителя, поменял на копии - cube_1 и все норм
Аноним 20/02/21 Суб 09:57:54 #274 №728822 
>>728706
В натуре...
Именно поэтому я избегаю "зелёненького" (обращений к дереву напрямую через $) и "жёлтенького"(строковым литералам) в основной части кода. Всё это желательно чтобы было в головной части скрипта объявлено переменными и константами. И ещё желательнее, чтобы на этапе проектирования диздока были утверждены (да, в соло, сам с собою утверждаешь правою рукою, на полном серьёзе) соглашения об именовании переменных и констант, которых желательно строго придерживаться.
Если всё это соблюдено, то исключена ситуация, когда у тебя в коде торчит $Cube.connect(...) ты скроллишь и глаз за него не цепляется, и ты не в силах понять, да что же не так?
Аноним 20/02/21 Суб 10:01:18 #275 №728823 
Покажите хорошие игры на движке
Аноним 20/02/21 Суб 10:13:44 #276 №728824 
>>728823
Киберпук
Аноним 20/02/21 Суб 10:24:32 #277 №728825 
>>728823
Конечно, анончик, вот держи, собранные сообществом, дошедшие до релиза в стиме:
https://steamcommunity.com/app/404790/discussions/0/412448792354265655/
Если кудахтнешь ИТТ на эту ссылку, что игры там не игры - я зарепорчу движкосрач. Кудахтать про неигры - пиздуй в движкосрач-загон. Хева найс дэй.
Аноним 20/02/21 Суб 11:26:06 #278 №728843 
>>728822
Хороший совет, кстати, да. Нужно будет утвердить все переменные, а то я как-то на это забил и решил, что в процессе сделаю, хех
Аноним 20/02/21 Суб 11:26:30 #279 №728844 
image.png
>>728825
чет проиграл
Аноним 20/02/21 Суб 14:57:41 #280 №728891 
image.png
>>719977 (OP)
Делаю паузу ого. Естественно нужно, чтобы и постановка и снятие осуществлялись на одну кнопку.
Подсмотрел в инете код под номером два... так вот. Объясните мне на пальцах, как он работает, потому что я вообще не могу понять.

первый мой, на него можно внимания не обращать
sageАноним 20/02/21 Суб 15:15:39 #281 №728895 
1544595296346.png
>>728891
У любого объекта в дереве нод есть как флаг visible, который отвечает за рисовать/не рисовать, так и флаг paused, который отвечает за обрабатывать/не обрабатывать.
Под обрабатывать подразумевается физика, вызов _process() и _physics_process(), _input() и _input_event().

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

https://docs.godotengine.org/en/stable/tutorials/misc/pausing_games.html
sageАноним 20/02/21 Суб 15:22:07 #282 №728900 
1495601392170.png
>>728823
https://godotengine.org/showcase
Аноним 20/02/21 Суб 16:59:51 #283 №728925 
1492136604780.webm
Аноним 20/02/21 Суб 22:31:41 #284 №728995 
26343289743.PNG
64623848723.PNG
>>728895
>инвертирует его
Вот это я и не понял, как делается. Как код с первого пика превратился в код со второго? Вот это вот жонглирование с not get_tree().paused

Типа вот у нас есть переменная (pause_state) и мы ей даем значение не паузы,
потом берем паузу и даем ей значение переменной - т.е. не паузы, после чего визибл даем значение переменной. И пауза включается. Че?
Так как пауза запускается с первого раза, то визибл должен стать тру, то есть переменная тру, т.е. не пауза - это тру, допустим, но как срабатывает get_tree().paused = not get_tree().paused. Это очень странно, я не понимаю
Аноним 20/02/21 Суб 22:59:07 #285 №729001 
>>728995
Это основы программирования. Примерно как конструкция x = 0 - x чтобы сделать отрицательное число.
То же самое - ты получаешь значение paused, вычисляешь его отрицание (not paused) и потом присваиваешь полученное инвертированное значение в ту же переменную.
Если рассматривать как таблицу истинности. Если paused было false, то paused и visible станет true. И наоборот.
Возможно, ты думаешь что в момент присваивания что то произойдет, но нет, твоя функция доработает до конца, а уже в следующем кадре движок будет проверять, в нем грубо говоря есть конструкция
if not node.paused: node._process()
if node.visible: node._draw()
Аноним 21/02/21 Вск 04:18:57 #286 №729041 
>>728891
Вот у тебя есть get_tree().paused. Здесь паусед - это всего лишь переменная, принимающая одно из двух значений: true или false. Что мы можем сделать с любой переменной? Всего две вещи: задать ей значение (если пишем переменная= ) или спросить её значение (если пишем где угодно ещё).
Not это не словесная частица "не", а арифметический оператор, как плюс или минус. Not true даёт false, а not false даёт true. Not paused даёт значение, обратное пауседу, что бы он сейчас ни значил. Ты создал переменную, присвоил её значение, обратное пауседу. Следующей строчкой ты присваиваешь пауседу это самое получившееся обратное значение. В принципе, можно было бы обойтись без этого, написав просто паусед = нот паусед, это читается как "присвоить пауседу значение обратное к тому, что у него сейчас".
Объяснил как смог.
Аноним 21/02/21 Вск 09:48:19 #287 №729053 
>>728891
Тут нужно просто знать, как работают операторы и каков их приоритет.
И тогда всё записывается в одну строчку:
> visible = get_tree().paused = not get_tree().paused
Можно даже расставить вспомогательные скобки вот так:
visible = (get_tree().paused = (not (get_tree().paused)))
Вычисление тут идёт справа налево, т.к. чтобы присвоить чему-то какое-то значение, надо сначала вычислить это значение.
Итак, если паузы в данный момент нету и get_tree().paused == true, то вышеозначенная строчка будет исполняться так:
> visible = get_tree().paused = not true
> visible = get_tree().paused = false
> visible = false

мимо никогда не юзал годот
Аноним 21/02/21 Вск 09:52:28 #288 №729054 
>>729053
> то вышеозначенная строчка будет исполняться так:
Лучше записать без лишнего:
1) вычисляется значение not get_tree().paused (будет true или false)
2) это значение присваивается полю get_tree().paused
3) и, наконец, новое значение поля get_tree().paused присваивается переменной visible
Аноним 21/02/21 Вск 09:54:47 #289 №729055 
>>729053
>если паузы в данный момент нету и get_tree().paused == true
ох лол
ладно, хуёвый из меня учитель
Аноним 21/02/21 Вск 10:03:05 #290 №729057 
1613890982009.png
>>729001
> вычисляешь его отрицание
А потом возвращаешься в вызывающую функцию, уже зная о том, что пауза здесь есть. Это что? - Отрицание отрицания!
>>728995
А визибл? Иное же написано! И-НО-Е!
Аноним 21/02/21 Вск 10:22:19 #291 №729058 
>>729055
> хуёвый из меня учитель
Я когда осознал мощь операторов сравнения, начал лепить дичайшие кулхацкерские конструкции типа:
> var foo = Input.is_action_pressed("bar") and baz == "foo"
Потом попустило слегка. Если впасть в фанатизм - встречаешься с проблемами при отладке.
мимо
Аноним 21/02/21 Вск 10:48:53 #292 №729061 
>>729058
>начал лепить дичайшие кулхацкерские конструкции типа:
> var foo = Input.is_action_pressed("bar") and baz == "foo"
Не знаю, как в годоте, но это абсолютно нормальное выражение во всех современных ЯП. Единственное, замечу, что опытные программисты булены переменным не присваивают почти никогда, если речь не идёт о каких-то глобальных константах. Просто из опыта: если у тебя появилась необходимость написать "a = вычислить_boolean()", то либо ты пишешь говнокод, либо тебе приходится с ним работать.
Аноним 21/02/21 Вск 10:52:19 #293 №729062 
>>729061
p.s. Хотя допускаю, что это просто взгляд со стороны функциональщика, и в мире стейтов всё иначе.
Аноним 21/02/21 Вск 11:26:44 #294 №729068 
>>729062
Не, всё правильно говоришь. Я потом допёр, что только создаю себе оверхэд. Тот случай, когда поучился на собственных ошибках.
Аноним 21/02/21 Вск 11:41:50 #295 №729070 
>>729061
Удобно делать такие штуки:
1. Когда надо сделать что-то, если в цикле ничего не нашел.
var found = false
for e in elements:
 if(e == "foo"):
  do_something(e)
  found = true
  break
if not found:
 do_something_special()

2. Когда надо сделать что-то только при первой итерации цикла
var first = true
for e in elements:
 if first:
  init()
  do_something(e)

3. Оптимизация если за значением дорого лазить
paused = some_costly_computation()
visible = some_costly_computation() #упс
Аноним 21/02/21 Вск 12:00:02 #296 №729073 
>>729001
>>729041
>>729053
Так, стало куда понятнее. Спасибо, аноны
Аноним 21/02/21 Вск 12:17:38 #297 №729076 
>>729070
>Удобно делать такие штуки:
>1. Когда надо сделать что-то, если в цикле ничего не нашел.
>var found = false
>for e in elements:
> if(e == "foo"):
>  do_something(e)
>  found = true
>  break
>if not found:
> do_something_special()

Офигеть удобно. )
На js, например, это решается так:
var foos = elements.filter(e => e == "foo")
foos.length ? foos.forEach(e => do_something(e)) : do_something_special()

>2. Когда надо сделать что-то только при первой итерации цикла
Наверняка в GDScript есть итерация с индексами. Сравниваешь индекс с нулём/единичкой (какой там первый индекс?), да и всё.

> 3. Оптимизация если за значением дорого лазить
Иногда нужно, но зачастую это звоночек, что у тебя херовый алгоритм, если один и тот же булен ты проверяешь несколько раз в одной функции.
Аноним 21/02/21 Вск 12:26:19 #298 №729078 
>>729076
>На js, например, это решается так:
Ну, это, конечно интересно, но я даже не хочу знать какой оверхед создает такая конструкция. Наверное, все же не filter, а find или includes. И все равно это будет два прохода по массиву вместо одного.
>Наверняка в GDScript есть итерация с индексами.
Если ты про for i, elem in enumerate(list) то вроде нету, это не Питон все таки. На c++17 конечно я так бы писал.
> если один и тот же булен ты проверяешь несколько раз в одной функции.
Так выше же пример. Когда и видимость и процесс надо отключить.
Аноним 21/02/21 Вск 13:37:10 #299 №729083 
>>729078
> for i, elem in enumerate(list) то вроде нету
Есть и я часто юзаю, например:
> for idx in get_children().size():
или как вариант, менее универсальный
> for idx in get_child_count():
такая конструкция производит цикл аналогичный
> for idx in range(0, get_children().size(), 1):
Мы пробегаем уже не по содержимому массива, а по индексам, ибо конструкция пробегает по целочисленному набору от 0 до сайза-1.
Чтобы получить данные внутри такого цикла, мы делаем
> get_child(idx)
или, если без сахара
> get_children()[idx]

И самое главное! Если нам надо идти по массиву и по нашей внутренней логике удолять часть элементов, то классика, которую знать надо, блять, говорит нам, идти от конца к началу:
> for idx in range(get_children().size()-1, -1, -1):
Аноним 21/02/21 Вск 14:04:14 #300 №729087 
>>729083
Не всегда речь идет о массиве с последовательными элементами. Например, это может быть проход по дереву, но какой-то случай надо обработать отдельно. Короче, суть в том что булева переменная - это совершенно нормально, а тут ее чуть ли не грехом уровня goto называют.
Аноним 21/02/21 Вск 17:48:43 #301 №729120 
>>728995
Более того, в теле if ты можешь написать эти две строчки:

get_tree().paused != get_tree().paused
visible = get_tree().paused
Аноним 21/02/21 Вск 18:30:43 #302 №729124 
>>729087
> а тут ее чуть ли не грехом уровня goto называют
Сишники. Что с них взять? Своя атмосфера у них. Свои грехи.
Аноним 22/02/21 Пнд 01:03:15 #303 №729204 
>>727541
Не совсем так. Class_name нужен для того, чтобы спамить классы типа object. Эти классы помещаются в интерфейсные ноды и интерфейс делает к ним Коннект на изменение параметра. Соответственно, теперь не надо лазить в каждый интерфейс, чтобы что-то поменять. Поменяв обджект, все интерфейсные ноды поменяются. Каждый выполняет свою роль и все хорошо.
Аноним 22/02/21 Пнд 10:59:38 #304 №729222 
>>729204
Нихуя не понял. Можно иными словами перефразировать?
Аноним 22/02/21 Пнд 21:09:55 #305 №729315 
Скажите, пожалуйста, почему при одинаковом коде на этом моенте (таймкод) https://youtu.be/FHYb63ppHmk?t=344
У меня выдает ошибку Invalid type in function 'get_child' in base 'Panel (Slot.gd)'. Cannot convert argument 1 from Object to int.
Аноним 22/02/21 Пнд 22:15:26 #306 №729322 
>>729222
Для разделения интерфейсной и логической части в общем.
Аноним 22/02/21 Пнд 22:30:30 #307 №729326 
>>729315
Скачал пример из под видео, все работает. Может опечатка?
Аноним 22/02/21 Пнд 23:39:13 #308 №729338 
>>729326
Опечатка наверняка, какую-то мелочь проглядел.
>>729322
Имя класса даёт интерфейс классу. О каком разделении речь, я не понимаю. Может ты имеешь ввиду как раз это: Без имени класса у него интерфейс родительского класса, скажем, Control, теперь мы дали ему имя CustomControl и теперь у него интерфейс CustomControl со всеми нашими членами, что мы вчленили туда. Это очевидное удобное следствие присвоения дочерним классам имён и следовательно появления у них своих собственных интерфейсов. Таким образом при помощи имени класса можно:
1. Создавать новые экземпляры классов.
2. Обращаться к кастомным членам класса через интеллисенц, так как у них появляется свой интерфейс.
3. Если объявить переменную кастомного типа и присвоить ей через лоадер/прелоадер инстанс сцены неподходящего класса, присваивания не произойдёт, и мы таким образом можем отсеивать правильные сцен-ресурсы для загрузки. Но это проверять надо, я не помню в точности как оно работает, то ли нулль возвращает, то ли исключение кидает.
Аноним 23/02/21 Втр 03:47:32 #309 №729361 
>>729338
Я о другом.
У тебя дефолтный класс - object. Весит он от слова нихуя.
Например у тебя есть такая сущность как юниты.
Обычный годотер сделает что? Он сделает сарай и сунет в него скрипт.
Профессиональный годотер сделает object с класснеймом enemymob и напишет внутри все свойства enemymob. Создаст спрайт, внутри переменную var background:enemymob setget и от enemymob кинет в этот спрайт сигнал о изменении параметров внутри enemymob.
Естественно все эти enemymob плавают где-то в массивах controllerов и им плевать на то что на экране.
После этого можно создавать миллионы разных интерфейсов используя этого enemymob и тягать от туда параметры интерпретируя по как угодно. И эти параметры будут одни на всех.
И эти enemymob весят на столько мало, что за границей экрана их можно не отрисовывать или они могут вообще не иметь ноды, потому что вся их логика скрыта в enemymob что позволяет их обрабатывать. И только тогда, когда enemymob должен появится на экране пользователя (координаты в ректангле экрана) , он берется из заготовленного пула спрайтов, вставляется туда этот enemymob, пересчитываются его параметры и у тебя готовый спрайт в нужных координатах с нужным спрайтом и здоровьем.
Аноним 23/02/21 Втр 03:48:08 #310 №729362 
>>729361
> Сарай
Спрайт* т9
Аноним 23/02/21 Втр 10:06:56 #311 №729381 
>>729361
А потом он запутается во всех этих массивах контроллеров, плюнет и пойдёт переписывать на монолитный код, трустори.
Иногда полезнее быть обычным годотером и не лепить модульную архитектуру ради понта там, где достаточно десятка строк в методе _process()
Аноним 23/02/21 Втр 12:50:18 #312 №729398 
>>729381
После этого переходят на ECS. Тру стори.
Аноним 23/02/21 Втр 13:00:51 #313 №729402 
>>729398
Переходят на БД-контекст, ЕЦС - один из бесчисленных вариантов БД-контекста (дата ориентед дизайна). Подхода к игре как к базе данных графики, звука и текста, которую специализированная стейтмашина должна умело поднимать по команде игрока с диска в видеопамять пеки на экран или в очки в 120 ФПС на каждый глаз.
Мысли шире.
Аноним 26/02/21 Птн 05:42:40 #314 №729931 
>>729381
На самом деле разбиение интерфейса от логики очень важно. Твои функции в интерфейсе выглядят как "сет параметр" и дальше поменяй текстуру/запусти музыку по условию от гета. Все. Те логика полностью в другом месте. Хочешь логику - ползешь в класс, хочешь анимки - ползешь в интерфейс. Оч удобно
Аноним 26/02/21 Птн 09:06:00 #315 №729951 
>>729931
В годоте этим занимаются сигналы.
event-driven programming
Аноним 26/02/21 Птн 22:24:56 #316 №730102 
>>719977 (OP)
Внимание, вопрос. Вначале этого видео https://www.youtube.com/watch?v=g1x8ct2Slok
(где-то на минуте)
Чувак создает базу данных на json. Насколько такой способ вообще состоятелен? И не проще ли ее запилить в самом годоте?
Аноним 26/02/21 Птн 22:34:25 #317 №730104 
>>730102
Абсолютно состоятелен. Игра должна просто воспроизводить данные, а данные удобнее править текстом без пересборки всей игры.
Аноним 01/03/21 Пнд 05:30:09 #318 №730518 
VID20210301052258915.mp4
Годотя на расберри пай! Без фога фреймрейт почти 60. Разрешение окна 640х360.
Аноним 01/03/21 Пнд 09:00:01 #319 №730528 
>>730518
> Годотя
Зачем ты поддерживаешь форс срачедаунов? У тебя совсем уже, тю-тю?
Аноним 01/03/21 Пнд 12:53:06 #320 №730539 
>>730518
Вот честно, ты бы лучше действительно продемонстрировал нам 60 фпс без фога, чем с фогом 20.
Аноним 01/03/21 Пнд 13:33:41 #321 №730542 
>>730528
лол шизик воюет против мемов, потому что их котел запретил. что дальше? будешь заставлять всех подписываться?
Аноним 01/03/21 Пнд 14:08:06 #322 №730546 
>>730542
Срачедауны - это мем. Зачем же ты против него воюешь, шизик?
Аноним 01/03/21 Пнд 15:24:26 #323 №730551 
>>730539
Эти 60 ФПС отображаются крайне всрато с диким тирингом. К вечеру постараюсь записать нормальное видео с картой захвата.
Аноним 01/03/21 Пнд 16:26:36 #324 №730565 
>>730542
Но ты даже мем правильно употребить не смог.
годот - движок, годотя - пользователь годота
Аноним 01/03/21 Пнд 16:33:51 #325 №730569 
>>730518
>Годотя на расберри пай!
Неблохо! Какая малинка хоть? Третья?
Аноним 01/03/21 Пнд 21:37:58 #326 №730613 
В чём преимущество сигналов перед прямым вызовом нужных функций? Уже некоторое время пишу на годоте, смотрел и примеры из тутора с сигналами, и несколько примеров работы с сигналами с ютуба, так и не понял. Функцию, объявленную где-нибудь в синглтоне, я могу вызвать напрямую, а сигнал перед этим надо сконнектить на этапе создания. Аргументы для вызова можно передавать и там, и там. Я плохо знаю программирование, но очевидных преимуществ сигналов перед вызовом функций не вижу, поясните пожалуйста.
Аноним 01/03/21 Пнд 22:16:46 #327 №730617 
>>730613
Ну, очевидно, интересующиеся объеты подписываются на слушание сигналов, и на этом все, а в случае с твоей функцией тебе надо самому как то отслеживать списки объектов.
Аноним 01/03/21 Пнд 23:08:20 #328 №730626 
out.mp4
2021-03-01 22-55-21.mp4
изображение.png
>>730539
Godot на Raspberry pi 4 4GB, разрешение окна 640х360. Карта захвата больше 30 кадров показать не может. Такой ужасный тиринг заслуга рекодера, на мониторе он тоже есть, но не такой лютый. Весьма болезненно переносит нормали в большом количестве, но с голыми альбедо\диффюзами работает весьма достойно. На сцене около 2тыс трисов.
Аноним 01/03/21 Пнд 23:13:54 #329 №730627 
>>730626
Если есть какие-то идеи по оптимизации, буду рад услышать. В настройках проекта все выставлено на минимально возможные значения. С третьим OpenGL ES запускаться не хочет, хотя странно, в характеристиках платы есть поддержка аж 3.1
Аноним 01/03/21 Пнд 23:17:24 #330 №730628 
>>730613
Я документацию годота только сегодня начал читать, но по первому впечатлению сигналы выглядят как оказуаленный EventEmitter из node.js. Концепция сигналов удобна тем, что твои игровые объекты сами могут подписываться на нужный им сигнал и получать уведомления каждый раз, когда этот сигнал кем-то испускается. Например, ты хочешь сделать таких врагов, которые бы кричали «ага!» каждый раз, когда герой появляется на локации. Всё, что для этого нужно — подписать их на сигнал «герой_пришёл_на_локацию» и затем броадкастить этот сигнал каждый раз, когда герой приходит.
На практике и сам приход на локацию может триггериться событием/сигналом, одни события триггерят другие события и всё это boils down в т.н. event-driven архитектуру. В руках знающего человека это самый гибкий способ описывать игровую логику.

Хотя может я сейчас хуйню спизднул и в годоте всё не так.
Мимо велосипедист с десятилетним опытом в javascript.
Аноним 01/03/21 Пнд 23:31:02 #331 №730630 
2021-03-01 23-29-11.mp4
Ну и версия с тенями, нормалями и фогом.>>730626
Аноним 02/03/21 Втр 01:23:45 #332 №730642 
>>730626
В 3д годота лезть не стоит, пока он отрисовывает объекты, которые расположены за стенами. Естественно, лучшая оптимизация - использовать атлас текстур, сделать пул объектов и выставлять руками, когда пользователь их может увидеть.
Аноним 02/03/21 Втр 06:01:29 #333 №730649 
>>730642
Следи за новостями: вчера Хуан нанял дополнительного фултайм-контрибутора, первым делом которого будет
> My first task will be integrating an occlusion culling system into the new Vulkan renderer. While occlusion culling is not a silver bullet, it can give big performance improvements in a variety of scenes. I have been working on a small prototype implementation and the results so far are promising, but it still needs to be integrated in the rendering backend and exposed to the user.

> https://godotengine.org/article/joan-fons-hired-work-godot-rendering
Аноним 02/03/21 Втр 09:04:51 #334 №730653 
>>730613
Сигналы это ивенты из виндовых РАД ИДЕ же. Сигналами их начали в линуксе называть. Ну типа, чтобы не как в венде. Навскидку, в ГНОМе ивенты сигналами называются.
>>730628
Тебе тот же ответ по факту.

Тэги для новичков кодинга вообще: event-driven, observer
Аноним 02/03/21 Втр 12:06:36 #335 №730706 
>>730642
Если у тебя коридорный шутан со стенами, то ты можешь использовать этот модуль https://github.com/lawnjelly/godot-lportal
Аноним 02/03/21 Втр 16:01:24 #336 №730784 
>>730649
Заебись. А батчинг в 2д то добавят?
Аноним 02/03/21 Втр 16:04:07 #337 №730786 
>>730784
Толсто.
Аноним 02/03/21 Втр 16:30:47 #338 №730806 
>>730784
А флешплеер вернут?
Аноним 03/03/21 Срд 04:16:25 #339 №730899 
>>730649
>>730706
Я всячески не против улучшений в этой части. Но пока что для 3д их нет. Как только появится, включая нормальный модуль импорта без заебов, всеми руками возьмусь за разработку простенького 3д Раннера. Но пока только 2д. Батчинг отрабатывает на отлично. Теперь все косяки по оптимизации только мои.
Аноним 03/03/21 Срд 08:55:21 #340 №730910 
>>730899
> Как только появится, включая нормальный модуль импорта без заебов, всеми руками возьмусь за разработку простенького 3д Раннера.
Звучит, как отмазка прокрастинатора.
Аноним 03/03/21 Срд 10:46:49 #341 №730912 
>>730806
Окей
Аноним 03/03/21 Срд 12:55:30 #342 №730931 
1531123020382.png
>>730899
В раннерах нечего окклюдить порталами. У тебя все объекты видны перед глазами, нет комнат и стеночек.
Все что тебе надо это что-нибудь типа такого
https://godotengine.org/asset-library/asset/869
И может быть такого (если не процедурно генеришь)
https://godotengine.org/asset-library/asset/869
Аноним 03/03/21 Срд 12:55:53 #343 №730932 
>>730931
*и такого
https://godotengine.org/asset-library/asset/709
Аноним 03/03/21 Срд 17:42:06 #344 №730986 
изображение.png
Анон, как чинить это в годот 4?

знаю что надо добавлять собаку, но все равно ругается
Аноним 03/03/21 Срд 18:08:34 #345 №730991 
>>730986
Тип надо как обычно будет писать
@export var mob_scene : PackedScene
не рано ли в 4-ку лезть
Аноним 03/03/21 Срд 18:09:37 #346 №730992 
>>730986
Алсо документацию на мастер можно смотреть если переключиться внизу на latest
https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#doc-gdscript
Аноним 03/03/21 Срд 18:09:51 #347 №730993 
>>730991
Я задолбался ждать, пытаюсь сразу вкатываться
Аноним 03/03/21 Срд 20:26:06 #348 №731019 
>>730931
Нет. Я имею ввиду раннер типа бабы прыгающей по белым крышам и трубам.
Аноним 03/03/21 Срд 20:26:30 #349 №731020 
>>730910
Звучит как предложение БДСМ.
Аноним 03/03/21 Срд 20:30:12 #350 №731021 
1614792611539.png
>>731020
Становись на колени.
достал плётку
Аноним 03/03/21 Срд 23:50:27 #351 №731048 
2021-03-03 23-48-06.mp4
По кадрам нормальный консольный экспириенс.
Аноним 04/03/21 Чтв 01:16:14 #352 №731057 
У годот 4 есть ночные сборки? ну чтобы не самому пердолится?

У всего опенсурс такое есть
Аноним 04/03/21 Чтв 08:26:45 #353 №731066 
>>731057
Всё есть. Гугли. Но в любом случае будут траблы.
>>731048
Ну как бы да. А в чём возражение? Твой пост как будто кому-то возражает.
Аноним 04/03/21 Чтв 09:25:35 #354 №731068 
>>731066
Так я гуглил, нашел только один сайт (он еще есть в авесом) - но там кажется сборки заглохли еще два года назад.. Или не знаю как проверить что это именно вчерашняя сборка, а не 2019 года
Аноним 04/03/21 Чтв 09:28:21 #355 №731069 
>>731068
Я и сам люблю всё новое, современное, но в данном случае я настаиваю на том, что в четвёрку лезть рано. Пили на трёшке прототип своего опуса магнуса. Потом мигрируешь.
Аноним 04/03/21 Чтв 11:01:15 #356 №731076 
>>731048
Че этот уровень означает? Это часть игры? Про что?
Аноним 04/03/21 Чтв 11:06:48 #357 №731077 
>>731076
Инди-хоррор про оживших плюшевых мишек.
Аноним 04/03/21 Чтв 12:07:22 #358 №731092 
1496835061666.png
>>731057
Да там пердоленья на полчаса всего.
Впрочем сборка есть на сайте который первый в поиске.
Дата сборки видна в зипе, а при запуске пишется номер коммита, из которого собран билд
Аноним 04/03/21 Чтв 23:55:22 #359 №731234 
https://www.youtube.com/watch?v=rAmRmMsi7KA
Аноним 05/03/21 Птн 02:47:02 #360 №731251 
сап хакеры.
Кто-нибудь знает, как сделать процедурную генерацию карты для рогалика?
Все, что находил в нете либо не не подходит, либо это просто генерация черно-белых спрайтов.
Мб кто-то делал похожее, или допиливал этот тутор https://github.com/Bozar/GodotRoguelikeTutorial ?
Аноним 05/03/21 Птн 08:25:23 #361 №731264 
>>731251
> как сделать процедурную генерацию карты для рогалика?
А что там может быть сложного? Я лично сам не генерировал, но блять, с дивана эта задача кажется тривиальной. Может ты пояснишь, на какие принципиально необплываемые подводные камни наткнулся, когда пытался запилить сам?
Аноним 05/03/21 Птн 09:39:05 #362 №731272 
>>731264
Трабл с попыткой создать ветвленные коридоры меж комнат.
Нашел один скрипт, но он на дарте, а тк я годо начал изучать совсем недавно - непонятно, как правильно преобразовать этот скрипт на дарте в gds.
Аноним 05/03/21 Птн 09:42:09 #363 №731273 
>>731272
Ну давай линки, посмотрю, попробую тебе скрипт набросать.
Аноним 05/03/21 Птн 09:48:25 #364 №731275 
>>731273
Статья по скрипту:
https://journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes/

Скрипт:
https://github.com/munificent/hauberk/blob/db360d9efa714efb6d937c31953ef849c7394a39/lib/src/content/dungeon.dart
Аноним 05/03/21 Птн 10:09:29 #365 №731280 
>>731275
Едрить там кода от души нахуярено. Скрипт данжен это класс-потомок ещё одного. А там в папке ещё куча скриптов. Но радует, что язык питоноподобный, значит проще будет перенести.
> abstract class Dungeon extends StageBuilder {}
преобразуем в
> class_name Dungeon extends StageBuilder
После чего тяжко вздыхаем и идём в другой скрипт, чтобы начать реализацию с него.

Поясни за эту конструкцию:
> int get extraConnectorChance => 20;
Я правильно понимаю, что это автосвойство с паблик-геттером без сеттера, целочисленное, имеющее по умолчанию значение 20?
Тогда:
> var extraConnectorChance : int = 20 setget set_extraConnectorChance , get_extraConnectorChance
В текущей версии гдскрипта нет ни лямбд, ни автосвойств, придётся всё реализовать явными методами и придётся реализовать сеттер, который будет не делать ничего, имитируя отсутствие доступа.
Аноним 05/03/21 Птн 10:22:26 #366 №731282 
>>731280
>Поясни за эту конструкцию:
В душе не ебу, что это значит. Сам с дартом не знаком, по этому как раз проблемы преобразовать код.
Аноним 05/03/21 Птн 10:27:29 #367 №731284 
>>731282
Ну, значит исходим из моего предположения.
Аноним 05/03/21 Птн 10:39:57 #368 №731289 
Screenshot20210305103813.png
>>731275
А ещё есть очень большое желание взять постановку задачи (пикрелейтед) и ебануть своего кода с нуля.
Аноним 05/03/21 Птн 10:44:49 #369 №731291 
>>731289
Была такая мысль, но опять же - годо только изучаю и я даже близко не понимаю, как такое реализовать.
Помню, был очень простенький скрипт на либткоде. Попробую его перенести.
Энивей спасибо, анончик)
Аноним 05/03/21 Птн 10:51:49 #370 №731293 
>>731291
> годо только изучаю
Ну да, абстрактно нарисовать карту с комнатами и коридорами - это одно, а вот превратить это всё в интерактивный объект, по которому ходишь, который составной и автоматически подгружается/выгружается при надобности - это уже сооовсем другая история.
Аноним 05/03/21 Птн 14:32:07 #371 №731340 
>>731251
Что ты искал? В нете полно всего по запросу godot procedural roguelike map
Аноним 05/03/21 Птн 15:07:37 #372 №731353 
>>731251
На ютубе куча туториалов. Начни с вот этой вот генерации "черно-белых" спрайтов и дальше уже наращивай то, что нужно.

мимо пилю рогалик
Аноним 05/03/21 Птн 15:45:54 #373 №731363 
>>731353
Черно-белую мапу видел, но не понял, как к ней привязать возможность ходить по "свободным" спрайтам.
Аноним 05/03/21 Птн 17:10:08 #374 №731382 
>>731363
Включаем смекалочку:
1. Делаем слой из двух тайлмап - условный пол и стены
2. Код вырезает в стенах карту. В свободном пространстве виднеется пол (ну это дизайнерские моменты)
3. При вырезании карты собираешь позиции вырезанных клеток
4. Спавнишь на желаемой клетке игрока. Можешь взять, например, первую из массива.
5. Ну и дальше прикручиваешь механику ходьбы + коллизию стенам

Если мы говорим про один и тот же туториал, то там его три части, и все это объясняется
Аноним 05/03/21 Птн 18:12:29 #375 №731398 
>>731382
Походу о разных
Можешь линк дать?
Аноним 05/03/21 Птн 18:44:17 #376 №731402 
>>731398
https://youtu.be/2nk6bJBTtlA
Аноним 05/03/21 Птн 18:46:27 #377 №731403 
>>731402
Не видел, спасибо
Аноним 08/03/21 Пнд 12:09:17 #378 №731785 
Есть хорошие уроки по годоту? Хочу вкатиться в разработку игр, но не знаю программирования
Аноним 08/03/21 Пнд 12:26:46 #379 №731788 
>>731785
На ютубе сканера посмотри. Все опасаются скорого выхода четвёрки и сканер тоже, но ты не бойся, знания трёшки не помешают перейти на четвёрку в будущем.
https://www.youtube.com/watch?v=bNbdP2KdB7c&list=PLf0k8CBUad-vQIVwBkgxogtV3VCicXQbs&index=1
Аноним 09/03/21 Втр 11:26:02 #380 №732014 
>>719977 (OP)
Между тайлмапами пропадает альфа слой. При этом между тайлмапой и бекграундом работает исправно. В чем может быть затык?
Аноним 09/03/21 Втр 11:31:44 #381 №732015 
>>732014
Перепроверь параметры импорта пикч, которые для тайлов. Даж не знаю.
Аноним 09/03/21 Втр 21:09:40 #382 №732095 
>>732015
Помогло, спасибо!
Аноним 10/03/21 Срд 01:05:55 #383 №732111 
image.png
Условно у меня есть поле из клеток размера 32 на 32. В некоторые клетки я спавню объекты, но не ровно по середине, а в случайное место внутри клетки. Если объекты на соседних клетках пересекаются, то они респавнятся в другом месте. Но, если они пересекаются со "стенами" уровня, то респавнятся они не корректно. Могут задвоится, могут затроиться, могут пропасть, короче хуевертит по полной. Не могу понять, почему
Аноним 10/03/21 Срд 02:20:21 #384 №732119 
>>732111
Ты думал вместо респавна просто смещать сабж пока интерсекция не прекратится?
Аноним 10/03/21 Срд 02:33:48 #385 №732120 
>>732111
Присоединяюсь к анону выше, очевидно ты делаешь что то странное, возможно ты просто каждый кадр молотишь один и тот же if
Аноним 10/03/21 Срд 09:23:56 #386 №732140 
Кто-нибудь умеет писать шейдеры? Никак не могу научится.
Суть такова. Хочу шейдер который бы автоматом делал более плавные переходы между тайлами на тайлмапе.
Аноним 10/03/21 Срд 09:25:19 #387 №732141 
>>732111
Чел, просто ты должен записать в массив только те клетки, которые свободны и работать с массивом, а не тайлмапой.
Аноним 10/03/21 Срд 09:47:15 #388 №732146 
>>732140
А я хочу шейдер, чтоб варил мне кофе и отсасывал хуй. Но никто не пишет мне такой шейдер.
Аноним 10/03/21 Срд 10:09:16 #389 №732151 
>>732146
А я тебя не прошу сосать мне хуй. Если умеешь писать шейдеры, покажи/расскажи. Если не умеешь - пиздуй нахуй.
Аноним 10/03/21 Срд 11:12:51 #390 №732159 
>>732151
Ты просишь написать тебе шейдер.
Но ты делаешь это без уважения...
Аноним 10/03/21 Срд 11:14:40 #391 №732160 
... ты даже не погуглил, что шейдер может делать, а что - нет.
Аноним 10/03/21 Срд 12:58:22 #392 №732176 
image.png
image.png
>>732119
>>732120
Подробнее, пожалуйста. У меня уже есть код, который делает то же самое, только если предмет соприкасается, например, с игроком. Но в таком случае респавнится он корректно. Условно number_item у меня десять
>>732141
Не, у меня и есть массив только из свободных клеток, но предмет я хочу располагать не ровно на клетке, а со случайным сдвигом, чтобы ландшафт казался более природным. Но в таком случае часть предметов наезжает на стены, если спавнится на клетке рядом со стеной, что не всегда красиво. И вот если он наезжает на тайлмапу стены, то я респавню снова в массив со свободными клетками
Аноним 10/03/21 Срд 12:59:16 #393 №732177 
>>732176
Если надо могу заморочиться и видео запилить
Аноним 10/03/21 Срд 16:15:00 #394 №732232 
>>732176
>И вот если он наезжает на тайлмапу стены
Во-первых, ты можешь это узнать заранее. То есть спавнить не по всему тайлу, а только в области, которая меньше, гарантированно не пересекается.
>я респавню снова в массив со свободными клетками
Ну вот тут ты и делаешь что-то неправильно.
Этот код ты не показал.
Очевидно что ты спавнишь и спавнишь новые, а старые не удаляешь.
А тебе надо position менять всего лишь.
Аноним 10/03/21 Срд 19:28:10 #395 №732275 
>>732176
Твоя фигня задевает стену
@
Двигаешь фигню на пару пикселей в сторону клетки, в которой заспавнил
Аноним 10/03/21 Срд 20:33:54 #396 №732282 
>>732176
> предмет я хочу располагать не ровно на клетке, а со случайным сдвигом, чтобы ландшафт казался более природным
Согласно принципам SOLID, а точнее первой букве S (single responsibility principle) твоя спавнер-система должна давать объектам координаты клетки для спавна и всё (по клеткам всё, никаких сдвигов и ограничений, просто пару чисел-координат). Дальнейшие сдвиги и проверки объект выполняет самостоятельно внутри полученной им сверху области ячейки по заданным координатам.

Исходи из этого и ты увидишь, как всё упростится. Тебе не придётся пилить сложнейшую спавн-систему с кучей ифов-проверок на сдвиги в ячейках. У тебя система станет по сути однострочная: взять объект из пула, отдать ему пакет данных и дальше пусть делает то, что он умеет делать с ними и делать хорошо, а спавнер возьмёт следующий объект из пула и отдаст ему следующий пакет данных.
Аноним 10/03/21 Срд 23:00:49 #397 №732304 
>>732282
И что тут солид, если у тебя объект помимо своих дел занимается расстановкой и для этого ему придется все равно лезть внутрь тайлмапы? Логичнее когда этим занимается тайлмапа, все таки она заведует картой, а от объекта ей достаточно узнать его размеры, по сути и так публичные примитивные данные.
Аноним 11/03/21 Чтв 03:28:01 #398 №732325 
>>732159
Я прошу показать мне как написать шейдер.
Аноним 11/03/21 Чтв 03:32:19 #399 №732326 
>>732304
Нет. Тайлмапа выдала объекту координаты центра/начала клетки и все. Объект в зависимости от своих размеров и размеров клетки подвинулся.
Те если у тебя клетка квадрат 10х10, а объект 5х5.
Значит максимально он может отодвинуться от верхнего левого угла на 10-5 пикселей по х и по у.
Задача решена.
Аноним 11/03/21 Чтв 04:10:49 #400 №732330 
>>732140
Тебе точно это нужно? Нельзя просто нарисовать нужные границы тайлов в картинке? Опиши подробнее. Я не уверен что можно написать шнйдер, который подсматривает в соседние ячейки.
Аноним 11/03/21 Чтв 04:26:07 #401 №732331 
>>732326
Нигде не говорил что это невозможно сделать так. Просто это не SRP
> Тайлмапа выдала объекту координаты центра/начала клетки и все. Объект в зависимости от своих размеров и размеров клетки подвинулся.
> Те если у тебя клетка квадрат 10х10, а объект 5х5.
> Значит максимально он может отодвинуться от верхнего левого угла на 10-5 пикселей по х и по у.
> Задача решена.
Это все может делать тайлмапа в функции установки объекта. То что он 5х5 она элементарно получит от самого объекта. И ничего двигать не придется, она сразу будет знать возможный отступ.
Если тебе так хочется чтобы было SRP но объект расставлял себя сам, то тебе надо завести в объекте компонент Placeable который этим будет заниматься, или может быть заюзать паттерн Command
Аноним 11/03/21 Чтв 05:22:01 #402 №732336 
>>732331
В общем, проблема твоя решена или нет?
Аноним 11/03/21 Чтв 05:28:40 #403 №732337 
>>732330
Если я нарисую тайлы на картинке, то мне придется рисовать их 14 штук. Плюс в годоте нет z координаты у тайлов, что плохо и не позволяет уменьшить их количество на спрайт листе. Те мне надо рисовать взаимодействие каждого тайла с каждым.
Так же, если я захочу сделать анимацию, мне придется делать n тайлмап (подложка, анимированный объект), чего бы хотелось избежать.
Поэтому, я думаю что должно быть возможно сгенерировать по тайлмапе шейдерную маску в пнг и на основании ее как-то сгладить между разными тайлами границы.
Аноним 11/03/21 Чтв 09:14:38 #404 №732347 
>>732337
> нет z координаты у тайлов,
Есть. Но очень мудрёная. Поэтому ты её не заметил и думаешь, что её нет.
> сгенерировать по тайлмапе шейдерную маску в пнг
Если ты хочешь делать свою собственную композитную графику, не используй тайлмапы вообще. Напиши класс с нуля. Ты больше времени потратишь на еблю при скрещивании ежа с ужом. Тайлмапы не для этого.
Аноним 11/03/21 Чтв 09:30:02 #405 №732348 
>>732325
> Я прошу показать мне как написать шейдер.
https://docs.godotengine.org/ru/stable/tutorials/shading/shading_reference/shaders.html
>Шейдеры обрабатывают информацию не так, как это делает обычная программа, поскольку они оптимизированы для запуска на GPU. Одним из следствий этого является то, что они не сохраняют свои данные после запуска; они выводят конечный цвет на экран и двигаются дальше. Соответственно, нет способа получения доступа к выводу цвета из последнего запуска шейдера.
Аноним 11/03/21 Чтв 16:32:40 #406 №732443 
>>732337
>Если я нарисую тайлы на картинке, то мне придется рисовать их 14 штук.
Думаю так и делают. Либо, Делят тайлы на составляющие, и рисуют конкретно границы, не трогая сердцевину.
Почитай вот тут https://www.gamedev.net/tutorials/_/technical/game-programming/tilemap-based-game-techniques-handling-terrai-r934/
Аноним 11/03/21 Чтв 16:35:12 #407 №732445 
image.png
>>732232
>>732275
>>732282
Как мне изменить позицию, если я декларирую переменную в одной функции, а менять позицию должен в другой?
Я уже пробовал делать все через одну переменную, перезаписывая ее для каждого нового объекта, но соснул хуйцов.
Аноним 11/03/21 Чтв 16:35:55 #408 №732446 
>>732348
Это правда, но в шейдер можно передавать параметры - например можно закинуть текстуру, в которой закодированы значения ячеек
Аноним 11/03/21 Чтв 16:36:41 #409 №732447 
>>732445
>все через одну переменную
декларируемую вне функции конечно
Аноним 11/03/21 Чтв 16:41:09 #410 №732451 
>>732445
Разбираться с матчастью. Иначе никак. Так и будешь сосать хуйцов при попытке отойти от рандомного туториала с ютуба на шаг. В твоём случае нужно изучить что такое переменные, каких типов бывают данные. Как данные в переменных хранятся (по ссылке, по значению). Ну и ООП, ну и паттерны. Ну и... тогда глядишь и перезвоним тебе.
Аноним 11/03/21 Чтв 17:08:12 #411 №732459 
>>732445
Одна глобальная переменная соснула, скорее всего, потому что произошло следующее - ты записал в переменную объект А, подписал его на событие, потом записал в переменную следующий объект Б, потом объект В, и тут прилетел сигнал, который читает что в переменной, ты ожидаешь что там еще объект А, но это скорее всего не так.

Проблему решить можно разными способами.
Я обычно пишу в таком стиле
func spawn_cube_1():
var cube_1 = Cube_1.instance()
var pos = cell_item.pop_front()
while true:
 cube_1.position = pos + Vector2(randi....)
 if check_position(cube_1.position):
  break
add_child(cube_1)

Где check_position проверяет можно ли разместить по указанным координатами.

Либо сразу указать для randi возможный диапазон.

Аноним 11/03/21 Чтв 21:16:17 #412 №732511 
>>732347
Так, погоди. Где? Даже в файле сохраненной тайлмапы у каждого тайла нет Z индекса. WTF?
Аноним 11/03/21 Чтв 21:28:12 #413 №732517 
>>732511
У тайлсета. Сорян, ошибся.
Аноним 12/03/21 Птн 03:47:56 #414 №732619 
>>732517
Крч либо кастомную тайлмапу писать с нуля. Либо меджик шейдер. Лучше конечно меджик шейдер, тк его выполнение будет гораздо быстрее, чем годотовый draw.
Аноним 12/03/21 Птн 08:51:58 #415 №732634 
>>732619
> годотовый draw
Разумеется. Эта штука нужна для отрисовки статических форм. ГУИ, и т.п. Бульбы из игры на прошлом ТВГ - яркий пример. Пока на экране статически отрисованные бульбы, ФПС запредельный. Добавляешь динамически отрисовывающийся параллаксный бэкграунд - получаешь лютые фризы при отрисовке следующей пачки форм.
Аноним 14/03/21 Вск 02:58:39 #416 №733085 
2021-03-14025742.png
Сап. Почему возникают белые точки, при создании тайлов на мапе(пикрил)?
Делал по гайду, там все норм и ничего такого нет. Повторил идеально 1 в 1, но все равно не работает.
Что делать?
Настройки графики и тд в проекте идентичные гайду.
Аноним 14/03/21 Вск 03:15:13 #417 №733086 
>>733085
Все, нашел в чем трабл
Надо было при импорте тайлмапа убрать галочку с filter
Аноним 14/03/21 Вск 10:43:59 #418 №733104 
>>733086
Именно так. Если хочешь текстуры с мыльцом, то нужно совершенно иным подходом подходить. Проектировать тайлы так, чтобы их текстуры торчали за рамки тайлов. Пустые тайлы надо держать на атласе далеко отдельно, чтоб концы соседних тайлов не доставали в виде вот таких белых точек.
Аноним 14/03/21 Вск 11:26:58 #419 №733110 
шестеренка.jpeg
>>719977 (OP)
Может кто кинуть ссыль на туториал, как на годоте делать редактор уровней?

Никогда раньше геймдевом не занимался. Есть опыт проганья на с/с++.

Хочу просто для души что-то попрожить играбельное, чисто для себя.

В общем хочу сделать игру про побег из лабиринта от минотавра. Но делать каждый уровень в ручную на движке не хочется. Я вообще хочу сделать набор оъектов типа стены, ловушки, двери, монстры и тд. А потом все это расставлять в редакторе. Причем что-бы это даже мог делать не я сам, а кто захочет. Ну, з условных игроков.
Ну, а сам редактор встроен в игру, то-есть создатель уровней вообще не должен парится про двжок и годот. Ему должно быть достаточно самой игры+редактор.

Собтвенно говоря есть какие-то туториалы про это вот все?
Аноним 14/03/21 Вск 12:38:40 #420 №733120 
>>733110
Я бы тебе помог, но...
Аноним 14/03/21 Вск 13:30:46 #421 №733125 
>>719977 (OP)
КотанЫ есть одна беда не могу вот так просто описать, поэтому попробую сложнее. Активно изучают двиг единственно пишу скрипты на сиришетке, более менее продвигаюсь, но вот уже на несколько дней застрял на создании паузы игры. Вроде ерунда, создал сцену, добавил кнопок написал скрипт в скрипте прописал методы, которые вначале я связал нажатие кнопок из сцены, так же в сцену паузу добавил дочернюю сцену опции меню из главного меню, но когда запускаю игру кнопки не работают! Я неоднократно проверял скрипт паузы, сверил все названия методов с указанными в сцене, проверил все пути к этим кнопками, все верно, но кнопки не работают. Что примечательно главное меню, меню опций даже меню окончания уровней все работает, но меню паузы - нет. Нажимаю на эскейп, меню вызывается и все, мышкой видно, что кнопки есть они подсвечивается, но ни как не реагируют, да я в сцене указал, что кнопки должны откликаться нажатием мыши, но они не работают, я даже пробовал вызывать меню паузы вместо меню главного, внезапно начинает работать, но как только нажимаю на продолжить игру больше меню паузы не работает. Заранее буду признателен если кто-нибудь скинет мне ещё пару таториалов по данной проблеме или игр со скриптами сиришетке. Спасибо за внимание.
Аноним 14/03/21 Вск 13:40:55 #422 №733128 
>>733110
А в чем собственно проблема для чего нужен туториал?
Берешь тайлмапу. Или сетку кнопок. Она будет палитрой объектов. На ней будут куски стен, ловушки, двери, монстры и тд. Клик на объект делает его выбранным. Украшательства на твой вкус, можно сделать переключение вкладок по типам, можно делать инструменты типа стерки.
Берешь еще тайлмапу. Она будет картой уровня. По нажатию на конкретный тайл выставляешь в нем выбранный на палитре объект. При стирании очищаешь тайл. Если необходимо рисовать отдельно пол, и отдельно объекты, можно сделать стек тайлмапов друг над другом. Надо только следить, какой получает клики.
Пишешь сохранение и загрузку уровня в редакторе. Банальный цикл по всем строкам и столбцам тайлов. В какой нибудь json вида { "objectType" : "wallEast", "x": 10, "y": 15 }
Соответственно при загрузке уровня уже в игре, просто расставляешь по порядку все эти объекты уже на игровой сцене.
Дальше уже опционально все можно наращивать. Хочешь - инструмент для рисования стен, который сам делает соединения с пересекающимися. Хочешь - всякие автозаливки. Хочешь - окошко свойств, где ты можешь задавать отдельным монстрам или ловушкам урон или здоровье (это будет просто еще одно свойство в записи json)
Аноним 14/03/21 Вск 13:47:39 #423 №733130 
>>733125
Не наследуй режим паузы в сцене-меню.
Аноним 14/03/21 Вск 13:48:40 #424 №733131 
>>733125
https://docs.godotengine.org/ru/stable/tutorials/misc/pausing_games.html
Аноним 14/03/21 Вск 13:48:49 #425 №733132 
>>733125
В начале скрипта пишешь GD.Print("pause") и смотришь в консольке. Если не напечатало, значит твоя кнопка не подсоединена к скрипту. Если напечатало, то уже в другом чем-то проблема.
Аноним 14/03/21 Вск 13:56:48 #426 №733135 
>>733128
>А в чем собственно проблема для чего нужен туториал?

На с/с++ я просто гонял данные по памяти и всячески извращался с ними. С визуалом я не работал вообще. Даже ни одного интерфейса за все время не написал.

Я вообщем-то представляю все то о чем та написал. Но в силу полного осутствия опыта представляю все это очень смутно.

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

Это экономит просто дохера времени и усилий. А я уже вусмерть заебался думать.

Я уже не прожу на плюсах, сейчас в процессе перехода в не айти бизнес. Но как Ватсон в анекдоте не могу без трубки.

Просто я хочу прогать ради развлечения, а не под заказ. Но при этом вновь проходить через мучения новичка в новой теме мне ох как не хочется, напроходился уже.

Собственно поэтому мне и нужен туториал, или хоть какой нибудь видосик на ютубе.

Должны же быть туториалы для редакторов уровней для платформеров на годоте. Мне бы вполе подошел такой.

>>733120
>Я бы тебе помог, но...
Ну и что же тебе мешает помочь мне?
Аноним 14/03/21 Вск 14:28:02 #427 №733139 
1540653395398.png
>>733125
Когда сцена ставится на паузу, то все находящиеся на ней ноды ставятся на паузу. Включая кнопки меню паузы.
Это происходит, потому что у всех нод есть свойство "pause_mode" и по умолчанию он стоит в "Inherit" (наследовать поведение от родителя).
Чтобы меню продолжало работать, надо вручную это свойство поменять на "process"
Аноним 15/03/21 Пнд 07:23:55 #428 №733270 
>>733139
Спасибо анош.
>>733131
>>733130
>>733132
Ведро чая вам.
Аноним 15/03/21 Пнд 08:33:11 #429 №733276 
Хочу встроить вьюпорт годота в своё оконное приложение (гтк шарп). Какие есть варианты?
Аноним 15/03/21 Пнд 13:32:03 #430 №733325 
1489906427374.mp4
Как заставить эту ебаную инверсную кинематику работать?
Аноним 16/03/21 Втр 00:47:04 #431 №733424 
>>719977 (OP)
Сап аноны, подскажите какие то инструкции/советы/видосы/что нибудь, что бы создать NPC с которым можно будет поговорить, взять квест и тд. И NPC с которым можно торговать.
Аноним 16/03/21 Втр 05:59:13 #432 №733444 
>>733424
Подозреваю что ты нихуя не разобрался с основами геймдева впринципе если задаешь подобный вопрос. Учи их.
Аноним 16/03/21 Втр 08:01:11 #433 №733448 
>>733325
В общем в скелете была какая то проблема, так и не понял что именно. Попробовал пару других моделек, в некоторых ИК завелось, что странно, потому что в блендоре ИК работает у них всех.
Аноним 16/03/21 Втр 09:03:20 #434 №733455 
>>733444
Двачую этого. Вопрос в стиле:
> Это форум астрономов? Подскажите, как построить свою обсерваторию?
Аноним 16/03/21 Втр 09:14:13 #435 №733457 
>>733455
Скорее вопрос был про то, как это реализовать.

Аноним 16/03/21 Втр 09:22:05 #436 №733459 
>>733457
Постройка зданий разве не является реализацией архитектурного плана?
Аноним 16/03/21 Втр 09:29:46 #437 №733462 
>>733459
Я про реализацию кода
Учитывая твою аналогию, это что-то типа "Подскажите, как правильно настроить телескоп".
Аноним 16/03/21 Втр 09:30:28 #438 №733463 
>>733325
Короче проблема была в скейле скелета и том, как gltf и коллада в блендоре не умеют аплаить скеил. Лучше всех справился фбх, там можно аплаить его при экспорте, без ебли и ничего не распидорасить при этом
держу в кусре
Аноним 16/03/21 Втр 10:02:39 #439 №733467 
>>733462
Ммм, ну ладно.
>>733463
Аплаить скейл - это классика, блять, это первое что знать надо при изучении моделирования. За неаплаеные трансформы в моделях работодатели увольняют нахер.
Аноним 16/03/21 Втр 10:53:22 #440 №733472 
Как с поддержкой шарпа в годо? Потому что когда билд скачиваешь он пишет, что поддержка в альфе и в продакшене не используйте. Все прям совсем плохо?
Аноним 16/03/21 Втр 10:58:25 #441 №733473 
>>733276
Годо для этого не предназначен. Теоритически, ты можешь пересобрать движок со своими правками для поддержки встраивания, но на практике, боюсь, не потянешь - слишком много работы.
Аноним 16/03/21 Втр 11:01:07 #442 №733475 
>>733472
Да нормально там всё. Предупреждение на случай претензий.
>>733473
Вот это реально облом.
Аноним 16/03/21 Втр 12:47:20 #443 №733491 
>>733472
Все там хорошо с шарпом. Это окно появилось год назад, когда еще только добавляли. То есть был релиз стабильной версии движка, а шарп был еще в ранней стадии. Ну а убирать предупреждение, видимо, смысла нет, поскольку потом будет переезд на неткор.
Аноним 16/03/21 Втр 12:55:31 #444 №733495 
Пока расписывал проблему, осознал решение. gd телепатический
Аноним 17/03/21 Срд 06:46:49 #445 №733617 
15751136946511.jpg
Создал героя-сцену, продублировал. Хочу, чтоб они приближались друг у другу. Скрипт у них один. Сделал скрипт Area2D, в котором они обнаруживают друг друга по body_entered. Назначил слои у одного героя слой1, маска2, у другого героя наоборот: слой2, маска1. Но движется только первый герой, второй стоит на месте. Если у них переназначить слои и маски наоборот, двигаться будет только второй герой. Ну то есть движется только тот герой, у которого маска раньше по номеру.
Как уйти от этой проблемы?
Аноним 17/03/21 Срд 07:14:40 #446 №733619 
>>733617
Код показуй.
Аноним 17/03/21 Срд 11:53:18 #447 №733634 
>>733135
> Ну и что же тебе мешает помочь мне?
Может, это тот самый антон, что мне уже помогает.
У него щас дела, нет мотивации и я, просящий хуярить код за большое человеческое, потому что больше некому.
Аноним 17/03/21 Срд 14:48:11 #448 №733670 
>>733617
Как у тебя связано движение и обнаружение?
По логике сигнал выстреливает один раз, в момент входа тела в область.
Они у тебя случаем не сразу при старте сцены перекрываются?
Тут вообще надо немного по другому делать, проверять в process() видит ли один другого, и тогда двигаться.
Что-то типа такого:
func _process(delta):
var bodies = $Area.get_overlapping_bodies()
for body in bodies:
...
Аноним 17/03/21 Срд 14:50:52 #449 №733671 
>>733619
Hero1.gd:

extends KinematicBody2D

onready var detectionZone = $DetectionZone
onready var sprite1 = $Attack1

enum {IDLE, RUN, ATTACK}

var MAX_SPEED = 100
var ACCELERATION = 300
var state = IDLE
var velocity = Vector2.ZERO


func _ready():
sprite1.frame = 0

func _physics_process(delta):
match state:
IDLE:
seek_enemy()

RUN:
run_state(delta)

ATTACK:
attack_state()

velocity = move_and_slide(velocity)

func run_state(delta):
var enemy = detectionZone.enemy
if enemy != null:
accelerate_towards_point(enemy.global_position, delta)
else:
state = IDLE

func attack_state():
pass

func seek_enemy():
if detectionZone.can_see_enemy():
state = RUN

func accelerate_towards_point(point, delta):
var direction = global_position.direction_to(point)
velocity = velocity.move_toward(direction MAX_SPEED, ACCELERATION delta)
sprite1.flip_h = velocity.x < 0


DetectionZone.gd:

extends Area2D

var enemy = null

func can_see_enemy():
return enemy != null

func _on_DetectionZone_body_entered(body):
enemy = body
Аноним 17/03/21 Срд 14:52:10 #450 №733673 
>>733671
бля табуляция еба
Аноним 17/03/21 Срд 14:54:18 #451 №733674 
>>733670
При старте перекрываются.
Ок, попробую, спосибо
Аноним 17/03/21 Срд 15:22:24 #452 №733682 
>>733671
Мудак блять.
https://pastebin.com

Нихуя не понял эту простыню. Переделывай всё. Нахуй тебе слои вообще? Насмотрелся туториалов и повторяешь не думая. Нахуй тебе там слои и маски? Делай без них. Думай, как сделать без них.
Аноним 18/03/21 Чтв 16:14:24 #453 №733912 
Поставил стейбл годо с шарпом т.к. сказали, что все норм. Попробовал сбилдить, ошибка выдала, что у меня нет кор слишком новый, окей, выбрал моно - выдало другую ошибку, загугли ошибку, а в ответах пишут это норм баг, используйте нет кор (который, сука, слишком новый бтв).
Поставил релиз-кандидат, тут нет кор заработал и вроде все норм, а вот моно все еще в жопе. Хоть что-то.
Аноним 18/03/21 Чтв 17:35:57 #454 №733921 
>>733912
> сказали, что все норм
Сказали.
Тебе-то что не нравится, колясочник? Опенсорц слишком больно пнул тебя?
Аноним 18/03/21 Чтв 17:43:12 #455 №733922 
>>733921
Опять таблеточки забыл?
Аноним 18/03/21 Чтв 17:44:41 #456 №733923 
>>733922
О, да ты ещё и ньюфаг. Паст двачерских не знаешь.
Аноним 18/03/21 Чтв 17:44:55 #457 №733924 
>>733912
Все норм с шарпом, все верно. Шарп - язык. Что ты там билдил, причем тут какие то неткоры - хз, стейбл использует моно. Неужели так сложно просто выполнить инструкцию из полутора пунктов.
Аноним 18/03/21 Чтв 18:00:29 #458 №733926 
>>733924
Стейбл по дефолту выставил мне dotnet CLI как Build Tool в настройках, а не моно и я в этом каким-то образом виноват? Более того даже если бы там был моно, он бы не заработал, так что аргумент немного инвалид.
Аноним 18/03/21 Чтв 18:49:11 #459 №733933 
1616082546892.png
>>733926
Аноним 18/03/21 Чтв 19:16:32 #460 №733938 
>>733933
Давайте ка глянем на страницу загрузки
> For the Mono version: MSBuild
(from Visual Studio Build Tools or the Mono SDK)
Хмм, а Mono SDK то у меня установлен и слово OR намекает на то, что вс инструменты мне не нужны если у меня есть моно.
Промолчу, что ты изначально говорил про моно, а теперь на доки про VS инструменты кинул скрин.
Аноним 18/03/21 Чтв 19:46:00 #461 №733940 
>>733938
Лень спорить. Ты написал что выбр
ираешь неткор, а в доках написано выбирать 4.5. Наверное когда будет поддерживаться неткор, то об этом в доках напишут.
Добавлю что я например работаю в вскоде, поэтому в проекте вообще ничего не менял. Возможно студия тебе сама выставила из доступных.
Аноним 18/03/21 Чтв 20:56:57 #462 №733943 
шестеренка.jpeg
>>733110
Bump реквесту.
Я что-то такое нашел на ютубе, но оно немного всратое. Может кто чего годного посоветует?
Аноним 18/03/21 Чтв 23:23:36 #463 №733987 
>>733943
> Может кто чего годного посоветует?
А что тут можно посоветовать? Ты хочешь сделать игру, но делать её тебе не хочется. Я так понял твой предыдущий пост.
>>733110
> В общем хочу сделать игру... Но делать каждый уровень в ручную на движке не хочется.
Ну так не делай, лол. Хуан дал ему охуенный редактор с кучей инструментов. Нет, не хочу делать. Дайте кнопку "зделоть зоебись".
Аноним 19/03/21 Птн 00:45:05 #464 №734009 
image.png
Не воспринимаются клики мыши (при этом, с клавиатурой как-то проблем не возникает). Что я делаю не так?
Аноним 19/03/21 Птн 00:53:24 #465 №734011 
>>734009
Отбой. Как обычно, я сам болван.
Ошибся функцией, куда писал код.
Аноним 19/03/21 Птн 00:59:27 #466 №734012 
>>733943
Чем тебе мое текстовое описание не подошло? >>733128
Аноним 19/03/21 Птн 01:15:20 #467 №734017 DELETED
>>733110
>Есть опыт проганья на с/с++.
Не еби мозг и бери UE4.
Аноним 19/03/21 Птн 08:30:54 #468 №734029 DELETED
>>734017
> Не еби мозг и бери UE4.
Во-первых, сразу репорт за движкосрач, уеч ты будешь в другом треде советовать, идиотина.
Во-вторых, годо может в кресты, никто не мешает писать логику на крестах. Кроме собственной лени.
Аноним 19/03/21 Птн 10:43:22 #469 №734038 
Объясню еще раз, чего я хочу, для таких вот как этот >>733987

Когдато, давно играл в Герои 3. Ну, игра как игра, прикольная популярная. Проходил кампанию и официальные мисии. Играл против компов на рандомнх картах.
Но потом мне попалось пару карт сделанных любителями.
The Empire Of The World II пример такой карты.
Я был поражен насколько лучше и качественне была эта карта в сравнении с теми которые делала сама студия.
Мне стало интересно, начал думать и интересоватся "философией" созданий, даже не игр, а скорее уровней и конкретных карт под игры.

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

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

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

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

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

Плюс учтите что я прогал на чисто с/с++, то-есть все эти ваши визуальные фишки вообще не секу.
Это к стати ответ на вот этот вопрос >>734012 Описание может и хорошее, но для меня не подходит.

>>734017
Годот минималистичен, чем и привлекателен. Я Анриал и Юнити разожравшиеся монстры, я рассматривал их как варианты, но мне не подошли.
На счет языка, мне вообщето все равно на чем прогать. Главное что-бы ООП было.
Аноним 19/03/21 Птн 13:21:07 #470 №734054 
>>734009
Опиши подробнее у меня тоже мышь не откликается, притом что я исправил названия методов, вначале путал методы с залипанием мыши и нажатием мыши. И настроил кнопки в проекте.
Аноним 19/03/21 Птн 13:58:35 #471 №734065 
>>734054
Скорее всего у него один полноэкраный Control перекрывает второй Control в котором ожидаются клики, но не доходят. Но поскольку у нас тут не принято постить подробности, остаётся уповать на то, что телепаты из отпуска выйдут.
Аноним 19/03/21 Птн 18:38:10 #472 №734136 
image.png
>>734054
Я код вместо функции func _input(event): написал в другой функции, оттуда и проблемы.
В общем виде у тебя должно заработать как на пикрил.
Я обычно привожу в базовом виде к работосмособности, а после начинаю в более сложных вариация тестировать. Я же всё ещё учусь. А катать сразу много кода в виде, котором мне может показаться правильным, чревато дальнейшей борьбой с движком и иде, а не логикой, которую я пытаюсь реализовать.
Аноним 19/03/21 Птн 21:12:46 #473 №734151 
image.png
>>719977 (OP)
Есть в годоте классная функция настройки коллизии у автотайлов. Но как произвести более точную настройку? Чтобы например в закрашенной области коллизии не было? Можно конечно все настроить через collisionpolygon, но нах так дрочиться? Наверняка есть способ на этапе настройки автотайла все сделать. Подскажите, пожалуйста. Пробовал менять subtitlesize при настройке коллизии, но автотайл очевидно распидорасило
Аноним 19/03/21 Птн 21:20:30 #474 №734153 
>>734151
Менять collision shape? Я только такое могу представить.
Аноним 19/03/21 Птн 22:04:01 #475 №734161 
>>734153
Это какой? При настройке можно ток вон "Collision" расставить - желтые квадратики по размеру клетки
Аноним 19/03/21 Птн 22:28:15 #476 №734165 
Есть сишный код, который подцепляется к движку через gdnative. Все прекрасно кроме одной мелочи: если нативка по какой-то причине уходит, скажем, в сегфолт - игра просто закрывается без каких-либо дампов и/или крэшлогов. Понятно, что можно подцепиться дебаггером и повторно воспроизвести краш, но это долго и неудобно. Есть ли более простой способ заставить движок формировать отчет об ошибке?
Аноним 19/03/21 Птн 23:08:32 #477 №734175 
>>734165
> Есть ли более простой способ заставить движок формировать отчет об ошибке?
Есть.
Пиши скрипты на гдскрипте, а когда возникнет необходимость в оптимизации перепиши готовый код на си.
Аноним 19/03/21 Птн 23:16:45 #478 №734178 
>>734175
Не мой вариант. У меня нет ресурсов переписывать либу сначала на gdscript, а затем обратно на си. Также у меня нет возможности изучить все потенциальные места и случаи возникновения сегфолтов и исправить проблемы.

Мне бы хватило простого сишного signal handler'а, но, насколько я вижу, он не работает при загрузке либы в godot.
Аноним 20/03/21 Суб 03:10:55 #479 №734190 
Как сделать партиклы, которые бы летели к определенной точке по разным траекториям?
Аноним 20/03/21 Суб 07:15:27 #480 №734201 
>>734178
> Также у меня нет возможности изучить все потенциальные места и случаи возникновения сегфолтов и исправить проблемы.
Вообще говоря, это значит, что эта С-либа попросту не подходит для продакшеа.
Аноним 20/03/21 Суб 14:17:44 #481 №734233 
>>734151
бамп
Аноним 20/03/21 Суб 20:12:24 #482 №734281 
сап
Можете помочь понять, для чего используется эти строчки?
Переписываю код с dart, а там это:

var regions = connectorRegions[connector].map((region) => merged[region]);
var dest = regions.first;
var sources = regions.skip(1).toList();

Конкретно не понимаю первую, а именно для чего нужна .map
Везде уже просмотрел, но так и не понял, как ее преобразовать в гдс.
Вот документация. https://api.dart.dev/stable/2.10.5/dart-core/Iterable/map.html
Кучу раз прочитал, но все равно нихуя не понял.

Если что, вот переменные:

connectorRegions = <Vec, Set<int>>{};
Словарь с вектором и массивом(к которому и обращается .map)

connector - случайная позиция. Ключ словаря

region - случайная координата (Vector2)

merged - тоже словарь со свободными позициями.
Создается как merged = i

Может хуйню написал - голова плывет пиздец, но энивей хелп
Аноним 20/03/21 Суб 20:20:34 #483 №734282 
>>734281
Мапа это вебмакакерский способ написать "создать новый массив, в котором для каждого элемента вместо этого ставится соотв. элемент из merged"
Аноним 20/03/21 Суб 20:23:22 #484 №734283 
>>734282
А как это правильно в гдс преобразовать?
Аноним 20/03/21 Суб 20:24:17 #485 №734284 
>>734281
Иными словами
var regions = []
for region in connectorRegions[connector]:
__regions.push_back(merged[region])
Не проверял
Аноним 20/03/21 Суб 21:54:36 #486 №734294 
>>734151
бамп блять, это же должно быть легко реализуемо
Аноним 20/03/21 Суб 22:04:43 #487 №734298 
>>734294
Вряд ли.
Наверное можно сделать самому тул скрипт.
Который проходит по всем полигонам коллизий, и разрезает их и приделывает к конкретным тайлам.
Тогда можно будет просто рисовать любые полигоны без привязки к сетке, а оно уже само.
Аноним 20/03/21 Суб 22:08:49 #488 №734299 
>>734298
штош
Аноним 20/03/21 Суб 22:49:14 #489 №734305 
>>734284
Пойду проверю, спасибо
Аноним 20/03/21 Суб 23:04:49 #490 №734306 
>>734284
А можешь еще подсказать, что делает последняя строчка?
var dest = regions.first - берет первый элемент, как я понял

А var sources = regions.skip(1).toList();?
skip, по логике, пропускает первый элемент, но зачем нужен toList, если он превращает все это в массив?

Вот на всякий доки
toList()
https://api.dart.dev/stable/2.12.0/dart-core/Iterable/toList.html

skip()
https://api.dart.dev/stable/2.10.5/dart-core/Iterable/skip.html
Аноним 20/03/21 Суб 23:06:28 #491 №734308 
>>734283
> правильно в гдс преобразовать?
var arr2 = arr1.duplicate()
Аноним 20/03/21 Суб 23:22:24 #492 №734310 
>>734306
Скорее всего да, новый массив без первого элемнта
> зачем нужен toList
Очевидно skip() возвращает какой то ленивый генератор, а не массив. toList() же его создает реально.
На gdscript это можно сделать так
var sources = regions.duplicate()
sources.pop_front()

>>734308
Лол, только ты саму логику в лямбде упустил.
Аноним 20/03/21 Суб 23:54:46 #493 №734323 
>>734310
Спасибо, пойду чекну
Аноним 21/03/21 Вск 01:36:21 #494 №734336 
>>734190
Бамп вопросу
Аноним 21/03/21 Вск 12:26:40 #495 №734372 
>>734190
Ты имеешь в виду чтобы вылетали из одной точки, разлетались, а потом опять слетались в другую точку? Из коробки чисто настройками так вроде бы не сделать. Надо или писать particle shader, или скомпилировать один модуль на с++ в движок, где есть аттракторы для частиц https://vimeo.com/352840906
Аноним 21/03/21 Вск 15:21:02 #496 №734406 
particle.mp4
>>734336
>>734372
Вот простенький пруф оф концепт.
1. Создаешь партиклы какие хочешь.
2. Нажимаешь у Particlematerial -> convert to ShaderMaterial
3. Добавляешь две строчки которые я выделил, и в начале uniform переменную для вектора
4. В самой игре периодически обновляешь шейдеру target, если надо.
Аноним 21/03/21 Вск 15:21:54 #497 №734408 
>>734406
p.s. естественно 50.0 тоже надо запилить в униформы для настройки.
Аноним 21/03/21 Вск 15:27:56 #498 №734412 
Идея подсмотрена тут
https://www.reddit.com/r/godot/comments/grlwqg/no_attractors_for_particles_ok_then/
чувак гоняет партиклы по текстуре, которую передает в шейдер (они катаются только по черным канавкам)
Аноним OP 21/03/21 Вск 15:54:52 #499 №734417 
1616331246874mascot
Предлагайте ваши предложения.
Аноним 21/03/21 Вск 15:57:31 #500 №734418 
>>734417
че еще за предложения?
Аноним 21/03/21 Вск 15:57:47 #501 №734419 
>>734417
Сделай графу новостей перед 3.3, что нового добавят, что оптимизируют.
Аноним OP 21/03/21 Вск 16:01:49 #502 №734421 
>>734419
Сделол.

ПЕРЕКАТ
>>734420 (OP)
>>734420 (OP)
>>734420 (OP)
Аноним 21/03/21 Вск 16:04:29 #503 №734423 
lsva5xcdq6d51.png
>>734417
Вроде еще не было
Аноним OP 21/03/21 Вск 16:05:59 #504 №734424 
>>734423
Опоздал. Но я схороню.
Аноним 21/03/21 Вск 19:27:19 #505 №734462 
>>734406
Понял, спасибо. Шидевор.
Аноним 24/03/21 Срд 22:27:35 #506 №735040 
Сап. Есть ли способ установить рандомайз на конкретное значение?
Чтобы при каждом запуске значение рандом чисел было одинаковое? Думал, может сид надо установить, но не работает.
Заменить рандом функции на обычные нельзя.
Аноним 17/06/21 Чтв 16:01:20 #507 №749046 
photo00006.jpg
Сап, годач. Начал осваивать Godot Engine. Захотел сделать игру в жанре roguelike с процедурной генерацией мира, то есть мир будет поделён на чанки. По мере движения персонажа будут добавляться новые чанки. Игра, к слову, двумерная (вид сверху). Для моей реализации нужно проверять наличие экземпляра сцены чанка в определённой точке. Чанк является TileMap 20 на 20 плиток. Если вы знаете более удобные способы реализации чанковой системы, то тоже можете писать.
comments powered by Disqus

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