Вы видите копию треда, сохраненную 5 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Краткий гайд по вкату в движок:
1. Читать документацию.
2. Качать примеры.
3. ПРОФИТ!
Ньюсач
https://godotengine.org/news/
Ссылки
Скачать движок: https://godotengine.org/download/ или http://store.steampowered.com/app/404790/Godot_Engine/
Теперь прямо онлайн - можно и с дивана: https://godotengine.org/online/godot.tools.html
FAQ: https://docs.godotengine.org/ru/latest/about/faq.html
Документация: https://docs.godotengine.org/ru/latest/ https://docs.godotengine.org/en/stable/
Примеры качаются прямо в движке через свой магазин в отдельной вкладке AssetLib. Там есть всё - от платформера до чата.
Игры, созданные глобальными кириллами: https://steamcommunity.com/app/404790/discussions/0/412448792354265655/
Изумительный Годот: https://github.com/Calinou/awesome-godot - подборка дополнений, модулей и минишоукейс от одного из авторов.
Аддон для диалоговой системы: https://github.com/coppolaemilio/dialogic
Для любителей пощекотать конпеляцию
Бинды LUA: https://github.com/perbone/luascript
Бинды JS: https://github.com/GodotExplorer/ECMAScript
Годнота от анона
- Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Имя файлу можно задать любое. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории. Для запущенного таким образом проекта папка res:// становится доступна для записи (если это не ограничено правами доступа в системе).
- В версии 3.2 появилась возможность прикреплять pck к бинарнику. Бриллиант для любителей однофайлового продукта!
- Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot
- Тест-бенчмарк:
- - Веб-версия - https://govdot.herokuapp.com
- - Вишмастер для винды - https://govdot.herokuapp.com/4Anon.rar
Предыдущий: >>719977 (OP)
Архивный: https://arhivach.net/thread/641529/
И первый платиновый вопрос треда.
Когда я добавляю объект в сцену, то он появляется в нулевой отметки xy. И, когда я пытаюсь его перетащить, то либо цепляю другие объекты, либо куски моего объекта, например только спрайт или только коллижншейп. Как мне удобно и нормально перетаскивать сразу весь объект не цепляя при этом другие вокруг?
Ньюсач слабый, я надеялся на топ выборку как в блоке "годнота".
> В версии 3.2 появилась возможность прикреплять pck
не появилась, а вернулась - 2.х умел
Спасибо!
Спасибо.
Сделал я animationPlayer, запихнул туда анимацию ходьбы в разные стороны, настроил скорость и прочие параметры. Запустил - отлично работает, скорость настроена.
Затем сделал animationTree, там blendSpace2D, запихнул туда анимацию для удобства. А эта хуевина проигрывает скорость анимации по своим стандартным параметрам, не учитывая настройки скорости в animationPlayer. Как фиксить?
Алсо, в инете тоже не вижу решения пиздец нахуй элементарная же вещь. Если решения нет, то как реализовать тогда в коде смену направлений от градусов?
Уточню, мне нужна покадровая настройка, так как некоторые кадры у меня проигрываются с разной скоростью
Я прочитал посты из предыдущего треда о подобной проблеме и нет с кодом все нормально он почти одинаковый немного переработанный, возможно опять, что в движке не нажал. Насчёт контролов я не совсем понял, что там перекрывает?
И да я заметил в некоторых примерах управления персонажей задают годов скриптом, а процедурные вещи, например уровни или объекты пишут на шарпе.
Напомни, зачем тебе вообще шарп? Почему нельзя реализовать силами движка то, что ты хочешь?
Он мне понятен и прятен. Я правда пытался освоить гд скрипт, но постоянный контроль отступов и пробелов вымораживают
>>34570 (Del)
Спасибо, попробую
>>34571 (Del)
Понял, но пока это не возможно. Пишу на работе, дома до конца месяца проблемы с инетом, только офлайн.
На самом деле даже того, что я уже достиг в этом движке значительно перекрывает все то что я делал раньше, надеюсь хотя бы эту игру довести до запланированного конца и вправду душевный двиг, надо было изначально на годот вкатываться столько времени потерял.
У меня через kinematicbody2d, IsActionJustPressed() и MoveAndCollide() все норм на 3.2.4 RC5 так-что это ты наговнакодил скорее всего.
Есть серия туториалов на ютубе по связке годот+шарп, автор сильно похож на инфоцыгана, но как вариант https://www.youtube.com/watch?v=ra-BJ-fJ6Qo
Invalid get index 'position' (on base: 'Nil').
при попытке вычислить свою position на следующей итерации. Разве queue_free() не удаляет весь узел? Почему после queue_free() Годот пытается вызвать позицию удаленного узла?
Или он на closest_enemy.position ругается?
Но там же стоит body != null.
Не понимаю, миленькие.
Начала работать мышь, но по прежнему игрок или берет предмет, но не кидает его, или не берет предмет, но может пнуть его. Думаю проблема в состоянии персонажа, когда срабатывает булевое условие в руках или на земле плюс подозреваю что опять что то неправильно в редакторе настроил для персонажа.
Так, ну AnimationTree меня нахуй послало с тонкой настройкой анимации. И тогда вопрос: Как мне сделать так, что бы в топ даун игре с четырьмя направлениями враг смотрел в сторону героя?
У меня есть четыре анимации ходьбы в четыре стороны соответственно. Но передвижение свободное, то есть, спрайт врага должен меняться от угла по направлению гг
алсо, пробовал (direction.global_position.x - global_position.x) > (direction.global_position.y - global_position.y), но персонажа чет ебобить начинает в разные стороны
Сравнивать позицию врага с позицией персонажа и менять анимацию? Помоему самый очевидный вариант.
За полкосаря напишу
Решил проблему с броском и поднием предметов. Короче все дело в райкасте, у меня в сцене он был направлен в землю, а не в направлении взгляда модели, как и думал накосячил в редакторе, а не в коде. Кстати зря я на шарп гнал, он корректно работает.
Сейчас планируют разобраться с поворотом модели, пока по клавишам и добавить анимации, в будущем планируют поворот модели с помощью мыши.
Можно и на дуде звук жопой сыграть, только зачем если есть рот? По отдельности рот, жопа и дуда отлично справляются со своими задачами. Так же как годо и шарп, но вот совмещать - это специальная олимпиада.
Шапку читал?
Ну я уже, в демку поиграл, запускалась минут 5, проект создался за несколько минут. В принципе ничего не лагает и всё работает.
Вкатываюсь через вот этого челика https://www.youtube.com/watch?v=Mc13Z2gboEk , всё правильно делаю?
Какая охуенная аналогия. Ну тогда скажи же нам какие у GDs есть функциональные преимущества перед C#?
Возвращайся в свой движкосрачь и используйте что хочешь, нечего здесь срач разводить.
Кто-нибудь из треда зарелизил игру мечты?
> Как вы тут?
Картоху сажаем на даче. Вот заглянул в тред перед сном. А тут срутся. Зарепортил всех.
Как мне получить доступ к последнему кадру анимации?
Типа код такой по смыслу:
если происходит последний кадр анимаци, то делается что-то
понял, спасибо!
Действительно, нахуй они шарп имплементировали, а не на никому неизвестном говне? Бля, да надо было Lisp или D хуячить, а может бреинфак? С такими киллер-фичами прям завтра в мейнстрим вырвемся.
Не выёбывайся и изучи лайв кодинг на гдскрипте. Потом как постигнешь объектную модель движка, сможешь с лёгкостью хоть на ним, хоть на раст перекатиться. Как раз поддержку этого твоего ним к тому времени допилят.
> Какой жанр игры?
У меня есть большие сомнения насчёт реальности его игры. Ящитаю это позавчерашний залетух-движкосрачер от бана откис и теперь зашёл более тонко срач устраивать.
>Попробуй https://github.com/JustinRyanH/godot-zig
>шучу
В Zig компилятор на Zig для лайв кодинга ещё не сделали.
Жанр игры клон Sims.
Гей-ендевур выходит на кикстартер.
https://www.youtube.com/watch?v=yIJrfvTv8XI
Поддержим, годаны? Что ж мы, кодерки-плагинцы штоле? Нееет, я вижу, среди вас фэпеэсных нет! Поддержим!
Кстати, когда пишу код клиента на том же python, то сервер с ним взаимодействует нормально. Может ли быть проблема в том, что клиент должен быть написан на том же языке, что и сервер?
> Может ли быть проблема в том, что клиент должен быть написан на том же языке, что и сервер?
Нет, не может. Клиент-серверная технология и создавалась для того чтобы не ограничивать клиент и сервер в выборе языков. Внимательнее разбирайся. Неплохо бы код твой глянуть.
>>37403 (Del)
Спасибо тебе, анон.
Я, идиот, пытался вытащить ответ из сервера, не прослушивая подключение.
Мне нужно сделать действие, когда наступает определенный кадр анимации. Но код почему-то не срабатывает. Делаю через curren_animation_positionю. Что не так?
Проще всего в саму анимацию запихнуть трек вызова метода.
Но если хочешь именно кодом, то скорее всего переменная никогда не достигает значения ровно 0.6. Тогла тебе поможет апроксимация к коэффициенту точности:
var phi = 0.55 # naprimer
if abs(current - 0.6) < phi: print("tvoia kiska v zone puska")
А еще call method track ведет себя странно и показывает не все мои скрипты, странно...
Сап годач.
Есть одна проблемка. Предположим у меня есть враг с анимацией атаки в три кадра в четыре разные стороны. Атакаует он в сторону игрока. Но, если игрок начинает кружить вокруг врага, то враг естественно запускает анимацию атаки по новой в каждую сторону. И так его можно закрутить не доводя атаку врага до конца. И мне нужно, чтобы при изменении позиции игрока менялась анимация но с того кадра, который был у предыдущей анимации. Например два кадра в одну, а в другую сторону атака уже с тертьего кадра. Проблема в том, что я не врубаюсь как мне правильно запихнуть переменную, которая сохраняет текущий фрейм, чтобы она фиксировала позицию до изменения, а потом сбрасывалась, а еще какой именно командой запустить анимацию с определенного кадра
Просто сделай атаку в развороте. Вариант слева-направо и второй вариант наоборот. Соответственно, если враг разворачивается в атаке, у него стейтмашина переключает анимацию в разворот (с блендингом) и в дальнейшем стало быть спрайт уже развернут в новое положение. И не надо никакие фреймы запоминать. Искури матчасть по блендспейсам.
Я не пользуюсь стейтмашиной, потому что она не дает тонко настроить скорость анимации для разных фреймов, как это делает animationplayer (как же это тупо пиздец). Так что я делаю через код все.
> не дает тонко настроить скорость анимации для разных фреймов
Там есть ноды для управления скоростью. Я ж грю, матчасть воскури.
ну давай, покажи, как я могу настроить playback speed в animationtree
очевидный musopen.
Напиши сам.
Или [ВЫРЕЗАНО] или [ЦЕНЗУРИРОВАНО]?
https://opengameart.org/art-search-advanced?keys=&field_art_type_tid[]=12&sort_by=count&sort_order=DESC
Это общий вопрос? Потому что чтобы в экспорте годот-игры "вшить" ресурсы (методом ражпега, то есть приписыванием в конец) - это ещё поебаться надо. И движок опенсорсный, а это значит, там в экспорте не только шиндовое ехе.
Чтобы ресурсы были отдельно - описано в оп-посте:
>>34420 (OP)
> Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Имя файлу можно задать любое. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории. Для запущенного таким образом проекта папка res:// становится доступна для записи (если это не ограничено правами доступа в системе).
В godot ресурсы не "вшиваются в exe," а упаковываются в .pck и кладутся рядом с экзешником при экспорте, поэтому делать ничего не нужно.
Емнип ты даже можешь сделать так, чтобы ресурсы не паковались, но это уже нужно доки читать.
А то там RenderingDevice голый и полумёртвый лежит не работает.
Зделойти Наначи в стиле Годот. Я вам за это пол треда отдам.
Чел оче круто за все поясняет
https://www.youtube.com/watch?v=yRHN_WEulLc
Есть еще подобное с упором на архитектуру?
> Есть еще подобное с упором на архитектуру?
Может даже и нет. Потому что известные на слуху каналы, типа KidsCanCode, GDQuest, GameEndeavour у них без упора на архитектуру, как я заметил.
У них более комплексный подход, КМК.
У меня две сцены: типа лобби и арена.
В лобби ты выбираешь бойца, на арене он дерется другими бойцами. Имя победителя сохраняется в синглтоне, в процессе скрипта арены боец с именем победителя коннектится к функции с change_scene.
На второй или третий запуск сцены арены появляется ошибка
>Attempt to call function 'disconnect' in base 'null instance' on a null instance.
в _ready() сделать connect я не могу, потому что узла еще нет.
func _process(_delta):
if Global.winners_name != "":
ySort.get_node(Global.winners_name).connect("winner", self, "_on_winner_defined")
func _on_winner_defined(_name):
Global.winners_name = ""
ySort.get_node(Global.winners_name).disconnect("winner", self, "_on_winner_defined")
get_tree().change_scene(first_scene)
E 0:00:03.166 emit_signal: Error calling method from signal 'no_bodies': 'Node2D(Arena.gd)::_on_no_bodies': Method not found..
<Исходный код C++>core/object.cpp:1260 @ emit_signal()
<Трассировка стека>BodyDetector.gd:12 @ _process()
E 0:00:08.596 get_node: Node not found: .
<Ошибка C++> Condition "!node" is true. Returned: __null
<Исходный код C++>scene/main/node.cpp:1381 @ get_node()
<Трассировка стека>Arena.gd:42 @ _on_winner_defined()
Hero.gd:54 @ _physics_process()
У тебя ошибка в disconnect.
Потому что ты сначала обнуляешь имя.
Потом по пустому имени ищешь ноду, а это всегда вернет null
Потом у null вызыаешь disconnect.
Переставь первые две сточки в on winner defined
Йоооооу.
> Как законнектить сигнал к узлу, которого пока нет?
> У меня две сцены: типа лобби и арена.
Коннекти сигналы в динамическом узле.
Допустим узел арена динамически создаётся. Вот в нём и коннектись. При создании арены все сигналы законнектятся, при уничтожении расконнектятся.
И не нужны будут вот эти пляски с бубном.
А ещё можно вот так.
> var registrator = ySort # Vasche!
> var sender = registrator.get_node(Global.winners_name)
> var receiver = registrator.get_node(Global.utils)
> if sender and receiver: receiver.connect("winner", receiver, "_on_winner_defined", [sender])
Ну що? Порвало шаблон?
Сендер в скобачках ещё и прилетит в колбэк аргументом (по ссылке, разумеется), благодаря чему, если сендеров несколько, ресивер, выполняя колбэк будет иметь доступ к конкретному сендеру.
Почему бы не сделать сцену-родителя, которая будет держать лобби и арену, управлять их переходами и хранить общие для них данные (то же имя победителя)?
Да ну, эт придется диз-док писать, проектировать приложение, блок-схемы там всякие рисовать, что откуда выходит и куда заходит. Нет времени! Надо игоры делать!
1280x720, 0:22
В материале в флагах выставил tranparent и установил альфу в альбедо.
Бро, моё мнение таково: надо делать игру, а не кинцо. У тебя заморочки уровня "почему кинцо не фотореалистичное?". Без обид, бро, но у тебя там геймплей будет вообще? Или игроку будет предложено на полупрозрачные стёкла смотреть ходить?
Ждём, когда Хуан рейтрейсинг завезёт.
Блять, я про прозрачность спросил и как сделать так, чтобы она не выдавала 20 кадров на 1060, а не про реализацию интересного геймплея в годоте.
Как же вы заебали со своей необходимостью делать только аркадную 2д парашу на этом движке. Дайте поэксперементировать с графикой и поклепать демо-сцены.
Без обид, бро, сорвался.
У Годо могут быть беды с прозрачностью. Или это бага. Если норм владеешь английским, попробуй зарепортить на гитхабе, приложив зипку проекта.
Пикрил отсюда: https://docs.godotengine.org/en/stable/tutorials/optimization/optimizing_3d_performance.html
Еще вариант - попробуй использовать alpha scissors.
Вдогонку: я предполагаю, что стекла у тебя сделаны отдельными объектами. Если же это часть меша - не помешает проверть в первую очередь, будет ли фреймрейт дропаться так же сильно, если сделаешь стекла как тупо плоскости + отдельный материал(ы) с собственными текстурами.
Сап, годаны. Хочу попробовать годот. Вчера скачал билд под винду, скачал Third-Person Shooter Demo, запустил. Оно начало кушать 90% видюхи (2060), это из-за отсутствия всинка? И начало лагать при запуске прожектайлов. Это проблемы с графоном или питону настолько тяжело аллоцировать объекты? Или это просто кривая демка? Подскажите, а то как-то мотивации поубавилось к изучению.
Я прошу прощения, не срача ради. Просто уже кучу всего перепробовал, немного подустал от монструозности старших братьев, а писать всё с нуля на каком-нибудь Haxe, конечно, интересно, но очень долго.
Я тебя не виню, тут просто один до ужаса предсказуемый шизик на этом треде паразитирует, вот я и вангую.
Зависит от прямоты рук. Убить фреймрейт ты на любом движке можешь, расценивай >>39750 (Del) как иронию.
>>39727 (Del)
>ноль в программировании
Тогда будет трудно, как и везде. Без кода ты игру - полноценную игру - не напишешь. Синтаксис у gdscript несложный доки написаны хорошо понятно (на английском, по крайней мере, вроде на русский переведены, но я не чииал) -- освоение языка и особенностей движка не должно составить таких уж больших проблем.
А вообще, не верь на слово и посмотри сам где лично тебе работать приятнее: попробуй создать схожие проекты-прототипы на всех трех движках и сделай выводы самостоятельно. Если потом вернешься и рассксжешь что как - плюс тебе в карму.
Спасибо за комментарий! Вчера ночью решил идти от самого легкого, и посмотреть кто создавал уже похожие проекты на этом движке. Может плохо искал, но найти аналог того что я ищу, так и не смог. Кроме первого пика в 2d
По задумке мне нужно 3d поле, на котором будут анимированные 2d персонажи.
Странно что мои 2 поста на которых ты ответил удалили, хотя я не пытался развести срач, а просто задать интересующий меня вопрос.
>По задумке мне нужно 3d поле, на котором будут анимированные 2d персонажи.
Почему не отредерить 3д поле в 2д картинку и просто подставить раз персонажи 2д уже?
Можно и так. Моё решение руководствовалось работой спрайтов из дума, и мыслями как можно сделать в игре тени мячика, персонажей, и тд.
Но имеет ли это смысл, если в игре статичная камера? Мне кажется я тут обосрался.
>>739727
Аркадный теннис без программирования я б сделал так - нарисовал пару 2d path кривых, одна для вертикального профиля полета и 1 для закрутки мяча. И затюнить для разных видов ударов. Сила удара будет влиять на масштаб кривых. Минимум кодинга понадобится для проверки столкновений и переноса точки откуда начинается кривая.
Для мультяшных игроков проще взять 3д модельки и кинуть им toon shader
>нарисовал пару 2d path кривых, одна для вертикального профиля полета и 1 для закрутки мяча. И затюнить для разных видов ударов. Сила удара будет влиять на масштаб кривых.
Ничего не понял. Но идея интересная.
>проще взять 3д модельки
Но не проще сделать. С 3d я не особо, а 2d спрайты осилю.
Ооо, спасибо за наглядность. Завтра попытаюсь повторить.
Почему не отображаются коллижн шейпы у тайлмапы? Работают при этом корректно. У всех остальных объектов отображаются.
Хотя не, двигаются не только спрайты, а вообще все объекты. И не зависимо с тем, с чем я сталкиваюсь. Пиздец
Может быть ты забыл сделать форму коллайдера уникальной и отредактировав скажем игроку отредактировал всем у кого стоит она же
Не, там двигаются даже те объекты, к оторых нет формы. Пробовал играться с формами самого игрока. Выяснил, что сдвиг более виден, когда форма более округлая. Пытался загуглить, но нашел лишь отдаленно похожие проблемы
Ничего не понятно из твоего описания. Камера у тебя двигается что ли? Запиши видео или выложи проект.
Шрифт или тема, назначенная любому контролу, распространяется и на все дерево контролов под ним. На пике шрифт ноды control будет распространяться и на label
1280x720, 0:18
Обратите внимание, как дергаются вещи. Уточню, я не просто зажимаю кнопку движения, а часто ее жму, чтобы было более видно подергивание. Если просто зажать, то это произойдет два раза - при столкновении и когда я отпущу кнопку движения
Не уверен что это работает когда заменяешь шрифт в рантайме, с помощью функции add_font_override(). У меня по крайней мере не получилось, если что в _ready() засовывал.
А, все, разобрался. Нахуй рантайм, BitmapFont-объект можно в .tres сохранить с помощью ResourceSaver и потом просто как нормальный шрифт вставить в редакторе.
1920x1080, 0:12
Я не 100% уверен, но возможно это из за того, что у тебя объекты стоят не в целых пиксельных координатах.
Вот например на этом видео стенки слева стоят по snap, т.е. 100, 200, 300, а справа стоят как попало, 599.056, 398.112, и при движении камеры левые двигаются в ногу, а правые не в ногу.
Если это оно, то надо или расставить объекты с включенным snap в редакторе, или погуглить как делается сабпиксельная камера, чет там через вьюпорты и скейлинг (2д мало занимаюсь так что не помню, но где то читал)
Супер простым. Это пока просто болванка, чтобы тестить.
Алсо, у меня почему-то не все объекты встают в пиксельную сетку... Начал гуглить, нашел похожие случаи, но пока не пофиксил. Проблема судя по всему распространенная ну и говно как
же у меня горит
Так, позицию удалось настроить с помощью smart snap, но проблема с "jittering"-ом не решена
Когда его щупал последний раз, он сильно глючил и сыпал ошибками. Могу завтра глянуть что там как
Окей
> Мне нужно будет кроме игры в теннис создать vn вставки, для чего я установил аддон Rakugo VN
Там ещё в прошлом треде презентовали аддон Dialogic который весьма полноценно реализует диалоги в ВН-стиле (иконка персонажа с вариантами эмоций, текстовое поле с кнопкой скипа, отдельные кнопки вариантов при вопросе, эффекты, стили, шрифты, всё фкаропке), без всего остального ВН-функционала (типа кучи ренпаевских кнопок внизу, сохранений, загрузок, отматываний-проматываний). Если твои "VN вставки" - это по факту диалоги, то может быть лучше его задействовать?
>Dialogic
Посмотрел, с первого взгляда выглядит как хорошая альтернатива.
>Если твои "VN вставки" - это по факту диалоги, то может быть лучше его задействовать?
По сути нет. VN-сцены будут лакомкой, а теннис как мини-игра.
Никогда не имел дело с фронтендом, но если это хоть немного похоже на программирование UI здесь, то теперь мне понятно почему фронт все ненавидят.
Контейнеры делают 60% работы. VboxContainer, HBoxContainer, MarginContainer, CenterContainer, GridContainer, ScrollContainer твои друзья
https://youtube.com/watch?v=YL8apqN6IJM
https://youtube.com/watch?v=lwTPlnW1qhA
У меня крошилась 3.0.9. Решения так и не нашёл. Как 3.1. вышла этот кошмар закончился.
Программирование UI здесь - это смесь Delphi и веб-вёрстки (от веба тут отступы (margin)
Да дело даже не в том как их раставить, а в том что потом логику к ним писать - полный пиздец.
> логику к ним писать - полный пиздец
В смысле? В чём конкретно пиздец? У меня проблем не вызывает. Просто вызываешь обработчики событий (сигналов) как везде.
Кстати, наверно у меня не возникает проблем опять же из-за опыта кодинга оконных приложений (фронтенда по современному). Сразу могу дать совет, который работал ещё в нулевых с различными IDE: Обработчик сигнала не должен содержать в себе сложного длинного кода. Обработчик сигнала должен вызывать метод из игровой логики.
Простой пример. Есть пункт "сохранить" в меню, а есть клавиша F5 на клавиатуре. У пункта меню (кнопки) обработчик сигнала "нажато", у кнопки F5 привязано действие в меню действий. Которое обрабатывается колбэком _input, в обоих случаях тебе нужно сослаться на один общий метод сохранения игры (Например, save_game в каком-нибудь Global). Не будешь же ты два раза копипастить логику сохранений?
И вот в обработчике кнопки ты пишешь
> func on_save_game_pressed(): Global.save_game()
а в кейсе F5, в инпуте, ты пишешь
> func _input(e):
> if Input.is_action_pressed("quick_save"): Global.save_game("quick.save")
Ну а в самом методе save_game параметр по умолчанию пустая строка, и если вызвать без параметров, он вызывает меню ручного сохранения, если же указать параметр, то сразу без вызова меню сохранит с указанным именем файл.
То есть, как видишь, обработчик сигнала элемента интерфейса записан в одну строку, ты пишешь его один раз и больше туда не лезешь. Если вдруг у тебя возник соблазн добавить вторую строку - значит ты ду ит вронг. Поразмысли над архитектурой проекта ещё раз. Добавь аргумент в вызываемый метод из игровой логики.
Обобщай, делай свои контролы.
Например если у тебя однотипные кнопки, например хотбар абилок или инвентарь, нет нужды писать обработчик доя каждой кнопки, можно передавать номер кнопки параметром в сигнал button.connect("pressed", self, "on_pressed", [btn_name])
Многоуровневые меню и навигация по экранам кстати неплохо описываются конечным автоматом (fsm)
У меня не то чтобы есть проблемы его сделать. Просто его надо дико заранее планировать перед реализацией и все должно иметь очень-очень четкую структуру иначе баги полезут изо всех щелей, приходится 10 раз все перепроверять.
Ну и тут еще перфекционизм не помогает, все эти обновления интерфейса хочется максимально оптимизировать, потому что они происходят при малейшем движении, но тогда код становится менее читаемым.
За лайфхак с общими методами спасибо, хоть я и так уже это делаю.
ТЗ есть? Какой бюджет?
Понятно. Старею, с копипастой общаться начал
Бывает. Не переживай старик!
охренеть
gdscript поначалу (после решетки) непривычен, но довольно удобен, да и заточен под движок; плюс все примеры и большинство вопросов-ответов гуглится на нем. Решетку прикрутили не так давно, поэтому думать и адаптироваться придется больше. Я бы посоветовал для всякой мелочевки (нажатия кнопок, обработка ввода, триггеры на сцене) использовать gdscript, а если потребуется класс с большой и сложной логикой - взять решетку.
>>41226
С# - это не си, ало.
720x720, 0:31
> не нашел тогда, почему
Коллиженшейпы какие были?
> делал еще на версии 2.1.4.
На трёшке видимо пришлось бы много переделывать.
Видимо в тот момент у тебя задумка была насчёт второго квадрата.
У меня чёт не прикручивается лидерборд, гугл выдаёт 6 ссылок по теме, да и те копии 2,5 тредов на гитхабе.
Так. Ты при импорте модели получаешь ту же структуру, как в блендере. То есть, если у тебя модель домика деревянного с отдельно замоделированными и заанимированными курьими ножками, то у тебя и в годоте будет импортирована сцена с отдельными мешами домика, ножек, крыши, окон. И анимации блендера сконвертируются в анимационный плеер годота.
>>41396
Сорян, не подскажу по данному вопросу.
Если поддерживает нужный opengl то да, у меня вот не завелся на древнем ноуте, хотя древний unity заводится
Ад был когда я решил писать свой UI с нуля, как сделал и все заработало, выгорел нахуй.
Если что, просто забыл дописать в _process строчку
Steam.run_callbacks()
Тогда Steam.uploadLeaderboardScore зафурычил
А швы между мелкими как зашивать? А редактировать все это как?
>>переносишь редактированные пиксели из правого края левой карты высот в левый край правой
Будут слишком резкие перепады высот. К примеру если на левом чанке крайняя вершина на 100 высоте, а на правом так получилось на глазок что крайняя вершина на 40 высоте - то их никак нормально не состыковать... Ну можно сгладить - искажая при этом половину чанка из-за чего все тоже попортится. Пикча.
Тут даже дело не в том как состыковать - я надеялся что есть что-то нормальное чтобы вообще таких проблем не было (как в других движках) - оказалось что нет
И в блендере нельзя нормально оценить как на этом ландшафте будет стоять декор. А ведь ландшафт подстраивается под декор - тут ямка, тут площадка под дом, там насыпь, там дорога, там русло реки и т.д.
Или всю локацию вообще в блендере собирать?
> как сделать гиганский ландшафт в несколько км?
Путём фултаймовой работы команды 20-50 профессионалов. Самый короткий гайд, но это правда. Пройди через все стадии принятия неизбежного и прими это: опенворлд в соло (да на чистом, быстро перегорающем энтузиазме) не запилишь. Ты давай смотри на вещи реально. В соло ты можешь сделать несколько камерных сцен и телепортировать персонажа игрока между ними по мере продвижения сюжета. Сюжета. Хоспаде, пишу об играх, как о кинце. Геймплей не забудь тоже. Игра должна играться. Ходить по пустому опенворлду - это не игра. А в соло у тебя будет пустой опенворлд. Прими. Это. Ах да, чанки, чанки будут у тебя быстро и технично грузиться. Пустые чанки пустого террейна.
Мои слова три года назад. А с тех пор уже 6 полгодиков утекло.
Про процедурные генераторы кто-то сказал (а я запомнил): "хоть карта и бесконечна, строящий ее алгоритм вполне себе конечный, а потому легко распознается человеком через небольшое время". Глянь тот же майнкрафт: если ты видел биом равнин один раз -- ты, считай, видел все его вариации; от того, что генератор выдаст тебе десять-сто-тысячу этих "различных" равнин, интереснее игра не станет.
Очевидно, помимо генератора местности еще понадобятся ассеты -- модельки, текстуры, шаблонные структуры для генератора (см. постройки в майне), готовые неписи, шаблоны скриптов/событий на локациях и прочее, прочее, прочее. А это огромные времязатраты, если делать качественно.
Ну. Если посмотреть на всякие фракталы, то иногда простые правила могут давать довольно сложные результаты. Тот же набор мандельброта. Если настроить процедурность для ассетов и отсеять все неинтересное нейросеточками, то можно чет и сделать имхо.
>Путём фултаймовой работы команды 20-50 профессионалов.
Террейн в 1км можно в одиночку сделать и многие делают.
Я раньше думал что в годоте есть хоть какие-то инструменты для террейна. Оказалось что ничего нет. Даже для простой минимальной локации
>>42018
>ними по мере продвижения сюжета. Сюжета
Есть много разных жанров. Не будь ограничен. Есть игры, в которых нет никакого сюжета. Даже есть игры с минимальным геймплеем. Есть игры просто на исследование местности.
>Путём фултаймовой работы команды 20-50 профессионало
Вон The First Tree делал один разработчик
>>Созданием игры занимался Дэвид Вейл, будучи не имея какого либо опыта программирования и разработки видео-игр
Так и весь вопрос - как сделать такой же ландшафт как там. Ведь его там делала не команда в 50 профи. А всео лишь один человек.
>процедурность для ассетов
>>42062 (Del)
>Генерируй
Чтобы генерировать - нужно написать, проверить и исправить код. Процедурность ассетов - это не модельки из воздуха, а результат работы. Возможно, даже большей работы, чем создание тех же условных моделек в блендере. Да, легко можно написать генератор, который будет выдавать 10^n уникальных однообразных моделек, а толку? Ты потратишь меньше времени на создание пяти (десяти) в редакторе, а результат будет тот же.
Я не говорю, что процедурность - херня, вовсе нет. Однако создание хорошего пула карт на рандоме -- это очень дорогая в плане времени/усилий штука
>>42078
>Террейн в 1км можно в одиночку сделать и многие делают.
Террейн - да. А локацию? Непустой уровень, на котором есть чем заняться десять-пятнадцать часов?
>инструменты для террейна
Что ты имеешь в виду? Какие инструменты тебе нужны?
>Есть много разных жанров. Не будь ограничен
Я походу ограниченный человек. Я предпочитаю игры, которые предлагают игроку какие-то занятия, дают возможность интересно провести время. Да, захватывающий сюжет необязателен. Да, геймплей может быть минимален. Но игру на исследование однообразной рандомной местности без сюжета и геймплея я бы дропнул менее чем за час, потому что удовольствия никакого.
Правильнее было бы или ставить общий вопрос "как мне разнообразить геймплей [вот такого прототипа моей игры] рандомом?", или частный "какие есть способы генерации/отрисовки под нужды [моей игры с такими-то условиями]?", и рассматривать террейн и рандом как средство достижения каких-л. целей или как возможное решение конуретных проблем при разработке.
*генерации/отрисовки террейна, разумеется
>Оригинальный
Оригинальный вопрос был - как вообще сделать ландшафт в годоте, без лишней кодовозни с максимумом визуальной работы (то есть без вот этих вот сшиваний чанков кодом).
>>42093
>Что ты имеешь в виду? Какие инструменты тебе нужны?
Инструменты которые позволяют визуально редактировать весь ландшафт, чтобы я сразу видел результат с учетом не только ландшафта, травы, деревьев, но и со всем декором.
Вариант делать ландшафт где-то в другом месте (блендер, вурдмашина и т.д.), и резать на карты высот - фигня, потому что я не могу там учесть окружающий декор
....
Короче, я думал что в годоте есть такие же инструменты визуального редактирования ландшафта как во всех остальных движках. Но нет.
Чел, мне просто нужен был редактор ландшафта. Мне насрать как оно там называется, но этого нет.
Поэтому вывод один - для моей игры годот не подошел, поэтому я уже взял другой движок, где все это есть
> The First Tree
У. А я гадал, какое из копипастных безыдейных говен вбросят на вентилятор. Вбросили это. Ясно.
> как сделать такой же ландшафт как там
В первом попавшемся генераторе ландшафтов из гугла.
Покормил.
Он научился ходить, и не перелезать за сетку. Держу в курсе.
Подскажите, как переназначить передвижение на WASD?
>Интереса ради, не холивара для -- какой движок?
чтобы не агридь мода - такие инструменты есть минимум в ue/unity/unigine. Странно что в годоте их нет
На самом деле в самом редакторе годота вообще нет никакого редактора ландшафта и даже такого понятия - я использовал модуль Height Terrain от стороннего разработчика, но:
- автор им больше не занимается (последние апдейты в январе) и он сам говорил.
- модуль недоделан, нет например вот этой работы с чанками - то есть например возможности рисовать на стыке двух чанков. В других движках рисовать можно сразу на всех чанках. Тут же предлагается каждый чанк рисовать отдельно, а потом руками пытаться зарисовать все дыры на стыке
>>42217
>В первом попавшемся генераторе ландшафтов из гугла.
Только в годоте нет ничего чтобы этот ландшафт показать. Надо самому велосипедить.
Благодарю, теперь управлять персонажем куда приятнее.
Хотел с утра добавить ему рывок, для разнообразия передвижения, нашёл гайд, но пока для меня это очень трудная задача. Ничего не понял что пацан показал в видио, и по этому сегодня постараюсь сделать черновое меню. Если хватит сил, разберусь как добавить в начало vn сцену, сменяясь после на сам геймплей.
Ох ебать! Я кончил.
долго...
spring+websoket для игры на godote
те есть ли там место прописать код для сокетов и прицепить объекты
Нужны сокеты(когда 2 приложения слушают друг друга,а не вебсокет(который завязан на жс))
это для уточнения
Небольшой совет по коду. Помимо is_action_pressed есть get_action_strength, возвращающая значение от 0 до 1, где 0 не нажато, 1 нажато. Таким образом, ты можешь всего двумя строчками получить свой инпут:
> dir.x = ( get_action_strength(right) - get_action_strength(left) ) 3
> dir.z = ( get_action_strength(down) - get_action_strength(up) ) 3
Обрати внимание, минус где надо появится автоматически.
> * 3
Абу, заебал, удоли вакабамарк! Ублять! Там значок умножения. Или введи тег кода. Хватит уже мучать анонов!
Благодарю за совет, но из меня так себе так что абсолютно весь код для меня как дремучий лес. Двач ещё знаки умножения сожрал, из за чего я даже понять не могу как эти две строчки моими заменить. Но меня такое управление устраивает, хотя бы как-то дает представление что за что отвечает. Почти целый день делал меню, так и не смог осилить эти гребенные контейнеры. На бумаге нарисовать задумку легко, а вот понять логику программы уже трудно. Ну ладно, оставлю это на завтра, а пока часик помучаюсь с рывком для персонажа.
Спасибо!
> так и не смог осилить эти гребенные контейнеры
Да чего там осиливать-то?
<- Как-то так как на пикче.
> Двач ещё знаки умножения сожрал, из за чего я даже понять не могу как эти две строчки моими заменить.
Вот так:
> dir.x = ( get_action_strength(right) - get_action_strength(left) ) ж 3
> dir.z = ( get_action_strength(down) - get_action_strength(up) ) ж 3
ytn
А вот в 3.3 как раз не игрался, кстати! Надо поковыряться с ним
> Нужно ли делать пул для audio 3d нод?
Не нужно, звук пуллируется аудиосервером на уровне аудиошин (bus). Просто размещай аудиоплеер чайлдом в ассете и управляй им из инстансов. Например, сам ассет врага пусть решает, воспроизводить ему звук или нет. В тридэ там ЕМНИП даже настройка дальности искаропки есть.
> Может кто проверял и знает
Я проверял. Основные проблемы там, когда ты на фоне играющего ogg запускаешь много сэмплов wav начинается кряхтение в колонках. Я пытался забороть, но хуй забил на игору вообще, поэтому решения не знаю. И кстати, это кряхтение ещё на версии 3.0.6 было, так что может и оптимизировали уже.
Эмм... Щас короче ты аргументированно возражаешь, почему это я дебил, иначе я пишу репорт господину модератору.
> Ирл никакого АО не существует
Да ты штоо???
>>42609
Ты автор? Покажи с другого ракурса, что это источник света, а не блик. А если не автор, так не пизди. Я там вижу только блик с засветкой (мы же о поверхности над заложенной дверью говорим, да?) а у отраженного света тоже полутень будет. Везде будет.
Глаза разуй, там есть тени на первой и затенение на второй, в довесок к теням. Вот это затенение в узких местах и углах - и есть АО. Отражает распространение света в реальном мире.
что можно поиграть в игру
Открыл только в обратном порядке ну и из анриала и не захотелось выходить впринцапе, хотя и юнити неплох, а годот мне повесил компьютер намертво когда запустил тест игры хотя комп не зависал уже лет 5.
Юнити какой-то всратый, а годот ок норм.
анрил мне вообще не понравился
у юнети чувствуется, что они тупо больше, как компания и продукт стабильный
годот я помню запускал вроде вторую версию и у меня были проблемы с установкой, импортом примеров и т.д. работала только стим версия и то через раз
> работала только стим версия и то через раз
Сейчас уже 3.3 версия вышла, очень стабильная и лично мне нравится.
>>42559
>Да чего там осиливать-то?
Сама логика мне не очень понятна. В школе кое-как меня научили кодить на html. На ремпае было легко брать кусочки кода, и тупо вставлять в свой проект. А где нужно побольше знаний тут же ступор, и не понимания что от меня хотят. За скрин ниже мне уже пиздец стыдно.
Если до конца месяца не смогу хотя бы половину задуманного в движке сделать, забью на программирование, и пойду дальше.
>>42562
Да.
Нет, и что? Может когда-то пригодится, может нет. Факт что возможность есть
Нативный OpenGL.
>Это странно.
Нет, странно не пользоваться чем-то только потому что там нет функций, которыми ты не пользуешься и не будешь никогда пользоваться. Вот это действительно странно.
гк в основном
Благодарю, теперь работает!
>>42662
Ахах, нет. Я отрисую сцены и соберу онли вн через ремпай.
>в ГК надо чтобы тысячи кубов бессмысленно разлетались по физике
годо не тянет, хочешь сказать?
чел, в гк если и есть "тысячи объектов", то они супер-простые и их явно не тысячи, а максимум сотни и они все супер-простые и если годотя не тянет сотню простых объектов с физоном, то ШТОШ МДАУШ
У юнити очень сложный неинтуитивный интерфейс. Сраная студия вешает мне комп. Запуск отладки очень долгий. Очень много весит.
да, наверное так. точнее сказать сейчас не могу, ибо винда неделю назад переустановилась и MSVC в данный момент отсутствует
с танцами и бубном?
Пойду сюда что ль побомблю. Ёбаный ты нахуй, какого ж хуя до сих пор нельзя НОРМАЛЬНО сделать интеграцию с гуглоплеем. Ёбаный же стыд PGSGP уже давно мёртв, разработчикам плагина на него похуй и на 3.3 обновы не видать (кроме костыля, который, сука, без пердолинга, один хуй не работает). Надеюсь, блять, в ёбаной четвёртой версии вся хуйня будет работать нормально
Я кроме петухона нихуя не знаю, потому и выбрал годо вместо изучения шарпов (ведь я тупой)
Я предполагаю, что годо на пикрил справа скомпилен на дебаге, а слева - на релизе, откуда и разница в объеме файлов
слева официальный бинарник, да. а справа конпеляция, только уже хз, как оно было собрано) но скорее всего в дебаге, да
Да хули там, понятное дело, что опенсорс, я вот только и могу по этой причине беспомощно бугуртеть
Ну, я тем не менее пропозал запилил. У кого тоже болит - можете пойти залайкать это говно
щитхаб.ком/godotengine/godot-proposals/issues/2724
>func _ready():
>>var hbox = $Control/CenterContainer/HBoxContainer
>>var r = 3
>>for _i in range(r):
>>>var f = fighter.instance()
>>>f.set_custom_minimum_size(Vector2(77, 87))
>>>hbox.add_child(f)
>>hbox.set_margin(MARGIN_BOTTOM, 0)
>>hbox.set_margin(MARGIN_LEFT, 0)
>>hbox.set_margin(MARGIN_RIGHT, 0)
>>hbox.set_margin(MARGIN_TOP, 0)
Он удобный.
> его через FindNode не находят
Безумие.
Если у тебя автолоад синглтон, тебе не нужно никакое финдноде. У тебя твоё имя сразу регистрируется в редакторе глобально. И ты просто пишешь
> MightyAutoLoad.MightyMethod()
>Снимай с паузы кнопку
Не знаю, поменял в pause_mod на process, stop, все равно кнопка не нажимается не знаю.
>hbox.update()
Не, че-то не помогает. Ну буду через процесс что уж.
Спасибо. Я нашёл что искал.
Прошу сразу простить мою наглость, но вы сможете перевести это на С#?
Мне не понятно откуда он взял строка 35/36 project_ray_origin()....
и строка 10/11 gett_world().direct_space_satate/space_state.intersect_ray
Хочу сделать симулятор с реалистичной ходьбой.
Нее... Я ещё минимум до июля буду занят. Ваще не до джемов.
мимо автор игор, постов, охуительных историй, беспонтовых начинаний
Есть сигнал для KinematicBody, срабатывающий по mouse_entered(). Есть 11 мешей (скопированных из одного, в котором как раз дочерний KinematicBody и CollisionShape). По нажатию кнопки я получаю стену срабатываний (предположительно, по количеству мешей), хотя жму один раз всего над мешем с установленным аутлайном, если это пикрил _input(event). При этом func _on_KinematicBody_mouse_entered(): показывается, что срабатывает всего один раз.
Ага, сейчас подготовимся, а они через сутки выкатят тему "LGBTQ+ representation BLM ACAB".
Или игра, где ты Абрам Ганнибал и пиздишь жену.
ээээ_прессед по-моему не один раз срабатывает, а пока не отпустишь. is_just_pressed один раз срабатывает.
а _mouse_entered() срабатывает, когда в область курсор наводишь, без нажатия кнопки
> почему так происходит?
Потому что по умолчанию все элементы_канвы прозрачны для событий мыши/тача. То есть, получив событие, они не препятствуют получению его же остальным слоям канвы.
> как разделить сигнал
Есть два стула:
1. Сделать canvas_item "непрозрачным", там есть свойство в инспекторе ищи, accept_event().
2. Обрабатывать события в _unhandled_input и первый кто обработал устанавливает флаг SceneTree.set_input_as_handled(), тобой, в коде, вручную, при соблюдении твоих условий, и если он посылает, то _unhandled_input больше не вызывается для этого события нигде
Дошёл до генерации игрового поля на старте уровня.
https://docs.godotengine.org/en/stable/getting_started/step_by_step/instancing.html
Если я инстанцирую повторяющиеся меши, это же снизит нагрузку и увеличит скорость работы сцены?
Дополнительный вопрос. Скрипты же и сигналы тоже в инстанцирование попадают нормально?
Дополнительный вопрос. Видел неоднократно, когда на даже небольшую ноду создают отдельную сцену. В чём смысл?
Другой вопрос. А генерация. Это что, для тайловой карты 10 на 10 надо цикл в сотню, что ли, загонять? Или у движка есть какие-то инструменты для такого?
Ну я имею в виду, что для заполнения гексагонального поля 10 на 10 клеток, мне надо будет сделать цикл х от 1 до 10 с вложенным в него циклом у от 1 до 10. Либо считать, исходя из квадрата числа (карта квадратная-то). Двойные-тройные и т.д. циклы это же плохо и медленно в общем случае? Есть ли инструмент оптимизации этого процесса? Иначе придётся ждать инстанцирование 6400 раз для того же поля 80 на 80 (у меня это занимает уже секунд 5 против моментального запуска карты 20 на 20), что уже не выглядит так просто как 10 на 10.
Начинай учить многопоточность. В один поток ты такое не затащишь. Вообще, сам подумай, кто в 2к21 будет делать игру без многопоточности?
Хотел тебе гридмап посоветовать (увидел, что ты гексы в тридэ делаешь), но оказалось, что у гридмапа гексагональной сетки нет, в отличие от двадэшного тайлмапа. Даже не знаю, что теперь и предложить. Получается, что ты правильно велосипедишь велосипед.
>>44526
Вот например вариант. Если у тебя не предполагается карта высот, но хочется красиво наклонять камеру вокруг мапы, то можно сделать отрисованную через вьюпорттекстуру на тридэспрайте двадэшную тайлмапу.
Но скорость её заполнения всё равно смотреть надо, и я уверен, в один поток всё равно будет медленно, поэтому >>44527
Ну в общем и целом для пошаговой игры я в этом вижу, скорее,
плюс. Не надо усложнять логикой управления многопоточности.
Просто вот такие телодвижения, когда у меня простые модель шестиугольника, сваянные на коленке в блендере, а оно на пекарне конца 20 г.в. грузит по 5 секунд, вызывают подозрения, что когда это будет заполненная карта, то это уже будет ощутимо. Хотя, может, занимаюсь преждевременной оптимизацией. Хз. Пока пилю как есть, хотя бы до уровня mvp. А то так вообще никогда ничего не закончить.
>>44528
>что у гридмапа гексагональной сетки нет, в отличие от двадэшного тайлмапа
Я в гридмап почти неделю проебался, чтобы понят, что он даже с велосипедами не подходит. Точнее можно, но велосипед становится ещё сложнее.
>можно сделать отрисованную через вьюпорттекстуру на тридэспрайте двадэшную тайлмапу.
Я этот же совет видел на форуме годота раза два.
Но что-то мне показалось сложнее, чем в чистом 3д, когда дошёл до взаимодействия с тайлами. Уж и не помню, что в итоге мне не понравилось. С получением координат, что ли, была беда какая-то.
В итоге, https://www.redblobgames.com/grids/hexagons/ + 3д взял за основу.
>>44533
Тогда вот тебе ответ на твой вопрос. Если тебе нужно заполнить одним циклом некое двумерное поле, определи для поля фиксированную ширину (количество столбцов, C). И тогда:
X = i mod C (остаток от деления)
Y = i div C (деление нацело)
Лол, посмотрел сейчас твой скрин с кодом, а у тебя так и делается. Только каким-то переусложнённым черезжопным образом. Тебе нужно вдовесок к вышеуказанным вычислениям выбрать сдвиг наполовину для каждой, скажем, нечётной строки. И вуаля, готово. Но это по отрисовке. Для заполнения тебе сдвиги уже не нужны. У тебя есть одномерный массив со всеми тайлами и ты получаешь координаты каждого тайла через эти нехитрые вычисления икса и игрека.
Могу геометрический смысл наглядно нарисовать в пейнте, если не уловил.
хехе
Блин, увидел. Спасибо. Это да, большой факап, перекочевавший из первого кода без цикла.
> Только каким-то переусложнённым черезжопным образом.
Ровно таким же, если сократить те же i в выражении. Это колдовство осталось из криво созданных изначально моделей и подгонки на глаз, отчего вариант i mod mapSize выдавал не те координаты, что я ожидал.
Короче, пробежаться надо по коду завтра незамыленным глазом в поисках глупостей.
Утро вечера мудренее!
писюн))
У меня была охуенная идея игры - менеджер дачи, где нужно играть за бабку и заставлять всю семью как можно больше вкалывать в огороде за лето и как можно дольше не давать им превратить дачу в место отдыха.
Раз спиздил, так воплощай.
Не хуже Геншина.
Рост помидоров и огурцов.
а еще возможность вырастить овощи до чересчур больших размеров и количества. А еще красить домик в неприлично-яркие цвета и клеить много слоев обоев.
Надо перечитать. Совсем забыл уже. Только Вишнёвый сад и Бабы всё ещё поммню.
Йоооооооо
Кинь полную пасту.
>>45136
А вот объясните, когда надо взывать методы мешинстанса, а когда ноды? и что лучше использовать в общем случае? ноды?
> А можно ли как-то при инстанцировании задавать значение своего кастомного аргумента
В гдскрипте на данный момент нет приватных переменных, то есть, создавая инстанс, ты можешь получить доступ к любой его переменной. Итак. У нас есть bullet.tscn, в которой есть переменная speed = 0.
> var bullets = load("bullet.tscn")
> var current_bullet = bullets.instance()
Инстанс создался и у него выполнилась функция _init()
> current_bullet.speed = 1500
Нужная переменная в инстансе поменяла значение.
> world.add_child(current_bullet)
Вот теперь у инстанса выполнились _enter_tree, _ready и начали раз в кадр вызываться _process/.../
Ага, так и делал. И как я увидел, я делал для мешинстанса. И так, похоже, делать не надо.
> И так, похоже, делать не надо.
Мешинстанс причём тут?
Код показывай, чо ты там нахуевертил? Так надо делать и так делали 30 лет до годота и так будут делать 330 лет после годота. Это классика ООП.
Ну допустим, есть гипотетическая структура Node - MeshInstance - MeshInstance2.
Причём первый - родительский для второго, а второй показывается при том же клике мышью на первый. Вод здесь всю эту ситуацию логично обрабатывать методами, вызываемыми у родительского мешинстанса, или у ноды?
>extends Node2D
>var flag = false
>func _process(delta):
>>...
>>flag = !flag
В другом скрипте я пытаюсь вызвать сеттер, когда меняется флаг. В логе он меняется.
>extends Control
>var a = global.flag setget setter
>func setter():
>>print("Yay")
Почему сеттер не срабатывает? Он же меняется в извне и в другом классе.
Из мыслей - отдельная нода, где все переменные выгнаны типа
export(bool) bar unitSelected
Или можно как-то красивей?
Быстрофикс.
только через _процесс?
> как-то красивей?
В стиле годоскрипта.
GlobalData.set_my_parameter_as(new_value)
где
set_my_parameter_as - это функция, опционально чей-то сеттер.
> А как можно реагировать на изменение переменной в синглтоне?
Сигналы. Сигналы родимые. Они же события в ентерпрайз-кодинге. Изучи их. Пойми их. И пользуйся их силой.
В синглтоне:
> signal my_new_state(new_state)
...
> emit_signal("my_new_state", moya_peremennaya)
В левой ноде:
> Singleton.connect("my_new_state", self, "singleton_state_callback")
> func singleton_state_callback(new_state):
> > print("nakanetcta ya vizhu, chto v singletone peremennaya stala", new_state)
>Кошерно вообще не иметь глобальных переменных.
А как тогда работать со значениями, идущими от инстанцированных элементов? Напримример, в каждом инстанцированном объекте есть переменная. Для каждого инстанса там своё значением, но вот на глобальной сцене надо учитывать значение из последнего инстанса, с которым ты повзаимодействовал.
Тут либо каждый раз выяснять, с кем в последний раз взаимодействовал, после чего тянуть значение, либо в процессе взаимодействия положить значение из инстанцированного элемента в глобальную переменную, а после уже не вспоминать, с каким же инстансом ты взаимодействовал.
>global.connect
>Singleton.connect
Вот до этого я бы никогда не додумался без вас пацаны
Я ебанат и скачал движок в стиме. Теперь он обновляется сам-по-себе и без обновлений не хочет запускаться. Есть проверенный способ отвязать его от стима?
Чтобы получить весь путь от точки 1,1 до точки 5,5 через get_id_path, я должен соединить точки черезх connect_points, причём все 25 точек со всеми 24, кроме той, что соединяю?
>>45332
А чем не вариант забрать прокт, снести стимовскую версию, скачать на https://godotengine.org/download/windows и использовать его для своего проекта?
Да, я уже к этому пришёл, только что.
Потому что, в противном случае, получается телепортация из 42 в 48 для примера пикрил.
Короче, оставил им фича-реквест, позже накатал тикет в PGSGP и решил забить хуй на тот функционал что хотел. Выпустил так :с
https://lowbudgethomebrew.itch.io/go-froggit-godot
Первый опыт, разъебите меня
У тебя в игре нет полоски, показывающей насколько сильно будет прыгать (а в "Как играть" полоска есть). И да, шрифт размазанный какой-то.
1) Тяга к опенсоурсу.
2) Году в 12 игрался с юнити. но юнити начал обрастать и тяжелеть, что пиздец. Особенно стало, когда понадобилась студия - до того хорошо жил во встроенном иде с моно.
3) Есть приличное 3д
40 Не такой брошенный во времени, как огре3д и урхо3д.
Да, типичный автоматический ландшафтный материал. На ютубах полно примеров для UE.
Он всё-равно работает через очко
Промежуточный допрыг? Я думаю, речь идёт про бонус неуязвимости, который даётся на каждом новом старте. Надо бы описать их, да.
>>45464
>>45472 (Del)
Спасибо за фидбек, анонасы! Пофикшу в скором времени
Извиняй, но я уже все пофиксил и ломать обратно не хочется.
if settings[option] == 0:
pass
elif settings[option] == 1:
pass
elif settings[option] == 2:
pass
Да вот такая обычная конструкция, не знаю на что тут смотреть. В settings[option] валялся интегер от 0 до 2, что я перепроверил консолькой еще.
Но по какой-то причине тригерились не 0, 1, 2 ветки, а местный дефолт, то есть _: , причем это происходило не всегда. Не знаю уж баг это или нет, но после переписи - все стало нормально.
Вот на что стоит действительно написать issue, так это на AudioStreamPlayer2D. Мой .ogg стрим (не знаю проблема ли это только .ogg или .wav тоже) зацикливается, даже если в самом годоте галочку убрать с Loop у стрима. Приходится через код отрубать и это 100% баг, причем он и в прошлом релизе был.
Если годот по какой-то причине не решил их во флоат где-то сконвертить и потом округлить до целого числа при выводе в консольку - да. Но тогда бы и if нормально не работал, я так думаю.
Парни ну помогите, Я тот который переделывал гд-скрипт разворота 3д объекта на C#
Я почти допёр, как сделать управление, топдайн шутера в 3д, единственно мне не хватает малости, чтобы поворот модели следовала за курсором мыши, а так модель крутится волчком влево и вправо при движении мыши по Х и по У
А, блять. Не только у стрима есть параметр loop оказывается. У самого файла в меню импорта тоже есть параметр loop и он зачем-то по умолчанию включен, интересное открытие.
Я вот прям щас занимаюсь описанием бонусов, будут в апдейте :)
Только в окне выбора проекта тикает, к сожалению
>var new_value : int
>var value : int = new_value
>func _ready():
>>value = new_value
>>hide_arrow()
>>global.connect("flag_changed", self, "every_second")
>func every_second():
>>if value > new_value:
>>>arrow_down()
>>>num.set_text(str(abs(new_value - value)))
>>if value < new_value:
>>>arrow_up()
>>>print(new_value, " ", value)
>>>num.set_text(str(abs(new_value - value)))
>>if value == new_value:
>>>hide_arrow()
>>value = new_value
А еще я вот так пробовал, не помогло
>func _ready():
>>...
>>global.connect("flag_changed", self, "ass")
>func ass():
>>call_deferred("every_second")
>func every_second():
>>...
Ладно, я разобрался, ребята
Что я хочу собрать?
Змейки, тривряды, тетрисы, пятнашки, пакманы, взломы замков, механических, электронных, свои авторские пазлы, и многое-многое другое. Для заполнения ими игровых миров анона. Берёшь сцену из репа, встраиваешь в свою игору, юзая стандартизированный АПИ.
Как вам идея? Кто хотел бы поучаствовать?
АПИ должен включать в себя функции отображения мини-игры, скрытия, опционального запоминания состояния, позволяющие организовать включение и выключение виртуальных устройств с мини-играми в "макро"-игре, при скрытии осуществляется возврат значения (через сигнал), позволяющий организовать собственно взлом доступа куда-либо через мини-игру, или получения чего-либо, или продвижения по квесту.
Поздравляю, ты украл мою идею, где персонаж должен ходит по комнатам и решать рандомные случайно выпадающие миниигры. Сука, а я даже анимацию персонажу не могу настроить.
> пиши АПИ
Предлагаю продумать АПИ вместе, чтобы всем было удобно и чтобы обойти подводные камни, которые не увидишь в одиночку.
>>46418
Сорян. Зато ты теперь можешь не писать кучу миниигор, а подсоединить нашу (пока ещё не существующую) базу миниигор прамо в свой проект и сконцентрировать усилия на стиле.
duplicate(true), без deep=true все равно будут референсы, а не копии
Ну я тоже ориентируюсь на utility ai, но вот если конечная цель не так легко достижима и состоит, по сути, из набора более мелких целей, то всё равно придётся перебрать, какая же из целей лучше здесь и сейчас.
>for entry in data:
>>for i in data[entry]["relations"]:
>>>for entry1 in data:
>>>>if entry != entry1:
>>>>>for j in data[entry1]["relations"]:
>>>>>>if entry == data[entry1]["relations"].key() - вот тут не получается
>>46761 (Del)
У меня есть провинции.
>{
>"Province1" : {
>>"name":"Ass",
>>"pops" : "3500",
>>"relations" : {
>>>Province2:FRIENDLY,
>>>Province3:BAD
>>>}
>>},
>"Province2" : {
>...
Хочу, чтоб каждая сравнивала свое отношение к другой провинции и отношение другой к себе. Если у обиех плохое, то ВОЙНА.
ййооооо вау спасибо
Да
У меня возвращает какие то левые координаты относительно экрана. А мне надо относительно world2d.
Естественно камера сместилась в ворлд 2д.
Вот. Нода Effect должна начать спамить монетки, которые через слой канваса должны получить глобал позишн в мире лейбла score и полететь туда.
Перекачу ближе к вечеру.
Про оп-пикчу анона помню, поставлю. Предлагайте дополнения в шапку. Позже перечитаю и скомпоную.
Всем цемки! Обнял! Убегаю! На связи!
Вы видите копию треда, сохраненную 5 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.