"Быстрый старт с Godot: Создание игр с удовольствием! 🎮🚀 Преодолейте начальные барьеры и начните свою игровую историю. Присоединяйтесь к нам, чтобы воплотить свои идеи в реальность!" Группа в Telegram: t.me/+6zyiuofwIhM4NGNl
ПОМОГИТЕ ЧТО ДЕЛАТЬ ЕСЛИ ВЫЛЕЗАЕТ ОШИБКА invalid index 'position' (on base ' null instance') var dierection = (player.position - self.position).normalized()
друзья если у вас баг и моб движется только в одну сторону при условии если вы написали код правильно и иерархия обЪектов сделана так же как и в 5 части этого ролика... вот вам решение проблемы 1) на сцене скелетона объект самого скелетона во вкладке трансформ поставьте в позицию х600 у300(это примерное значение) 2) на сцене плеера объект самого плеера во вкладке трансформ поставьте в позицию х600 у300(это примерное значение) 3) на сцене левел родительские объекты плеер и мобс поставьте на х0 у0 а дочерние объекты скелетон и плеер должны быть на позиции х600 у300(это примерное значение) в итоге все корректно заработает у вас надеюсь я кому то помог всем успехов
@@user-rp1ob3fk7l берется он из за некоректного положения обьектов относительно расчета в коде... короче все обьекты выравнивай по ху на 0 а потом пробуй ставить как я выше написал... а может у тебя иерархия не так как в уроке... а может в коде ошибка... я не знаю конкретно что в твоем проекте поэтому помочь увы врятли смогу... но все равно удачки тебе
спасибо, заработало. я не совсем понял первопричину этой ошибки, можно поподробнее? получается первоначальна позиция 0;0 самих персонажей не корректна ?
Когда я посмел перемотать это чудесное видео на 5 сек, на меня за этот грех наслали дебаф "невнимательность" и я 4 часа чинил какие то ошибки. спс автору, видео хорошее, это я слепошара
Эту строку (а именно путь) лучше вручную прописывать т.к при переносе player в скрипт путь в неверном формате var player = $"../../Player/Player". Возможно кому пригодится если будут ошибки
Спасибо большое, посмотрел все 5 видео думал я нечего не смогу, потому что до этого 3 видео посмотрел не помогло ни капли, но с твоими видео я начал создавать со своими персонажами,, свои локации и тд, очень помог
Спасибо за видео! Недавно начал смотреть твои видео, всё очень интересно. Только я бы в начале, в первом видео, указал, что рекомендуется знание GDScript, хоть это и может показаться очевидным. Мне пришлось недельку на это потратить, благо, python я знаю более-менее)) Иногда замечаю по ходу просмотра видео небольшие недостатки в изложении материала, но, в целом, мне всё нравится))
@@GameCrafter_GD На самом деле такой подход к обучению существует, но он требует намного больше неспешной практики, чем в твоих видео. (Это ни в коем случае не претензия!). Конечно, что-то понять вполне можно, но с нуля в полной мере выучить язык так не получится. В прочем, это всего лишь моё мнение.
@@OUR_RED_ARMY Работает но не в полной мере. Я программирование учил 100500 лет назад когда turbo C, pascal и тп т.е. сейчас я помню только общие понятия типа объявление переменных, старт и конец цикла и тп И в целом в процессе просмотра видео в части когда возникает просто тонна вопросов.
Спасибо за уроки, долго не мог понять, почему скелет не идёт за мной - в итоге оказалось, что поставил случайно двойное "=" на строчке chase. Проверяйте, ребята, код внимательно!
Привет, крутые уроки! Но у меня появилась проблема. Когда я перетаскиваю персонажа в код, мне пишет чтоперетащить узлы невозможно, потому что скрипт не учавствует в этой сцене. Как решить эту проблему?
долго мучился и не понимал почему мой гоблин стоит на месте.Позже понял что я назвал персонажа не Player, а по своему). Потом появилась ошибка с direction, оказалось когда переписывал код, забыл написать .x. Благодаря тебе и этим ошибкам, точно запомню что как работает)
У меня скелет тоже стоял на месте и ничего не делал. Потом я понял то что "Player" во функции _on_detektor_body_entered(body) НУЖНО ПИСАТЬ С БОЛЬШОЙ БУКВЫ😂😂😂
GameCrafter, а ты можешь подогнать фон по пикселизации ? Мы в первых роликах увеличили BackgroundLayre под размер окна и теперь деревья кажутся огромными по сравнению с персонажем, да и видно, что пиксели деревьев больше, что пиксели персонажа.. Я пытался сам подогнать слои по пикселизации, но не выходит, появляется пустое пространство. Может ты знаешь как это сделать? Благодарю за контент!
Все по коду написано правильно, но моб каким то образом отказываться преследовать по оси x+ , идет впритык по x- а в обратном направлении подзодит на радиус коллизии и останавливается... Как решить?
Я написал все точ в точ, но оно не работает!??!??!?? Моб просто стоит и все я изменял всяческий код, Godot у меня 4.1.4 стабильная версия, может это из за версии?
Вроде всё точь-в-точь делаю, а работает иначе. Если моба перепрыгнуть, он начинает убегать от меня, пока не разорвёт дистанцию детектора. В чём может быть ошибка?
Добрый день, очень хороший курс! Помогите пожалуйста, когда я создал моба по вашему скрипту он в минус по оси Х преследует нормально, а в плюс очень медленно
У кого моб движется только в одну сторону, проверьте как расположен относительно оси координат ваш основной персонаж, именно в собственном графике.(не Level а именно player). У себя я при создании его оказывается сдвинул. он должен быть по нулевым координатам.
Ребята если у вас не двигается монстр то смотрите внимательней как написали Player возможно в коде вы написали player с маленькой поэтому нечего он не ходит.
Два вопроса: 1. А почему мы переменные direction и player объявляем в внутри physics process, а не скажем в самом начале где все переменные? больше касается переменной direction, ибо переменную player я так понимаю можно объявить с @onready и все будет работать. И второй вопрос. У меня почему-то если подойти к мобу справа, то образуется некая дистанция которой моб придерживается т.е. он не подходит в плотную, а если подхожу я ,то моб отходит на эту дистанцию ... не понял от чего это зависит. А если подойти слева, то все нормально. Серва думал что может шейпами соприкасаются , но нет я их ставил и уже и шире - результат тот же.
По поводу переменной player резонный вопрос) просто тупанул) а насчет дистанции с мобом, тут скорее всего съехал центр одного из нодов, проверь position родительских нодов mobs или player нужно чтоб на 0 были
совместными усилиями нашли проблему , действительно имело место смещение корневой ноды, так что у автора зовётся mobs (у вас она может называться иначе) уж хз как я её сместить и в какой момент. но факт остаётся фактом. выставил все в 0 - проблема ушла. Спасибо телеграм сообществу канала
Привет) дальше по роликам я буду использовать animation player, как по мне это очень удобный инструмент для анимации чего угодно в движке, с его помощью можно анимировать не только спрайты типа персонажей и т.д., но и любые другие параметры. А animation tree в основном используют для переходов от одной анимации к другой, можно с его помощью настраивать state machine, тоже крутой инструмент, но я пока сам в нем еще разбираюсь) поэтому в этом проекте его скорее всего не будет
@@GameCrafter_GD я недавно усвоил С++ и понимаю такое понятие контантенация строк и другие мелочи, конечно тебе прям сильно на них заострять внимание не нужно, но новички потом столкнуться с проблемой как тот или иной концепт делает в программировании. А так мне все нравиться подача на хорошем уровне видно что хочешь всем объяснить многие нюансы движка.Просто отметь что делает нестандартный функционал концепта и этого хватит.
Я столкнулся с ошибкой при которой скелет шел в одну сторону, в итоге разобрался что во всем виноваты ноды в которые мы положили игрока и моба. Если вы столкнулись с такой же проблемой просто удалите их и отредактируйте в скрипте моба путь к сцене с игроком
Проверьте пожалуйста строку в функции physics process где var direction и так далее, в конце не забыли ли вы написать normalized()? Ну и в целом проверьте, может опечатка где)
@@GameCrafter_GD я буквально только что разобрался ))) не знаю как оно точно называется но перекрестие НОДА PLAYER было смещённое ))) и как я понял это изза него ))))))) Спасибо за ответ )))))))
курс просто огонь! Но у меня появилась проблема. Она заключается в том, что когда игрок выходит из зоны видимости, то моб всё равно движется, только намного медленнее и в рандомную сторону. С кодом всё в порядке, как исправить не знаю. Подскажи пожалуйста, что делать?
Привет.У меня такая проблема когда плейер прыгает,моб прыгает с ним и из-за этого плейер не может бежать в сторону моба P.S.такая проблема бывает только тогда когда моб догнал плейера с левой стороны,в остальных случаях все нормально
Вот у меня вопрос. Во время прыжка персонаж чуть чуть смещается. И выходит что голова за колизией. Как исправить? Или мб в других уроках есть. Или в этом
Скорее всего position не успевает приобрести какое либо значение перед тем как его вызывают, можно ему изначальное значение задать например Vector2.ZERO
Можно ли проверять кто вошёл в зону не по имени? Допустим у нас много сгенеренных скриптом объектов и надо проверить не вошел ли кто-то из них в зону, по имени здесь не получится.
а что делать если он за мной бежит но если я буду с левой стороны и побегу НА него то он начнет идти от меня при этом если я иду от него то он идет за мной
Всё что отлично до окончания видео. Я вроде все правильно в скрипте сделал, но по какой-то причине скелет ни в какую не хочет двигаться за мной вправо, вместо это он медленно продолжает двигаться в лево...
Подобная проблема встречалась у других, у них проблема была в смещенном центре нодов либо моба либо игрока, лучше всего заходите в группу телеграмм, покажите свои скрины и там все вместе разберемся)) и спасибо за отзыв
Чтобы скорректировать смещение центра нода игрока и моба проверть что у них Level -> Player(Mobs) -> Transform -> Position X = 0 и Y = 0. Тоже долго мучался пока не прочитал ответ про центр моба.
Добрового времени суток.Подскажите где я могу ошибиться.Ситуация такова делаю все по видео создал скелета и анимацию для него не запускал правда после этого когда видео закончилось пробую у себя и вижу что мой персонаж и скелет просто летают и не падают.
Доброго времени и вам) могу предположить что move and slide не добавили. Если дело в другом то нужно разбираться, заходите в группу в телеграмм и туда скрины с кодом скидывайте, там точно помогут)
@@GameCrafter_GD Спасибо за ответ.Но я уже просто с нуля переписал код, и больше ошибки нету.Я когда хотел скопировать физику в скелета нечайно удалил её и переписал вручную, скорее всего я просто неправильно переписал и из за этого у меня и персонаж не двигался и скелет.
Здарова,оченнь годные уроки!Я попробовал много раз понят годота,смотрел гайды но блин никто из них не работал,а оказываеться недавно изменили сам годот хд.Все понятно четко теперь годот начинает нравится.У меня вот такой вопрос:У меня есть свой моделки для игры,ну вот когда я включаю игру они ну бегают,но бегают со спины,так и мобы так и моделька игрока.Что можно сделать?Возможно ли проблема в том что оба модельки смотрят в одну сторону?
Здравствуйте, столкнулся с такой проблемой: ((Невозможно перетащить узлы, потому что скрипт 'skeleton.gd(*)' не используется в этой сцене.)) тоесть когда я перетаскиваю player на var player мне выдает эту ошибку (таймкод для понятности 11:55) сталкивался с этим в прошлых роликах, но подумал что можно избежать гет нодом, но когда я пишу get_node("Player") выдает ошибку, поэтому хочу понять как исправить ошибку с перетаскиванием
Видео очень познавательное , автору респект , но у меня почему-то не работает моб всё время бежит от меня , или влево , зависит от того как я поставлю координаты , но не как не могу настроить так чтобы он на меня бежал , и в любую сторону , подскажи пожалуйста
Пытаюсь задать переменную player, но не дает перетащить в скрипт ноду. Или как то не так делаю? Ошибка: Невозможно перетащить узлы, потому что скрипт 'skeleton.gd(*)' не используется в этой сцене.
@@GameCrafter_GD Я его добавил как сцену. Скрипт я писал в сцене скелета. Может нужно писать скрипт прямо в уровне на добавленной ноде ?) Вроде С видео сверился) попробовал задавать переменную playerPosition при соприкосновением с детектором, но ведёт себя не очень)
можете помочь ? у меня скрипт не работает то есть func _on_detector_body_entered(body): body.name == "players" : chase = true двоеточие пишет красным в скрипте а если без него то есть body.name == "players" chase = true то chase = true пишет красным что делать?
У меня такая проблема: Если поставить игрока и скелета в одну точку на сцене, то почему-то координаты игрока будут больше в 3-4 раза, чем у зомби, и это вообще на любой точке на сцене, и из за этого моб все время идет вправо :(
объясните, что сделал не так. Моб просто двигается в левую сторону extends CharacterBody2D var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") var chase = false var speed = 100 func _physics_process(delta): # Add the gravity. if not is_on_floor(): velocity.y += gravity * delta var player = $"../../Player/Player" var direction = (player.position - self.position).normalized() if chase == true: velocity.x = direction.x * speed else: velocity.x = 0 move_and_slide() func _on_detector_body_entered(body): if body.name == "Player": chase = true func _on_detector_body_exited(body): if body.name == "Player": chase = false
@@GameCrafter_GD забыл написать, что уже решил проблему. Тысячу раз проверил координаты, все были на нуле. Удалил коренной нод игрока и заного добавил и всё заработало как надо
Так я наверное пипец невнимательный но у меня скелет начинает идти только после того как я ВЫШЕЛ из зоны я не могу найти видимую ошибку в коде в чем проблема не знаю.. 🌀(да я очень невнимательный (я перепутал entered и exeted)
Привет, возникла проблема: когда вхожу в зону, где моб меня замечает, он бежит ко мне, все норм, но когда перепрыгиваю его он идёт в ту сторону, где я был, а там, где я сейчас - туда он не идёт.
Чтобы заработало нужно в том месте где ты инициализируешь переменную player когда перетаскиваешь из сцены для того чтобы присвоить значение нужно не ноду в которой хранится твой Player а сам CharacterBody2D
Присваивание значение осуществляется через один знак равно (=). У вас опечатка и поставлены два знака равно, что означает операцию сравнения, а не присваивания.
У меня проблема: В том что при попределённом растоянии враг перестоёт бежать на игрока а на оборот от него при этом агро зона дастоёт и когда враг бежит на игрок и от. Что делать?
@@GameCrafter_GD У меня та же проблема, с иерархией все хорошо. Но для моба центр player'а как у будто правее чем сам персонаж главный. Все проверила, в 2D настроено все корректно. Из-за этого когда персонаж слева от моба, тот бежит и останавливается на определенном расстоянии, а когда справа - то тот продолжает бежать.. Как думаете, в чем может быть проблема?
помогите, скрипт перепроверил 3 раза, всё точь в точь, но когда я запускаю проверить, меню работает, но когда нажимаю на любую кнопку сразу зависает и не отвечает
Привет, недавно решил заняться играми и попробовать сделать свою игру. Я всё сделал также как в уроке но моб по кд за мной бежит. Кто может с этим помочь, можете дать свой дс, что бы разобраться в этой проблеме.
я крч нашел эту ошибку if chase == true: velocity.x = direction.x * speed я написал вместо velosity.x = написал - и сидел час с мыслями что я сделал не так почему не работает видео приятные спасибо за контент
Забыл сохранить стерлась часть кода при попытке повторить враг бежит только в одном направлении(налево) код точно такой же как и на видео либо я опять что то упустил и слишком невнимательный 😵💫 Он именно когда я вхожу в его зону начинает бежать влево (помню было так раньше только наоборот вправо и оно как то само исправилось)
Проверь переменную direction, она должна быть (player.position - self.position).normalized() то есть если игрок будет справа от моба то direction будет 1 а если слева то -1. А потом velocity.x = speed * direction.x
Я пока новичок, но опьіт в геймдеве есть. Сделал некоторьіе улучшения - делюсь. 1. Я получаю позицию до персонажа только в случае если чейз уже тру. 2. Кому не нравится то что моб сразу перестает двигаться как только игрок вьіходит за триггр-зону, есть такое решение: Я добавил переменную var last_player_position = Vector2.ZERO которая принимает значение последней точки до игрока и остальное вьіглядит так: if chase == true: var direction = (player.position - self.position).normalized() #позиция до игрока last_player_position = player.position #трек последней позиции игрока print(last_player_position) #єто лог что б можно бьіло видеть записалась ли последняя позиция (можно удалить) velocity.x = direction.x * speed # ну и само движение elif last_player_position != Vector2.ZERO: #если чейз не тру и last_player_position не начальная var direction = (last_player_position - self.position).normalized() #двигаться в сторону последней позиции игрока velocity.x = direction.x * speed #само движение chase = false #перевести значение чейз в фолс move_and_slide() Дальше разберетесь сами
Может кто-нибудь знает в чём проблема: добавил моба на карту всё ок, а когда написал код начала вылетать ошибка var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") var chase = false var speed = 100 func _physics_process(delta): if not is_on_floor(): velocity.y += gravity * delta var player = $"../../Player/Player" var direction = (player.position - self.position).normalized() if chase == true: velocity.x = direction.x * speed else: velocity.x = 0 move_and_slide() func _on_detector_body_entered(body): if body.name == "Player": chase = true func _on_detector_body_exited(body): if body.name == "Player": chase = true
Можете скрин кода в группе тг скинуть, или подробнее описать проблему, обычно такие ошибки возникают когда переменная или параметр, в вашем случае position не успел получить данные. Ошибка может быть в опечатке или в очередности строк и так далее иногда даже лишний пробел играет роль
Такая же ошибка, все 10 раз перепроверил, даже номера строк совпадают. Причем когда пишешь свойства player не предлагают поле .position. Если убрать "player.position" - игра не крашится, но и преследования нет. UPD: Разобрался, похоже криво создалась переменная player. Удалил и снова присвоил значение. после этого заработало.
Помоги пожалуйста у меня ошибка E 0:00:03:0852 skeleton.tscn::GDScript_d2sy8:13 @ _physics_process(): Node not found: "Player/Player" (relative to "/root/Level/Skeleton"). Method/function failed. Returning: nullptr scene/main/node.cpp:1638 @ get_node() skeleton.tscn::GDScript_d2sy8:13 @ _physics_process() и желтый маркер на var direction = (player.position - self.position).normalized() как пофиксить вроде всё правильно
extends CharacterBody2D var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") var chase = false var speed = 100 func _physics_process(delta): # Add the gravity. if not is_on_floor(): velocity.y += gravity * delta var player = $"../../Player/Player" var direction = (player.position - self.position).normalized() if chase == true: velocity.x = direction.x * speed else: velocity.x = 0 move_and_slide() func _on_detector_body_entered(body): if body.name == "Player": chase = true func _on_detector_body_exited(body): if body.name == "Player": chase = false что только не делал, но как надо не хочет работать, скелетик стоит и не реагирует на приближение игрока.... когда убираю else: velocity.x = 0 то всё работает, но гравитация для скелета включается только при пересечении игроком поля детектора