🔥 English Version: • Creating a DOOM (Wolfe... A detailed tutorial on creating from scratch a simple pseudo 3d game based on Ray casting technique. Especially for beginners to be interested in and create games in Python and Pygame.
Все несложно. У нас стена, это квадрат на карте, у которого есть только координаты левого верхнего угла, допустим (100, 100) и размер стороны квадрата 100. И, например, у нашего луча сейчас координаты (113, 159). Так вот, чтобы определить в каком квадрате наш луч, необходимо целочисленно поделить координаты луча и затем умножить их на размер квадрата. ( (113 // 100) * 100, (159 // 100) * 100 ) = (100, 100). То есть, мы попали в квадрат, и проверку на этом завершаем.
@@StandaloneCoder спасибо! Теперь всё ясно. Я просто упустил тот момент, что мы как бы рисуем луч не сразу целиком, а постепенно, и на каждом шаге проверяем находится ли он в квадрате. Я просто думал, что мы сразу целиком рисуем луч) И ещё раз прошу продолжать делать видео. Не забрасывайте это дело))
@@StandaloneCoder Здравствуйте, спасибо за урок, отлично объясняете, но у меня проблема такая вот,у меня все получилось отлично только вот лучи на экране остаются и когда я двигаюсь они тоже показывают направление, я про лучи которые показывают обзор, когда вы сделали графику от 2д до 3д то у вас они исчезли а у меня нет:(
@@sadboy8538 я хоть и не вовремя, но у меня такая проблема возникла, лучи, что должны сталкиваться со стенами и поворачивать вместе с игроком не поворачивается, сам игрок поворот делает спокойно, а лучи нет. Я, может быть, что-то пропустил, но я несколько раз перепроверил код, не могу найти причину.
Спасибо ОГРОМЕЙНЕШЕЕ за столь изложенный гайд! Не ожидал от себя, что разберусь полностью в такой проекции. Функция enumerate() конечно неплохая, но когда о ней ничего не знаешь, ловишь себя на мысли, что непонятно, что вообще она вытворяет в программе. Положа руку на сердце напишу, что следующий алгоритм наверное более понятный и дружелюбный для такой цели, как граббинг всех координат квадратов: world_map = [] y=0 for line in text_map: x=0 for sign in line: if sign == 'w': world_map +=[(x*tilesize, y*tilesize)] x += 1 y += 1
Офигеть вы крутой программист-математик! Вот зря я науки не учил... Вообще крутой специалист! Удачи и хорошего вам будущего и побольше такие видео выкладывайте!!! Вам бы профессором в университете быть + науки преподавать разные, помимо программирования!
огромное спасибо за ваш труд! единственная серия роликов в которой подробно и понято рассказано про ray casting, по вашим видео сделал шутер на C++ и библиотеке sfml
Пиздец! Да я бы в жизни сам не разобрался! И Тут даж бутылка бы не помогла... Теперь все понятно! Спасибо тебе огромное! Буду разбираться более конкретно что до как по твоему коду, а то с первого раза не все в голове уложилось. ))) Как сделаю игру обязательно скину тебе ;) P.S. Первый!))
Я вот бедолага-аналитик, изучал python для построения нейронных сетей и анализов, но всегда хотелось игры делать. Но не их готовых конструкторов, как юнити и анреал, а что бы самому понимать и прописывать физику и законы мироздания. Везде читаю - нужен только Си. питон - тормоз, игры на нем не лепят. И чо. мне язык что ли переучивать? Причем в ущерб математическим возможностям питона. нееее, я начал верить, что найдется спаситель - и покажет мне всю мощь математики и лучшего для нее языка программирования. ЧУВАК СПАСИБО, ТЫ ТОТ САМЫЙ СПАСИТЕЛЬ!!
Добрый день и спасибо большое за видео, недавно начал изучать питон и сделал 1 игру в виде галаги. На основе данных уроков сделаю 2 проект. Большое спасибо за ваш труд.
По поводу момента поворота линии в 5:35 Перемещение точки осуществляется путём нажатия W, A. S, D. И у многих затем появляются вопросы на подобии: "У меня линия постоянно смотрит вправо". Изменение поворота линии осуществляется путём нажатия кнопок со стрелочками .
Вот это уникальный контент. Лови подписку. Спасибо большое! Изи 10-100к подписчиков через полгода, если будешь такой контент заливать. Пайгейм модуль очень годный, однако по нему нет сложных туторов. Все туторы для новичков модуля. Если еще будешь делать серию, давай какой-нибудь РПГ, Тавер дефенс или что-нибудь в таком роде.
И наложение текстур интересно, и оптимизационная часть, сам бы 100 лайков поставил, если бы мог) Оптимизация, часом, не использованием формул нахождения персечения двух отрезков?
Мужик кайф. но делай просто угол направления = direction а вперед вбок и назад - это direction+90 direction-90 direction -180 имея угол - расчитай вектор горизонтальной скорости и вертикальной скорости - x += cos(direction) y += sin(direction) вроде так. и так ты и пулю кастовать можешь. не только шаг.. или ты об этом и сказал я хз) * что я имею ввиду -ОДНА формула для всех движений игрока :) зависящая от view_direction
не ну я подофигел кончено я не думал что в питоне хпхпхахаха это возможно))) респект. рендеринг конечно я понимаю что это основы основ но СУПЕРСКИ сделан ои подано
на моменте отрисовки лучей начинает сильно лагать, не могу понять с чем это связано, ноутбук далеко не кирпич. А уроки в целом отличные, узнал очень много нового p. s. посмотрел следующий ролик про оптимизацию и все понял, спасибо)
Отличный туториал, сам по нему делал игру, но я тут понял, что рейкастинг немного тупая технология, я хочу сказать что мы знает координаты игрока и его угол поворота и мы знаем всю карту, более того, карта состоит из квадратов, значит мы можем провести вектор от точки игрока до вершины и получить сразу ее координаты, так делать для каждого элемента карты, что в поле зрения и что виден. Затем получив лишь нижнюю точку вершины уже на экране можно получить верхнюю просто отразив её относительно горизонта, затем получить второе ребро точно также, затем залить это полигоном.
Я реализовал это, но ещё карта - это набор вершин. Это было чуточку труднее рейкастинга, но оно того стоит! Суть такова: Перемещаем систему координат к камере, поворачиваем систему координат на угол поворота камеры. находим проекции векторов от вершин к камере с экраном. На основе расстояния вычитываем размер. там где была проекция - строим отрезок заданного размера. добавляем вершины в стек и рисуем полигон. Вуаля! У меня на карте с +-300 вершинами 400 фпс. Это получается какой-то полигональный рейкастинг, но без рейкастинга.
11:00 Можно было инициализировать х и у за пределами цикла, который шёл в глубину, и рисовать линии также за его пределами: так в разы быстрее работает програма
Хорош чувак, пришлось правда на 0,75 смотреть, ибо кодишь быстро, я не успевал. А так, мути еще уроки (: P.S. Я бы посоветовал начать с саааамого начала с установки python, где качать и как, совсем для нубов (для меня) Ы
Ура ты сделал урок! Интересно будет узнать про текстурирование))) И у меня есть проблема. Что бы повернуть игрока мне каждый раз приходится тыкать на кнопку. Как сделать, что бы поворачивался если зажать, а не каждый раз тыкать?
В следующий раз если делаете серию видосов, размещайте плиз на главной картинке номер серии (части), а то когда репостишь ваши видосы например в вк, то там приходится помучиться, чтобы понять где какая час обучающего ролика.