Годнота от анона - Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Имя файлу можно задать любое. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории. Для запущенного таким образом проекта папка res:// становится доступна для записи (если это не ограничено правами доступа в системе). - В версии 3.2 появилась возможность прикреплять pck к бинарнику. Бриллиант для любителей однофайлового продукта! - Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot - Тест-бенчмарк: - - Веб-версия - https://govdot.herokuapp.com - - Вишмастер для винды - https://govdot.herokuapp.com/4Anon.rar
>>734420 (OP) И первый платиновый вопрос треда. Когда я добавляю объект в сцену, то он появляется в нулевой отметки xy. И, когда я пытаюсь его перетащить, то либо цепляю другие объекты, либо куски моего объекта, например только спрайт или только коллижншейп. Как мне удобно и нормально перетаскивать сразу весь объект не цепляя при этом другие вокруг?
Продолжаем платиновые вопросы. Сделал я animationPlayer, запихнул туда анимацию ходьбы в разные стороны, настроил скорость и прочие параметры. Запустил - отлично работает, скорость настроена. Затем сделал animationTree, там blendSpace2D, запихнул туда анимацию для удобства. А эта хуевина проигрывает скорость анимации по своим стандартным параметрам, не учитывая настройки скорости в animationPlayer. Как фиксить?
>>734457 Алсо, в инете тоже не вижу решения пиздец нахуй элементарная же вещь. Если решения нет, то как реализовать тогда в коде смену направлений от градусов?
Привет годаны, у меня опять вопрос. Скачал пример игры, написанной на С# скрипта в примере все работает отлично, но когда я пытаюсь повторить у меня получаются проблемы с нажатием клавишь, например не работает только нажатие клавиши или сигнал на опускание клавиши, пример - прыжок, нажимаю пробел и он работает через раз, нажемаю бежать и пробел и он срабатывает только через некоторое время. Та же беда с мышью, она вообще не работает, ни правый ни левый клик. Я назначал клавиши через внутренние методы Шарпа(принудительное нажатие клавишь и прямое нажатие указанных клавишь) и нет я не забыл назначить клавиши в своём редакторе, все указал, но они работают через раз. Я прочитал посты из предыдущего треда о подобной проблеме и нет с кодом все нормально он почти одинаковый немного переработанный, возможно опять, что в движке не нажал. Насчёт контролов я не совсем понял, что там перекрывает? И да я заметил в некоторых примерах управления персонажей задают годов скриптом, а процедурные вещи, например уровни или объекты пишут на шарпе.
>>734564 Он мне понятен и прятен. Я правда пытался освоить гд скрипт, но постоянный контроль отступов и пробелов вымораживают >>734570 Спасибо, попробую >>734571 Понял, но пока это не возможно. Пишу на работе, дома до конца месяца проблемы с инетом, только офлайн.
На самом деле даже того, что я уже достиг в этом движке значительно перекрывает все то что я делал раньше, надеюсь хотя бы эту игру довести до запланированного конца и вправду душевный двиг, надо было изначально на годот вкатываться столько времени потерял.
Появляется ошибка после срабатывания queue_free() Invalid get index 'position' (on base: 'Nil'). при попытке вычислить свою position на следующей итерации. Разве queue_free() не удаляет весь узел? Почему после queue_free() Годот пытается вызвать позицию удаленного узла?
Решил проблему с несрабатыванием прыжка, нужно было в редакторе поднять коллайдер коллизий у персонажа (если я правильно назвал) выше, у меня он был наполовину опущен в плоскость пола. Начала работать мышь, но по прежнему игрок или берет предмет, но не кидает его, или не берет предмет, но может пнуть его. Думаю проблема в состоянии персонажа, когда срабатывает булевое условие в руках или на земле плюс подозреваю что опять что то неправильно в редакторе настроил для персонажа.
>>734420 (OP) Так, ну AnimationTree меня нахуй послало с тонкой настройкой анимации. И тогда вопрос: Как мне сделать так, что бы в топ даун игре с четырьмя направлениями враг смотрел в сторону героя? У меня есть четыре анимации ходьбы в четыре стороны соответственно. Но передвижение свободное, то есть, спрайт врага должен меняться от угла по направлению гг
>>735480 алсо, пробовал (direction.global_position.x - global_position.x) > (direction.global_position.y - global_position.y), но персонажа чет ебобить начинает в разные стороны
>>735351 Решил проблему с броском и поднием предметов. Короче все дело в райкасте, у меня в сцене он был направлен в землю, а не в направлении взгляда модели, как и думал накосячил в редакторе, а не в коде. Кстати зря я на шарп гнал, он корректно работает. Сейчас планируют разобраться с поворотом модели, пока по клавишам и добавить анимации, в будущем планируют поворот модели с помощью мыши.
>>735881 Можно и на дуде звук жопой сыграть, только зачем если есть рот? По отдельности рот, жопа и дуда отлично справляются со своими задачами. Так же как годо и шарп, но вот совмещать - это специальная олимпиада.
>>735948 Ну я уже, в демку поиграл, запускалась минут 5, проект создался за несколько минут. В принципе ничего не лагает и всё работает. Вкатываюсь через вот этого челика https://www.youtube.com/watch?v=Mc13Z2gboEk , всё правильно делаю?
Привет, годаны! Как вы тут? С осени не заходил, так как игори не пилю нынче. Что нового? Трёшка всё продолжает вариться в RC, я смотрю. Кто-нибудь из треда зарелизил игру мечты?
Попробовал Godot. GScript медленный, поэтому пробовать его не стал. Попробовал godot-nim, он работает, но без лайв кодинга и документации и туториалов почти нет. gdnim не получилось запустить. Какие другие языки программирования попробовать, желательно с лайв кодингом? C/C++ знаю, но несколько страшно их из-за нестабильности использовать. Rust сложнее C/C++ во многих случаях и компилится часами. Java мне не очень нравится синтаксисом. C# зачем в Godot, eсли есть Unity!? Nim был бы киллер-фичей Godot по сравнению с Unity.
>>737052 Действительно, нахуй они шарп имплементировали, а не на никому неизвестном говне? Бля, да надо было Lisp или D хуячить, а может бреинфак? С такими киллер-фичами прям завтра в мейнстрим вырвемся.
>>737052 Не выёбывайся и изучи лайв кодинг на гдскрипте. Потом как постигнешь объектную модель движка, сможешь с лёгкостью хоть на ним, хоть на раст перекатиться. Как раз поддержку этого твоего ним к тому времени допилят.
>>737088 > Какой жанр игры? У меня есть большие сомнения насчёт реальности его игры. Ящитаю это позавчерашний залетух-движкосрачер от бана откис и теперь зашёл более тонко срач устраивать.
Всем годотерам привет. Вкатился в движок пару месяцев назад, пытаюсь сделать что-то простенькое, но есть вопрос по мультиплееру, я не понимаю как его реализовать. Попробовал через веб сокеты, серверную часть написал на python, и пытаюсь от Годо подключиться. Вроде через .connect_to_url() подключение проходит (появляется сообщение о подключении на сервере), но при этом данные не отправляются ни с сервера, ни из подключенного устройства.
>>737362 Кстати, когда пишу код клиента на том же python, то сервер с ним взаимодействует нормально. Может ли быть проблема в том, что клиент должен быть написан на том же языке, что и сервер?
>>737363 > Может ли быть проблема в том, что клиент должен быть написан на том же языке, что и сервер? Нет, не может. Клиент-серверная технология и создавалась для того чтобы не ограничивать клиент и сервер в выборе языков. Внимательнее разбирайся. Неплохо бы код твой глянуть.
>>734420 (OP) Мне нужно сделать действие, когда наступает определенный кадр анимации. Но код почему-то не срабатывает. Делаю через curren_animation_positionю. Что не так?
>>737845 Проще всего в саму анимацию запихнуть трек вызова метода. Но если хочешь именно кодом, то скорее всего переменная никогда не достигает значения ровно 0.6. Тогла тебе поможет апроксимация к коэффициенту точности: var phi = 0.55 # naprimer if abs(current - 0.6) < phi: print("tvoia kiska v zone puska")
>>734420 (OP) Сап годач. Есть одна проблемка. Предположим у меня есть враг с анимацией атаки в три кадра в четыре разные стороны. Атакаует он в сторону игрока. Но, если игрок начинает кружить вокруг врага, то враг естественно запускает анимацию атаки по новой в каждую сторону. И так его можно закрутить не доводя атаку врага до конца. И мне нужно, чтобы при изменении позиции игрока менялась анимация но с того кадра, который был у предыдущей анимации. Например два кадра в одну, а в другую сторону атака уже с тертьего кадра. Проблема в том, что я не врубаюсь как мне правильно запихнуть переменную, которая сохраняет текущий фрейм, чтобы она фиксировала позицию до изменения, а потом сбрасывалась, а еще какой именно командой запустить анимацию с определенного кадра
>>737992 Просто сделай атаку в развороте. Вариант слева-направо и второй вариант наоборот. Соответственно, если враг разворачивается в атаке, у него стейтмашина переключает анимацию в разворот (с блендингом) и в дальнейшем стало быть спрайт уже развернут в новое положение. И не надо никакие фреймы запоминать. Искури матчасть по блендспейсам.
>>737995 Я не пользуюсь стейтмашиной, потому что она не дает тонко настроить скорость анимации для разных фреймов, как это делает animationplayer (как же это тупо пиздец). Так что я делаю через код все.
Вопрос на миллиард. Где взять фоновую ненавязчивую музыку для игоря? С эффектами разобрался, а с музыкой хз. Могу указать автора взятой музыки, но доход с продаж лол хочу грести себе, ни с кем не делясь. Значит нужна музыка с максимально пермиссивной лицензией, позволяющей продавать-перепродавать и всю хуйню.
>>738190 Это общий вопрос? Потому что чтобы в экспорте годот-игры "вшить" ресурсы (методом ражпега, то есть приписыванием в конец) - это ещё поебаться надо. И движок опенсорсный, а это значит, там в экспорте не только шиндовое ехе.
Чтобы ресурсы были отдельно - описано в оп-посте: >>734420 (OP) > Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Имя файлу можно задать любое. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории. Для запущенного таким образом проекта папка res:// становится доступна для записи (если это не ограничено правами доступа в системе).
>>738844 > Есть еще подобное с упором на архитектуру? Может даже и нет. Потому что известные на слуху каналы, типа KidsCanCode, GDQuest, GameEndeavour у них без упора на архитектуру, как я заметил.
Как законнектить сигнал к узлу, которого пока нет? У меня две сцены: типа лобби и арена. В лобби ты выбираешь бойца, на арене он дерется другими бойцами. Имя победителя сохраняется в синглтоне, в процессе скрипта арены боец с именем победителя коннектится к функции с change_scene. На второй или третий запуск сцены арены появляется ошибка >Attempt to call function 'disconnect' in base 'null instance' on a null instance.
>>739150 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()
>>739150 У тебя ошибка в disconnect. Потому что ты сначала обнуляешь имя. Потом по пустому имени ищешь ноду, а это всегда вернет null Потом у null вызыаешь disconnect. Переставь первые две сточки в on winner defined
>>739149 > Как законнектить сигнал к узлу, которого пока нет? > У меня две сцены: типа лобби и арена. Коннекти сигналы в динамическом узле. Допустим узел арена динамически создаётся. Вот в нём и коннектись. При создании арены все сигналы законнектятся, при уничтожении расконнектятся.
>>739150 А ещё можно вот так. > 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]) Ну що? Порвало шаблон?
Сендер в скобачках ещё и прилетит в колбэк аргументом (по ссылке, разумеется), благодаря чему, если сендеров несколько, ресивер, выполняя колбэк будет иметь доступ к конкретному сендеру.
>>739149 Почему бы не сделать сцену-родителя, которая будет держать лобби и арену, управлять их переходами и хранить общие для них данные (то же имя победителя)?
>>739201 Да ну, эт придется диз-док писать, проектировать приложение, блок-схемы там всякие рисовать, что откуда выходит и куда заходит. Нет времени! Надо игоры делать!
Анончики, поясните за прозрачность в годоте. Хочу сделать стекла, они они очень сильно дропают кадры. Еще видны артефакты в виде ребер. Можно ли это как то оптимизировать\исправить? В материале в флагах выставил tranparent и установил альфу в альбедо.
>>739560 Бро, моё мнение таково: надо делать игру, а не кинцо. У тебя заморочки уровня "почему кинцо не фотореалистичное?". Без обид, бро, но у тебя там геймплей будет вообще? Или игроку будет предложено на полупрозрачные стёкла смотреть ходить?
>>739564 Блять, я про прозрачность спросил и как сделать так, чтобы она не выдавала 20 кадров на 1060, а не про реализацию интересного геймплея в годоте. Как же вы заебали со своей необходимостью делать только аркадную 2д парашу на этом движке. Дайте поэксперементировать с графикой и поклепать демо-сцены. Без обид, бро, сорвался.
>>739560 Вдогонку: я предполагаю, что стекла у тебя сделаны отдельными объектами. Если же это часть меша - не помешает проверть в первую очередь, будет ли фреймрейт дропаться так же сильно, если сделаешь стекла как тупо плоскости + отдельный материал(ы) с собственными текстурами.
>>734420 (OP) Сап, годаны. Хочу попробовать годот. Вчера скачал билд под винду, скачал Third-Person Shooter Demo, запустил. Оно начало кушать 90% видюхи (2060), это из-за отсутствия всинка? И начало лагать при запуске прожектайлов. Это проблемы с графоном или питону настолько тяжело аллоцировать объекты? Или это просто кривая демка? Подскажите, а то как-то мотивации поубавилось к изучению.
>>739666 Я прошу прощения, не срача ради. Просто уже кучу всего перепробовал, немного подустал от монструозности старших братьев, а писать всё с нуля на каком-нибудь Haxe, конечно, интересно, но очень долго.
>>739778 Зависит от прямоты рук. Убить фреймрейт ты на любом движке можешь, расценивай >>739750 как иронию.
>>739727 >ноль в программировании Тогда будет трудно, как и везде. Без кода ты игру - полноценную игру - не напишешь. Синтаксис у gdscript несложный доки написаны хорошо понятно (на английском, по крайней мере, вроде на русский переведены, но я не чииал) -- освоение языка и особенностей движка не должно составить таких уж больших проблем.
А вообще, не верь на слово и посмотри сам где лично тебе работать приятнее: попробуй создать схожие проекты-прототипы на всех трех движках и сделай выводы самостоятельно. Если потом вернешься и рассксжешь что как - плюс тебе в карму.
>>739781 Спасибо за комментарий! Вчера ночью решил идти от самого легкого, и посмотреть кто создавал уже похожие проекты на этом движке. Может плохо искал, но найти аналог того что я ищу, так и не смог. Кроме первого пика в 2d По задумке мне нужно 3d поле, на котором будут анимированные 2d персонажи.
Странно что мои 2 поста на которых ты ответил удалили, хотя я не пытался развести срач, а просто задать интересующий меня вопрос.
>>739812 >По задумке мне нужно 3d поле, на котором будут анимированные 2d персонажи. Почему не отредерить 3д поле в 2д картинку и просто подставить раз персонажи 2д уже?
>>739727 Аркадный теннис без программирования я б сделал так - нарисовал пару 2d path кривых, одна для вертикального профиля полета и 1 для закрутки мяча. И затюнить для разных видов ударов. Сила удара будет влиять на масштаб кривых. Минимум кодинга понадобится для проверки столкновений и переноса точки откуда начинается кривая. Для мультяшных игроков проще взять 3д модельки и кинуть им toon shader
>>739868 >нарисовал пару 2d path кривых, одна для вертикального профиля полета и 1 для закрутки мяча. И затюнить для разных видов ударов. Сила удара будет влиять на масштаб кривых. Ничего не понял. Но идея интересная. >проще взять 3д модельки Но не проще сделать. С 3d я не особо, а 2d спрайты осилю.
Блять, у меня возникла ебанутая проблема. Почему-то при столкновении collision shape героя с collision shape тайлмапы, у меня сдвигаются на пиксель-два спрайты других объектов. При чем в зависимости от какой стороны столкновение (справа, сдева, внизу, сверху - это топдаун) двигаются разные спрайты. Раньше такого не было. Я вообще не врубаюсь что происходит
Если мне нужен поцфайндинг по клеточкам, там есть какие-то встроенные функции для этого, или проще астар с нуля написать? Я знаю, что есть Navigation2D, но это для произвольных прогулок по навмешу, как я понял.
>>739910 Не, там двигаются даже те объекты, к оторых нет формы. Пробовал играться с формами самого игрока. Выяснил, что сдвиг более виден, когда форма более округлая. Пытался загуглить, но нашел лишь отдаленно похожие проблемы
>>739910 >>739898 >>739911 Еще заметил, что если сталкивается округлая форма с округлой, то норм. В принципе, я мог бы всем сделать округлые формы, но я не могу сделать круглые формы тайлмапе
Вот допустим у меня есть BitmapFont который я хочу применить ко всем наследникам Control на сцене, чтобы для каждого не создавать скрипт с add_font_override. Как этого добиться?
>>739941 Шрифт или тема, назначенная любому контролу, распространяется и на все дерево контролов под ним. На пике шрифт ноды control будет распространяться и на label
>>739915 Обратите внимание, как дергаются вещи. Уточню, я не просто зажимаю кнопку движения, а часто ее жму, чтобы было более видно подергивание. Если просто зажать, то это произойдет два раза - при столкновении и когда я отпущу кнопку движения
>>739942 Не уверен что это работает когда заменяешь шрифт в рантайме, с помощью функции add_font_override(). У меня по крайней мере не получилось, если что в _ready() засовывал.
>>739945 А, все, разобрался. Нахуй рантайм, BitmapFont-объект можно в .tres сохранить с помощью ResourceSaver и потом просто как нормальный шрифт вставить в редакторе.
>>739944 Я не 100% уверен, но возможно это из за того, что у тебя объекты стоят не в целых пиксельных координатах. Вот например на этом видео стенки слева стоят по snap, т.е. 100, 200, 300, а справа стоят как попало, 599.056, 398.112, и при движении камеры левые двигаются в ногу, а правые не в ногу. Если это оно, то надо или расставить объекты с включенным snap в редакторе, или погуглить как делается сабпиксельная камера, чет там через вьюпорты и скейлинг (2д мало занимаюсь так что не помню, но где то читал)
>>739960 >>739953 Бля не, помогло, но не до конца. Если игрок сталкивается сразу с двумя рядом стоящими формами, то объекты все равно смещаются. Надо будет пробовать делать сабпиксельную камеру
>>739981 Супер простым. Это пока просто болванка, чтобы тестить. Алсо, у меня почему-то не все объекты встают в пиксельную сетку... Начал гуглить, нашел похожие случаи, но пока не пофиксил. Проблема судя по всему распространенная ну и говно как же у меня горит
Замоделил поле по туториалу, и возник ещё вопрос. Мне нужно будет кроме игры в теннис создать vn вставки, для чего я установил аддон Rakugo VN. Проблем особых не возникнет?
>>740014 > Мне нужно будет кроме игры в теннис создать vn вставки, для чего я установил аддон Rakugo VN Там ещё в прошлом треде презентовали аддон Dialogic который весьма полноценно реализует диалоги в ВН-стиле (иконка персонажа с вариантами эмоций, текстовое поле с кнопкой скипа, отдельные кнопки вариантов при вопросе, эффекты, стили, шрифты, всё фкаропке), без всего остального ВН-функционала (типа кучи ренпаевских кнопок внизу, сохранений, загрузок, отматываний-проматываний). Если твои "VN вставки" - это по факту диалоги, то может быть лучше его задействовать?
>>740052 >Dialogic Посмотрел, с первого взгляда выглядит как хорошая альтернатива. >Если твои "VN вставки" - это по факту диалоги, то может быть лучше его задействовать? По сути нет. VN-сцены будут лакомкой, а теннис как мини-игра.
Есть некроноут с Хрюшей. Версия 3.2.3 - все норм работает, новая 3.3 помирает при компиляции шейдеров на этапе запуска редактора. Кто-то еще пробовал запускать на некро железе/ОС новую версию?
>>740352 Никогда не имел дело с фронтендом, но если это хоть немного похоже на программирование UI здесь, то теперь мне понятно почему фронт все ненавидят.
>>740438 > логику к ним писать - полный пиздец В смысле? В чём конкретно пиздец? У меня проблем не вызывает. Просто вызываешь обработчики событий (сигналов) как везде.
>>740438 Кстати, наверно у меня не возникает проблем опять же из-за опыта кодинга оконных приложений (фронтенда по современному). Сразу могу дать совет, который работал ещё в нулевых с различными 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 параметр по умолчанию пустая строка, и если вызвать без параметров, он вызывает меню ручного сохранения, если же указать параметр, то сразу без вызова меню сохранит с указанным именем файл.
То есть, как видишь, обработчик сигнала элемента интерфейса записан в одну строку, ты пишешь его один раз и больше туда не лезешь. Если вдруг у тебя возник соблазн добавить вторую строку - значит ты ду ит вронг. Поразмысли над архитектурой проекта ещё раз. Добавь аргумент в вызываемый метод из игровой логики.
>>740438 Обобщай, делай свои контролы. Например если у тебя однотипные кнопки, например хотбар абилок или инвентарь, нет нужды писать обработчик доя каждой кнопки, можно передавать номер кнопки параметром в сигнал button.connect("pressed", self, "on_pressed", [btn_name]) Многоуровневые меню и навигация по экранам кстати неплохо описываются конечным автоматом (fsm)
>>740440 У меня не то чтобы есть проблемы его сделать. Просто его надо дико заранее планировать перед реализацией и все должно иметь очень-очень четкую структуру иначе баги полезут изо всех щелей, приходится 10 раз все перепроверять. Ну и тут еще перфекционизм не помогает, все эти обновления интерфейса хочется максимально оптимизировать, потому что они происходят при малейшем движении, но тогда код становится менее читаемым. За лайфхак с общими методами спасибо, хоть я и так уже это делаю.
В общем, я долгое время хотел создать RPG про роботов, пингвинов, чертей, обувь, шляпы и мяту, и сегодня пожалуй не начну этого делать. В этом треде буду отписываться о результатах. Сразу скажу, что я нихрена не умею, кроме как созывать анончиков собраться вместе и запилить мне игру, поэтому не буду учиться большинству необходимых вещей с нуля. В качестве языка для разработки выбрал ГДСкрипт + Сишарп. Посмотрим, как у меня выйдет собрать вас, анончиков, в команду.
>>741077 gdscript поначалу (после решетки) непривычен, но довольно удобен, да и заточен под движок; плюс все примеры и большинство вопросов-ответов гуглится на нем. Решетку прикрутили не так давно, поэтому думать и адаптироваться придется больше. Я бы посоветовал для всякой мелочевки (нажатия кнопок, обработка ввода, триггеры на сцене) использовать gdscript, а если потребуется класс с большой и сложной логикой - взять решетку.
Эх, блин, нашел танчики, которые делал еще на версии 2.1.4. Коллизия снарядов как-то через жопу работала, почему-то при попадании в угол кирпича они его не ломали, так и не нашел тогда, почему.
>>741426 Так. Ты при импорте модели получаешь ту же структуру, как в блендере. То есть, если у тебя модель домика деревянного с отдельно замоделированными и заанимированными курьими ножками, то у тебя и в годоте будет импортирована сцена с отдельными мешами домика, ножек, крыши, окон. И анимации блендера сконвертируются в анимационный плеер годота. >>741396 Сорян, не подскажу по данному вопросу.
>>735946 >>741442 И тем более летает GameMaker: Studio 1, но увы он уже не поддерживается да и велосипедить на нем заебало, слишком мало там всего из коробки.
>>741940 >>переносишь редактированные пиксели из правого края левой карты высот в левый край правой Будут слишком резкие перепады высот. К примеру если на левом чанке крайняя вершина на 100 высоте, а на правом так получилось на глазок что крайняя вершина на 40 высоте - то их никак нормально не состыковать... Ну можно сгладить - искажая при этом половину чанка из-за чего все тоже попортится. Пикча. Тут даже дело не в том как состыковать - я надеялся что есть что-то нормальное чтобы вообще таких проблем не было (как в других движках) - оказалось что нет
И в блендере нельзя нормально оценить как на этом ландшафте будет стоять декор. А ведь ландшафт подстраивается под декор - тут ямка, тут площадка под дом, там насыпь, там дорога, там русло реки и т.д.
Или всю локацию вообще в блендере собирать?
Официальный ответ Службы Поддержки
Аноним# OP09/05/21 Вск 22:02:02№742018180
>>741736 > как сделать гиганский ландшафт в несколько км? Путём фултаймовой работы команды 20-50 профессионалов. Самый короткий гайд, но это правда. Пройди через все стадии принятия неизбежного и прими это: опенворлд в соло (да на чистом, быстро перегорающем энтузиазме) не запилишь. Ты давай смотри на вещи реально. В соло ты можешь сделать несколько камерных сцен и телепортировать персонажа игрока между ними по мере продвижения сюжета. Сюжета. Хоспаде, пишу об играх, как о кинце. Геймплей не забудь тоже. Игра должна играться. Ходить по пустому опенворлду - это не игра. А в соло у тебя будет пустой опенворлд. Прими. Это. Ах да, чанки, чанки будут у тебя быстро и технично грузиться. Пустые чанки пустого террейна.
>>742032 Про процедурные генераторы кто-то сказал (а я запомнил): "хоть карта и бесконечна, строящий ее алгоритм вполне себе конечный, а потому легко распознается человеком через небольшое время". Глянь тот же майнкрафт: если ты видел биом равнин один раз -- ты, считай, видел все его вариации; от того, что генератор выдаст тебе десять-сто-тысячу этих "различных" равнин, интереснее игра не станет.
Очевидно, помимо генератора местности еще понадобятся ассеты -- модельки, текстуры, шаблонные структуры для генератора (см. постройки в майне), готовые неписи, шаблоны скриптов/событий на локациях и прочее, прочее, прочее. А это огромные времязатраты, если делать качественно.
>>742056 Ну. Если посмотреть на всякие фракталы, то иногда простые правила могут давать довольно сложные результаты. Тот же набор мандельброта. Если настроить процедурность для ассетов и отсеять все неинтересное нейросеточками, то можно чет и сделать имхо.
>>742018 >Путём фултаймовой работы команды 20-50 профессионалов. Террейн в 1км можно в одиночку сделать и многие делают.
Я раньше думал что в годоте есть хоть какие-то инструменты для террейна. Оказалось что ничего нет. Даже для простой минимальной локации
>>742018 >ними по мере продвижения сюжета. Сюжета Есть много разных жанров. Не будь ограничен. Есть игры, в которых нет никакого сюжета. Даже есть игры с минимальным геймплеем. Есть игры просто на исследование местности.
>>742018 >Путём фултаймовой работы команды 20-50 профессионало Вон The First Tree делал один разработчик >>Созданием игры занимался Дэвид Вейл, будучи не имея какого либо опыта программирования и разработки видео-игр
Так и весь вопрос - как сделать такой же ландшафт как там. Ведь его там делала не команда в 50 профи. А всео лишь один человек.
>>742061 >процедурность для ассетов >>742062 >Генерируй Чтобы генерировать - нужно написать, проверить и исправить код. Процедурность ассетов - это не модельки из воздуха, а результат работы. Возможно, даже большей работы, чем создание тех же условных моделек в блендере. Да, легко можно написать генератор, который будет выдавать 10^n уникальных однообразных моделек, а толку? Ты потратишь меньше времени на создание пяти (десяти) в редакторе, а результат будет тот же.
Я не говорю, что процедурность - херня, вовсе нет. Однако создание хорошего пула карт на рандоме -- это очень дорогая в плане времени/усилий штука
>>742078 >Террейн в 1км можно в одиночку сделать и многие делают. Террейн - да. А локацию? Непустой уровень, на котором есть чем заняться десять-пятнадцать часов?
>инструменты для террейна Что ты имеешь в виду? Какие инструменты тебе нужны?
>Есть много разных жанров. Не будь ограничен Я походу ограниченный человек. Я предпочитаю игры, которые предлагают игроку какие-то занятия, дают возможность интересно провести время. Да, захватывающий сюжет необязателен. Да, геймплей может быть минимален. Но игру на исследование однообразной рандомной местности без сюжета и геймплея я бы дропнул менее чем за час, потому что удовольствия никакого.
Вдогонку: мне кажется, неправильно поставлен сам вопрос. Оригинальный "как сделать гиганский ландшафт в несколько км?" предполагает, что опу нечем развлечь игрока кроме рандома уровня.
Правильнее было бы или ставить общий вопрос "как мне разнообразить геймплей [вот такого прототипа моей игры] рандомом?", или частный "какие есть способы генерации/отрисовки под нужды [моей игры с такими-то условиями]?", и рассматривать террейн и рандом как средство достижения каких-л. целей или как возможное решение конуретных проблем при разработке.
>>742096 >Оригинальный Оригинальный вопрос был - как вообще сделать ландшафт в годоте, без лишней кодовозни с максимумом визуальной работы (то есть без вот этих вот сшиваний чанков кодом).
>>742093 >Что ты имеешь в виду? Какие инструменты тебе нужны? Инструменты которые позволяют визуально редактировать весь ландшафт, чтобы я сразу видел результат с учетом не только ландшафта, травы, деревьев, но и со всем декором. Вариант делать ландшафт где-то в другом месте (блендер, вурдмашина и т.д.), и резать на карты высот - фигня, потому что я не могу там учесть окружающий декор .... Короче, я думал что в годоте есть такие же инструменты визуального редактирования ландшафта как во всех остальных движках. Но нет.
>>742079 > The First Tree У. А я гадал, какое из копипастных безыдейных говен вбросят на вентилятор. Вбросили это. Ясно. > как сделать такой же ландшафт как там В первом попавшемся генераторе ландшафтов из гугла.
Это будет в 3x сложнее, чем я думал. Уже возникли трудности с созданием персонажа, и его управлением. Но нет ухо без добра! Сделать эффект 2d спрайта смотрящего онли в камеру получилось за пару секунд. Если кому нужно будет https://www.youtube.com/watch?v=N0Laa7XLeS4&ab_channel=Garbaj
>>742162 >Интереса ради, не холивара для -- какой движок? чтобы не агридь мода - такие инструменты есть минимум в ue/unity/unigine. Странно что в годоте их нет
На самом деле в самом редакторе годота вообще нет никакого редактора ландшафта и даже такого понятия - я использовал модуль Height Terrain от стороннего разработчика, но: - автор им больше не занимается (последние апдейты в январе) и он сам говорил. - модуль недоделан, нет например вот этой работы с чанками - то есть например возможности рисовать на стыке двух чанков. В других движках рисовать можно сразу на всех чанках. Тут же предлагается каждый чанк рисовать отдельно, а потом руками пытаться зарисовать все дыры на стыке
>>742217 >В первом попавшемся генераторе ландшафтов из гугла. Только в годоте нет ничего чтобы этот ландшафт показать. Надо самому велосипедить.
>>742271 Благодарю, теперь управлять персонажем куда приятнее.
Хотел с утра добавить ему рывок, для разнообразия передвижения, нашёл гайд, но пока для меня это очень трудная задача. Ничего не понял что пацан показал в видио, и по этому сегодня постараюсь сделать черновое меню. Если хватит сил, разберусь как добавить в начало vn сцену, сменяясь после на сам геймплей.
>>742268 Небольшой совет по коду. Помимо 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 Обрати внимание, минус где надо появится автоматически.
>>742529 Благодарю за совет, но из меня так себе так что абсолютно весь код для меня как дремучий лес. Двач ещё знаки умножения сожрал, из за чего я даже понять не могу как эти две строчки моими заменить. Но меня такое управление устраивает, хотя бы как-то дает представление что за что отвечает. Почти целый день делал меню, так и не смог осилить эти гребенные контейнеры. На бумаге нарисовать задумку легко, а вот понять логику программы уже трудно. Ну ладно, оставлю это на завтра, а пока часик помучаюсь с рывком для персонажа.
>>742543 > так и не смог осилить эти гребенные контейнеры Да чего там осиливать-то? <- Как-то так как на пикче. > Двач ещё знаки умножения сожрал, из за чего я даже понять не могу как эти две строчки моими заменить. Вот так: > dir.x = ( get_action_strength(right) - get_action_strength(left) ) ж 3 > dir.z = ( get_action_strength(down) - get_action_strength(up) ) ж 3
>>742595 > Нужно ли делать пул для audio 3d нод? Не нужно, звук пуллируется аудиосервером на уровне аудиошин (bus). Просто размещай аудиоплеер чайлдом в ассете и управляй им из инстансов. Например, сам ассет врага пусть решает, воспроизводить ему звук или нет. В тридэ там ЕМНИП даже настройка дальности искаропки есть. > Может кто проверял и знает Я проверял. Основные проблемы там, когда ты на фоне играющего ogg запускаешь много сэмплов wav начинается кряхтение в колонках. Я пытался забороть, но хуй забил на игору вообще, поэтому решения не знаю. И кстати, это кряхтение ещё на версии 3.0.6 было, так что может и оптимизировали уже.
>>742608 > Ирл никакого АО не существует Да ты штоо??? >>742609 Ты автор? Покажи с другого ракурса, что это источник света, а не блик. А если не автор, так не пизди. Я там вижу только блик с засветкой (мы же о поверхности над заложенной дверью говорим, да?) а у отраженного света тоже полутень будет. Везде будет.
>>742612 Глаза разуй, там есть тени на первой и затенение на второй, в довесок к теням. Вот это затенение в узких местах и углах - и есть АО. Отражает распространение света в реальном мире.
Игроделы, поясните, почему вы выбрали годот для своих игр? Интересует лично ваше субъективное мнение, почему он, а не любой другой. Ну только не говорите мне про бесплатность. Они сейчас все в том или ином виде бесплатные.
>>742643 Открыл только в обратном порядке ну и из анриала и не захотелось выходить впринцапе, хотя и юнити неплох, а годот мне повесил компьютер намертво когда запустил тест игры хотя комп не зависал уже лет 5.
>>742643 анрил мне вообще не понравился у юнети чувствуется, что они тупо больше, как компания и продукт стабильный годот я помню запускал вроде вторую версию и у меня были проблемы с установкой, импортом примеров и т.д. работала только стим версия и то через раз
>>742558 >>742559 >Да чего там осиливать-то? Сама логика мне не очень понятна. В школе кое-как меня научили кодить на html. На ремпае было легко брать кусочки кода, и тупо вставлять в свой проект. А где нужно побольше знаний тут же ступор, и не понимания что от меня хотят. За скрин ниже мне уже пиздец стыдно.
Если до конца месяца не смогу хотя бы половину задуманного в движке сделать, забью на программирование, и пойду дальше.
>>742665 >Это странно. Нет, странно не пользоваться чем-то только потому что там нет функций, которыми ты не пользуешься и не будешь никогда пользоваться. Вот это действительно странно.
>>742677 чел, в гк если и есть "тысячи объектов", то они супер-простые и их явно не тысячи, а максимум сотни и они все супер-простые и если годотя не тянет сотню простых объектов с физоном, то ШТОШ МДАУШ
>>734420 (OP) Пойду сюда что ль побомблю. Ёбаный ты нахуй, какого ж хуя до сих пор нельзя НОРМАЛЬНО сделать интеграцию с гуглоплеем. Ёбаный же стыд PGSGP уже давно мёртв, разработчикам плагина на него похуй и на 3.3 обновы не видать (кроме костыля, который, сука, без пердолинга, один хуй не работает). Надеюсь, блять, в ёбаной четвёртой версии вся хуйня будет работать нормально
Пытаюсь заспавнить случайное количество кнопок-сцен, чтобы они были всегда по середине, но почему-то получается, как на первой картинке. Если в "Удаленный" вручную выставить для HboxContainer margin_right в ноль, тогда все как надо, как на второй картинке. В коде почему-то эти команды не воспринимаются. Для HboxContainer стоит параметр grow_direction - horizontal - Both.
>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)
>>743494 > его через FindNode не находят Безумие. Если у тебя автолоад синглтон, тебе не нужно никакое финдноде. У тебя твоё имя сразу регистрируется в редакторе глобально. И ты просто пишешь > MightyAutoLoad.MightyMethod()
>>743698 >Снимай с паузы кнопку Не знаю, поменял в pause_mod на process, stop, все равно кнопка не нажимается не знаю. >hbox.update() Не, че-то не помогает. Ну буду через процесс что уж.
>>744081 Спасибо. Я нашёл что искал. Прошу сразу простить мою наглость, но вы сможете перевести это на С#? Мне не понятно откуда он взял строка 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(): показывается, что срабатывает всего один раз.
>>744419 > почему так происходит? Потому что по умолчанию все элементы_канвы прозрачны для событий мыши/тача. То есть, получив событие, они не препятствуют получению его же остальным слоям канвы. > как разделить сигнал Есть два стула: 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 Если я инстанцирую повторяющиеся меши, это же снизит нагрузку и увеличит скорость работы сцены? Дополнительный вопрос. Скрипты же и сигналы тоже в инстанцирование попадают нормально?
>>744498 Другой вопрос. А генерация. Это что, для тайловой карты 10 на 10 надо цикл в сотню, что ли, загонять? Или у движка есть какие-то инструменты для такого?
>>744520 Ну я имею в виду, что для заполнения гексагонального поля 10 на 10 клеток, мне надо будет сделать цикл х от 1 до 10 с вложенным в него циклом у от 1 до 10. Либо считать, исходя из квадрата числа (карта квадратная-то). Двойные-тройные и т.д. циклы это же плохо и медленно в общем случае? Есть ли инструмент оптимизации этого процесса? Иначе придётся ждать инстанцирование 6400 раз для того же поля 80 на 80 (у меня это занимает уже секунд 5 против моментального запуска карты 20 на 20), что уже не выглядит так просто как 10 на 10.
>>744526 Хотел тебе гридмап посоветовать (увидел, что ты гексы в тридэ делаешь), но оказалось, что у гридмапа гексагональной сетки нет, в отличие от двадэшного тайлмапа. Даже не знаю, что теперь и предложить. Получается, что ты правильно велосипедишь велосипед.
>>744528 >>744526 Вот например вариант. Если у тебя не предполагается карта высот, но хочется красиво наклонять камеру вокруг мапы, то можно сделать отрисованную через вьюпорттекстуру на тридэспрайте двадэшную тайлмапу.
Но скорость её заполнения всё равно смотреть надо, и я уверен, в один поток всё равно будет медленно, поэтому >>744527
>>744527 Ну в общем и целом для пошаговой игры я в этом вижу, скорее, плюс. Не надо усложнять логикой управления многопоточности. Просто вот такие телодвижения, когда у меня простые модель шестиугольника, сваянные на коленке в блендере, а оно на пекарне конца 20 г.в. грузит по 5 секунд, вызывают подозрения, что когда это будет заполненная карта, то это уже будет ощутимо. Хотя, может, занимаюсь преждевременной оптимизацией. Хз. Пока пилю как есть, хотя бы до уровня mvp. А то так вообще никогда ничего не закончить. >>744528 >что у гридмапа гексагональной сетки нет, в отличие от двадэшного тайлмапа Я в гридмап почти неделю проебался, чтобы понят, что он даже с велосипедами не подходит. Точнее можно, но велосипед становится ещё сложнее.
>>744529 >можно сделать отрисованную через вьюпорттекстуру на тридэспрайте двадэшную тайлмапу. Я этот же совет видел на форуме годота раза два. Но что-то мне показалось сложнее, чем в чистом 3д, когда дошёл до взаимодействия с тайлами. Уж и не помню, что в итоге мне не понравилось. С получением координат, что ли, была беда какая-то. В итоге, https://www.redblobgames.com/grids/hexagons/ + 3д взял за основу.
>>744532 >>744533 Тогда вот тебе ответ на твой вопрос. Если тебе нужно заполнить одним циклом некое двумерное поле, определи для поля фиксированную ширину (количество столбцов, C). И тогда: X = i mod C (остаток от деления) Y = i div C (деление нацело) Лол, посмотрел сейчас твой скрин с кодом, а у тебя так и делается. Только каким-то переусложнённым черезжопным образом. Тебе нужно вдовесок к вышеуказанным вычислениям выбрать сдвиг наполовину для каждой, скажем, нечётной строки. И вуаля, готово. Но это по отрисовке. Для заполнения тебе сдвиги уже не нужны. У тебя есть одномерный массив со всеми тайлами и ты получаешь координаты каждого тайла через эти нехитрые вычисления икса и игрека.
Могу геометрический смысл наглядно нарисовать в пейнте, если не уловил.
>>744537 > Только каким-то переусложнённым черезжопным образом. Ровно таким же, если сократить те же i в выражении. Это колдовство осталось из криво созданных изначально моделей и подгонки на глаз, отчего вариант i mod mapSize выдавал не те координаты, что я ожидал.
Короче, пробежаться надо по коду завтра незамыленным глазом в поисках глупостей.
>>744696 У меня была охуенная идея игры - менеджер дачи, где нужно играть за бабку и заставлять всю семью как можно больше вкалывать в огороде за лето и как можно дольше не давать им превратить дачу в место отдыха.
>>744697 а еще возможность вырастить овощи до чересчур больших размеров и количества. А еще красить домик в неприлично-яркие цвета и клеить много слоев обоев.
Вот построил я CollisisonPolygon2D, хочу в его середину поместить надпись. Как найти середину? Я нашел как найти центр масс, но точки у меня не однородно расположены, надпись съезжает далеко от центра.
Вот я хочу, перемещать камеру по экрану, но GUI оставался на месте. Поместил интерфейс в узел CanvasLayer, который специально для этого, но теперь я не могу кликать сквозь этот CanvasLayer. А как?
А можно ли как-то при инстанцировании задавать значение своего кастомного аргумента, чтобы потом в скрипте этой инстанцированной ноды можно было использовать это значение? Пробовал с export var и с созданием функции внутри скрипта инстанцирумой ноды или меша. Не получилось. Говорит, что нет такого метода в мешинстанс, например.
>>745136 > А можно ли как-то при инстанцировании задавать значение своего кастомного аргумента В гдскрипте на данный момент нет приватных переменных, то есть, создавая инстанс, ты можешь получить доступ к любой его переменной. Итак. У нас есть 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/.../
>>745151 > И так, похоже, делать не надо. Мешинстанс причём тут? Код показывай, чо ты там нахуевертил? Так надо делать и так делали 30 лет до годота и так будут делать 330 лет после годота. Это классика ООП.
>>745165 Ну допустим, есть гипотетическая структура 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 Или можно как-то красивей?
>>745247 > как-то красивей? В стиле годоскрипта. GlobalData.set_my_parameter_as(new_value) где set_my_parameter_as - это функция, опционально чей-то сеттер.
>>745255 > А как можно реагировать на изменение переменной в синглтоне? Сигналы. Сигналы родимые. Они же события в ентерпрайз-кодинге. Изучи их. Пойми их. И пользуйся их силой. В синглтоне: > 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)
>>745262 >Кошерно вообще не иметь глобальных переменных. А как тогда работать со значениями, идущими от инстанцированных элементов? Напримример, в каждом инстанцированном объекте есть переменная. Для каждого инстанса там своё значением, но вот на глобальной сцене надо учитывать значение из последнего инстанса, с которым ты повзаимодействовал. Тут либо каждый раз выяснять, с кем в последний раз взаимодействовал, после чего тянуть значение, либо в процессе взаимодействия положить значение из инстанцированного элемента в глобальную переменную, а после уже не вспоминать, с каким же инстансом ты взаимодействовал.
>>734420 (OP) Я ебанат и скачал движок в стиме. Теперь он обновляется сам-по-себе и без обновлений не хочет запускаться. Есть проверенный способ отвязать его от стима?
>>742637 1) Тяга к опенсоурсу. 2) Году в 12 игрался с юнити. но юнити начал обрастать и тяжелеть, что пиздец. Особенно стало, когда понадобилась студия - до того хорошо жил во встроенном иде с моно. 3) Есть приличное 3д 40 Не такой брошенный во времени, как огре3д и урхо3д.
>>745413 Промежуточный допрыг? Я думаю, речь идёт про бонус неуязвимости, который даётся на каждом новом старте. Надо бы описать их, да. >>745464 >>745472
Спасибо за фидбек, анонасы! Пофикшу в скором времени
Блять, пол часа сидел искал баг и оказалось что match по какой-то причине не мог сравнить нормально два int-а. Переписал на if-elif и все магически заработало. Какого хуя Хуан?
Да вот такая обычная конструкция, не знаю на что тут смотреть. В settings[option] валялся интегер от 0 до 2, что я перепроверил консолькой еще. Но по какой-то причине тригерились не 0, 1, 2 ветки, а местный дефолт, то есть _: , причем это происходило не всегда. Не знаю уж баг это или нет, но после переписи - все стало нормально.
Вот на что стоит действительно написать issue, так это на AudioStreamPlayer2D. Мой .ogg стрим (не знаю проблема ли это только .ogg или .wav тоже) зацикливается, даже если в самом годоте галочку убрать с Loop у стрима. Приходится через код отрубать и это 100% баг, причем он и в прошлом релизе был.
>>745964 Если годот по какой-то причине не решил их во флоат где-то сконвертить и потом округлить до целого числа при выводе в консольку - да. Но тогда бы и if нормально не работал, я так думаю.
>>744115 Парни ну помогите, Я тот который переделывал гд-скрипт разворота 3д объекта на C# Я почти допёр, как сделать управление, топдайн шутера в 3д, единственно мне не хватает малости, чтобы поворот модели следовала за курсором мыши, а так модель крутится волчком влево и вправо при движении мыши по Х и по У
>>745965 А, блять. Не только у стрима есть параметр loop оказывается. У самого файла в меню импорта тоже есть параметр loop и он зачем-то по умолчанию включен, интересное открытие.
Глобал шлет сигнал раз в секунду. Хочу, чтобы узел брал значение, сравнивал с предыдущем и показывал изменение, то есть их разность, и рисовать стрелочку. Узел у меня создается каждый раз новый и как только он создается, value у меня всегда равно нулю, почему-то. А в следующие секунды все показывается нормально. Значение new_value мне присылает родительский узел, он тоже это делает раз в секунду по сигналу от глобала.
Есть у меня мыслишка. Неделю уже развиваю или около того. Сделать опенсорсный репозиторий с мини-играми в виде готовых сцен годота. Все мини-игры должны обладать унифицированными интерфейсами для последующего встраивания в более крупные проекты. Что я хочу собрать? Змейки, тривряды, тетрисы, пятнашки, пакманы, взломы замков, механических, электронных, свои авторские пазлы, и многое-многое другое. Для заполнения ими игровых миров анона. Берёшь сцену из репа, встраиваешь в свою игору, юзая стандартизированный АПИ. Как вам идея? Кто хотел бы поучаствовать? АПИ должен включать в себя функции отображения мини-игры, скрытия, опционального запоминания состояния, позволяющие организовать включение и выключение виртуальных устройств с мини-играми в "макро"-игре, при скрытии осуществляется возврат значения (через сигнал), позволяющий организовать собственно взлом доступа куда-либо через мини-игру, или получения чего-либо, или продвижения по квесту.
>>746415 Поздравляю, ты украл мою идею, где персонаж должен ходит по комнатам и решать рандомные случайно выпадающие миниигры. Сука, а я даже анимацию персонажу не могу настроить.
>>746448 > пиши АПИ Предлагаю продумать АПИ вместе, чтобы всем было удобно и чтобы обойти подводные камни, которые не увидишь в одиночку. >>746418 Сорян. Зато ты теперь можешь не писать кучу миниигор, а подсоединить нашу (пока ещё не существующую) базу миниигор прамо в свой проект и сконцентрировать усилия на стиле.
Я импортировал JSON файл в синглтон, присвоил его словарю dict1. В другом скрипте создал еще словарь dict2 = singlton.dict1. Беру из dict2 данные, обновляю их и сохраняю в dict2 новые данные. Но оказывается обновляются и данные в синглтоне. Так и должно быть? И dict2 = Dictionary.new() не работает, функции нет в Dictionary. Короче, чтобы хранить начальные неизменные данные, надо в синглтоне еще один dict3 создать и распаковывать в него? Или можно во втором скрипте все-таки сделать независимый словарь?
Как лучше закладывать поведение ИИ в игру, и где его обрабатывать для пошаговой игры? Есть идея гонять принятие решений в многопотоке, пока игрок ходит свой ход, чтобы потом ИИ имел заданный набор шаблонов для поведения к своему ходу. Из идей только в синглтоне крутить в цикле принятие решений.
>>746695 Ну я тоже ориентируюсь на 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() - вот тут не получается
Привет. Есть нода2д на которой лежит layout на котором лежит контрол. Как взять глобальные координаты мира под контролом? Походу лайаут создал ещё один вьюпорт. И я совсем не понимаю как с одного вьюпорта влезть в другой.
ОП в треде. Перекачу ближе к вечеру. Про оп-пикчу анона помню, поставлю. Предлагайте дополнения в шапку. Позже перечитаю и скомпоную. Всем цемки! Обнял! Убегаю! На связи!