Как сделать 3D Игру на Python с Нуля [ Часть #3 Текстуры ]
HTML-код
- Опубликовано: 2 окт 2024
- В этом уроке узнаете о том, как наложить текстуры в псевдо (ray casting) 3d игре, созданной, используя Python и Pygame.
Код:
github.com/Sta...
#standalonecoder
Ты удивительный!!! Не могу остановится смотреть твои видео по разработке этой игры! Давай еще минимум 10 хотя бы видео по этой игре, пожалуйста (чтобы был конкурент GTA3))))!) У тебя реально такие крутые видео что ради еще нескольких таких выпусков я готов тебе 500 рублей задонатить 😊
У меня чувак ходит через стены. Что я пропустил?
@@mopkoBbka Это в следующих уроках
@@mopkoBbka я это еще в первом уроке исправил. Хотелось хоть что-то сделать самому :D
Хз как он его там дальше делал, не дошел еще
Тупо проверяя, не является ли мой текущий х и у, к которым прибавился шаг по направлению луча (speed*abgle) в пределах блока со стеной, то есть среди координат в списке координат карты уровня. И только если не равны, то тогда уже шагаем вперед.
Типа такого
if keys[pygame.K_w]:
next_x = self.x + self.speed * cos_a
next_y = self.y + self.speed * sin_a
new_x = (next_x) // settings.TILE_SIZE * settings.TILE_SIZE
new_y = (next_y) // settings.TILE_SIZE * settings.TILE_SIZE
if [new_x, new_y] not in level1_map:
self.y = next_y
self.x = next_x
if keys[pygame.K_s]:
prev_x = self.x - self.speed * cos_a
prev_y = self.y - self.speed * sin_a
new_x = (prev_x) // settings.TILE_SIZE * settings.TILE_SIZE
new_y = (prev_y) // settings.TILE_SIZE * settings.TILE_SIZE
if [new_x, new_y] not in level1_map:
@@vladyslavstadnyk2762 3 месяца прошло. Я уже c# выучил
@@mopkoBbka аххахахах
Куда донатить? Хочу тебе задонатить! Ссылку на DonationAlerts в студию!
Чел, ты нереально крут👍👍👍👍
Ты реально крутой ютубер👍, а и ещё я только начинаю тебя смотреть и мне нравится! Лайк и подписка😀
Как хорошо что рекомендации Ютуб работают хорошо.
Ты просто ахуенный!!!!! Пожалуйста, не забрасывай делать эти уроки, братан!
Вообщем, нам осталось обязательно сделать:
1. Меню игры
2. Врагов
3. Оружие
4. Желательно увеличить размер Карты
5. Декоративные спрайты(лампочки, колонны, цветы, и т п)
6. Коллизия со стенами
7. И нужно попробовать сделать переход на следующую карту или уровень
И ещё можно попробовать сделать:
1. Зеркала
2. Стены разной высоты(это можно сделать в рэйкасте, но я хз как. Vectozavr как то сделал)
3. Мультиплеер(если pygame позволяет)
4. Текстура пола
И всё!
Пародия на Wolfenstein 3D готова :)
И ещё надо добавить аптечки и пик апы оружия.
И двери
Мультиплеер можно сделать, но трындец как сложно
Полностью согласен, хотелось бы повторить!
Black Fox Ну если хорошо изучить документацию, то ничего сложного. Плюс ко всему у меня есть навык работы с мультиплеером) На UE4 на C++ мультиплеер делал.
чьерт, чот problem возникать с импортированием пнг картинки стены, ПАМАГИТЕ!!!!! ПЛИИИИИИИИИЗ!!!!!!!!!
кста у меня так же
когда я запускаю игру, получаю ошибку: ValueError: subsurface rectangle outside surface area
такая же ошибка, подскажите как исправить.
Поздравляю с 300 подписок.
ПРОСТО БОМБА, но скажите кто знает где брать текстуры как у него?
Только вышло,
уже лайк!
Давай только с разработкой не заканчивай, попробуй сделать клон дума(там ещё куча чего сделать можно), будет очень интересно
+ и больше нечего сказать.
очень круто! не забрасывай!
У кого было FileNotFoundError: No such file or directory. У меня виндовс 10 и у меня сработало сперва нужно как он сказал создать папку и поставить туда фотку а потом скопировать место нахождение фото и написать. Вот у меня вот так получилось.
self.texture = pygame.image.load('D:\PycharmProjects\pythonProject1\img/1.png').convert()
Автор пж закрепи потому что у многих такая проблема.
все слеши в другую сторону разверни /img/1.png
3:25 выдаёт такую ошибку: ValueError: subsurface rectangle outside surface area
не знаю что делать
у меня такое же при запуске
3:30 почему у меня вместо sc стоит cs, sc показывает ошибку, а ещё вопрос, как ray_casting увидит переменную sc если в него не импортирован main, хотя переменная sc находится в main
во-во, то шо мне и надо. Не решил еще? (кстати автор забросил канал так шо можешь не спрашивать ничего у него)
помогите плз выдаёт ошибку UnboundLocalError: local variable 'texture_v' referenced before assignment ХОТЯ я даже копировал код с гитхаба всё под копирку но ничего не раюотает
у меня тоже самое :(
Чувак, умоляю!!! Сделай поворот персонаж не через кнопки, а через мышь. А то у меня почему то если мышь не двигать, всё так медленно... Как только шевелю мышь, фпс резко возрастает, и игра летает. Что бы нормально играть надо постоянно двигать мышь, а если бы повороты были через мышь, то игра бы летала)
Походу у тебя метод управления игрока стоит в цикле for event in pygame.event.get()
Вытащи его в основной цикл while и всё будет норм
очень классно.только жалко что мы не своей головой думаем.Но идея классная.
Очень круто го 4 часть
А какое разширение текстуры должно быть
1200 x 1200
У вас есть электронная почта, по которой вы можете мне помочь? это мой университетский диплом
пожалуйста помоги
почта указана в описании канала
Очень крутое видео, идеальное объяснение, вот я сам пока 2 часть не вышла, почитал про рэй кастинг, тоже отпимизировал, но вышло в 2-3 раза больше строк чем у тебя. Я еще сделал зеркало, насчёт него тоже было бы интересно увидеть видео, может я опять как-нибудь намудрил) Спасибо большое, очень жду продолжения!
Привет, очень нравится что ты делаешь!!!!! У меня возникла проблема когда верчу камеру иногда на определенном угле возникает ошибка цитирую : local variable 'texture_v' referenced before assignment
Гуглил говорит переменная не определена. Что с этим можно сделать?
Ура, 300 подписчиков)
Да лаааадно ты Серьезно?????? Текстуры в чистом коде после 3д чистым кодом ?)))) ООООООГГГГГООООНННЬЬЬЬ
Все твои видео супер!
Следующий шаг:
Сделать мультиплеер с socket :)
Столкнулся с проблемой. Фото некорректно отображаются. Резанно что-ли. Что делать?
ПИЦЕС!)))) ПИСЕЦ))))
МУЖИИИИКК ОТКУДА ТЫЫЫ ВЗЯЯЯЛСЯ))))))
Отличнейшие уроки, благодарю! Только один вопрос, не можешь подсказать как сделать текстурируемый пол и потолок? По факту принцип такой же как и у стены, но как отрисосывать горизонтальные поверхности/плоскости, не совсем понимаю.
Я нашел 2 бага, из-за первого падает игра. "если войти в нпс то игра начинает сильно проседать и игра падает". Из-за второго пол выглядит очень странно "если создать и войти в просторную комнату то на полу появляется чёрное пятно " В ТОП ЧТОБ @UCa4XUSrCpdpZSmQ-gm5Hbng УВИДЕЛ!!!
Кто такой UCa4XUSrCpdpZSmQ-gm5Hbng?
эт походу ютуб баганул я говорил про автора этого видео. ¯\_(ツ)_/¯
Черт мне как троешнику по матеше, будет трудно но полезно))))
лайк не глядя
Зделе все ошибка на создание 2 текстур об local variable 'texture_v' referenced before assisment
у меня почему-то не работает proj_height = min(int(PROJ_COEFF / depth), 2 * HEIGHT) с чем может быть связана проблема у стены фпс всегда падает до 17-20
смотрите дальше, там будет решение
@@StandaloneCoder там проблема была в другом файле но кое как её решил
что делать если 10 FPS?
Выброси компьютер в мусорку...
Делай пожалуйста медленнее я не успеваю
Все круто, но слушать этот голос долго очень сложно
Я знаю что видео уже год, но небо лучше сделать скайбоксом, пойду дальше смотреть
Поздравляю с 400! Выкладывай урок по спрайтам!!! А, и ещё коллизию надо сделать
UnboundLocalError: local variable 'texture_h' referenced before assignment как исправить этот ошибку??
У меня почти так-же
UnboundLocalError: local variable 'texture_v' referenced before assignment
subsurface rectangle outside surface area што делать
а ты попробуешь сделать игру baldi's basics на python с ray tracing'ом?
Подскажите пожалуйста я 2 месяца учу питон (с практикой),но не могу писать свой код, там базовые вещи могу конечно,но хочу улучшить результат что посоветуете?
потратьте время на решение задачек с проекта Эйлера или codewars, сформируется мышление и потом легче будет кодить
@@StandaloneCoder Спасибо большое.
Ну что, помогло это? Я бы тоже хотел улучшить логичечкое мышление, чтобы самому научиться писать что-то подобное
@@Danyaanl Да это круто помогает я решил много простых задач,4-5 средних, теперь по тихонько перехожу на сложные.
@@karendof2469 хорошо, тоже тогда попробую, спасибо за ответ
Ты самый мой лучший Python прогер
Согласен
Добавь прыжок и ускорение вместо выхода из игры на esc сделай меню , и добавь главное меню и меню выбора уровней в №3 части, и добавь в игру оружие и мультиплэйер в №4 части
Он столько не успеет сделать за одну серию
Этому ролику неделя, но нового видео нет. Это похоже на конец нашей человеческой расы...
Все будет, но чуть позже)
А какое разрешение нужно на небо ставить подскажите пожалуйста?????
Проблема: когда заходишь за пределы экрана выдается ошибка local variable texture_v referenced before assigment
У меня так же, и думаю так же у всех. Скорее всего, это поправит коллизия на следующем уроке
Привет, а чем такое псевдо 3д отличается от настоящего 3д? Тем что настоящее на основе библиотек типа open GL и directx?
у нас не используются трехмерные координаты (x, y, z), мы остаемся в 2d (x, y) и создаем иллюзию трехмерности. Из-за этого есть ряд ограничений: нет лестниц, вместо 3d моделей - спрайты и др.
У меня offset уходит в минус из за этого текстуры не накладываются. Все вроде правильно но хз что делать
Стена гнёться при подходе к ней и ошибка когда выхожу за карту
аааааааааааааааа сложно
Где взять текстуры как на видео?
Нарисуй или пройди по ссылке под описание
Очень классно
Про - дол - жай !!!!
у меня получилось сделать рейкастинг на си шарп, но после добавления текстур лагает сильно
Круто ждал этого
класс
🗽
Привет, друг, я бы хотел, чтобы ты мне помог.
Как я могу назначить игроку новую позицию?
У меня всё равно выдаёт ошибку TypeError: background() takes 1 positional argument but 3 were given
Все твои видео супер!
Братан, я так понял новый урок на следущей неделе?🤩 Надо скорее сделать коллизию, спрайты и оружие, не терпится доделать мою психбольницу) Уже все текстуры даже нарисовал) Поддерживаю того чувака mihlandota, готов задонатить ради следующего урока)
Ну как там с психбольницей?
@@4mada39 он сам походу в ней оказался)))
@@bocik2854 жалко пацана. Наверное от своих амбиций пострадал.
А скажите пожалуйста почему чем я ближе к стене тем текстура хуже?
пожалуйста ответьте мне кто нибудь
что делать если выскакивает ошибка:
Traceback (most recent call last):
File "main.py", line 24, in
drawing.world(player.pos, player.angle)
File "C:\Users\Таисия\Desktop\игра на python\drawing.py", line 18, in world
ray_casting(self.sc, player_pos, player_angle, self.texture)
File "C:\Users\Таисия\Desktop\игра на python
ay_casting.py", line 44, in ray_casting
wall_column = texture.subsurface(offset * TEXTURE_SCALE, 0, TEXTURE_SCALE, TEXTURE_HEIGHT)
ValueError: subsurface rectangle outside surface area
это означает, что прямоугольная область подповерхности выходит за границы текстуры, если не понятно, то просто возьмите разрешения текстур как в уроке
Спасибо, но я уже сделал
И это топ
Твои видео очень крутые
@Standalone Coder, крутые, вдохновляющие и мотивирующие видео, спасибо! А можно ли для raycasting-а как-то прикрутить numba? У меня не получилось и крашится каждый раз с ошибками о неп, вроде "Untyped global name 'mapping': cannot determine Numba type of " и похожими. Дело в том, что у меня FPS больше 25-ти не поднимается, а в одном из видео вы говорили про Numba.
Декораторы numba не так просто прикрутить, нужно изучить правила и нюансы построения функций, изложенные в их документации. Возможно я выложу видео на эту тему.
@@StandaloneCoder было бы невероятно здорово! И еще вы говорили, про ускорение от GPU, а не только на CPU, как сейчас. Для этого надо использовать OpenGL и ему подобное. Слышал, что в Numba вроде есть какие-то флаги, активация которых позволяет подключать GPU для вычислений, это так? И есть ли какая-то существенная разница между такой возможность у Numba и OpenGL, что лучше использовать и как правильно это делать? Можете осветить такой вопрос?
Для работы с графикой конечно надо использовать OpenGL, а вот просто с огромными вычислениями, то можно задействовать для этого GPU при помощи Numba
raycasting в примере из этого видео, если я правильно понял, использует только математические вычисления? Увеличится ли FPS, если применить Numba для этой функции? У меня сыпятся ошибки при использования декоратора... Подскажите, пожалуйста, как правильно использовать в этом случае?
Спасибо огромное, благодаря тебе написал первую игру
Что можно сделать в следующем уроке:
Текстурку пола!
Голова игрока должна смотреть вверх и вниз так же;
Управление головой не клавишами, а мышкой;
Что можно сделать в будущем:
Прыжок;
Ломать и ставить блоки (стены наверно должны быть поменьше их мы и будем ломать и ставить);
Квадратных мобов;
Посередине курсор в виде + (типа куда смотрим);
Вид от разных лиц.
Что можно сделать, человек выше уже написал. Что бы делать стены разной высоты нужно думоподобный движок делать...
Каких ещё квадратных Мобов? Майнкрафт на рэйкастинге не сделаешь
@@blockedchannel7032 А как же его сделать?)
Какой у тебя уровень программиста ? Ну то есть junior, middle или senior?
программирование это мое увлечение, не работа
спасибо за видео, всегда хотел сделать 3д игру:)
Почему display.flip, а не update?
Разве update скажется на производительности, если ему не указать поверхность для обновления?
Тяжело понять твои уроки, из за недостатка знаний в математике и самом питоне(а может ещё быстрый темп видео сказывается, не успеваешь понять одно, уже другое). Тем не менее, спрошу. Разве увеличение фпс не должно влиять на общую скорость игры? Где то я этот момент упустил...
Мне очень не хватает базы и математики, возможно смогу понять твои алгоритмы и весь матан с кучей пауз и долгим разбором(вероятнее всего, большинство просто копирует код, мало кто понимает ЧТО этот код делает)
Очень классные видео, все, что написано выше ни разу не косяки, просто я тупой)
Спасибо за видос :)
Разницы в производительности между .flip() и .update() нет, так в этом случае без разницы что использовать. Да, ФПС влияет на скорость игры, но чем больше запас по ФПС, тем больше у нас возможностей для внедрения разного рода интерактива, врагов, оружия и т. п. Желаю успехов в изучении!
О ГОСПОДИ, ТЫ ЛУЧШИЙ!!!!!!!!!!!
Почему на строке world_map[(i * TILE, j * TILE)] = 1 у меня ошибка " TypeError: 'set' object does not support item assignment"?
сделай world_map = {} и убери строку перед mini_map.add((i * MAP_TITLE, j * MAP_TITLE))
ur tutorials are great my friend
у меня wall_column = textures[texture].subsurface(offset * TEXTURE_SCALE, 0, TEXTURE_SCALE, TEXTURE_HEIGHT) пачемуто дает ошибку можете помочь?
Привет, скажи, пожалуйста, где ты python изучал?
изучал дома по книгам, многое гуглил
@@StandaloneCoder аа, спасибо
100 комент
Было бы интересно сделать зеркало в 4 части
Чёт небо медленное, а так всё супер!)))
Расскажи пж по подробней, что за что отвечает та или другая функция и как это заимосвязанно, поэксперементируй пж!
немного не понял, про какие именно функции рассказать?
@@StandaloneCoder ну например что будет если что то добавить и запустить прогу
@@StandaloneCoder (если кто-то задастся вопросом.)
Карл, он и так всё подробно и ясно объяснил! Куда ещё больше? Если так интересно, то гугли что да как.
@@fyfbif7744 можно случайно что-то пропустить //и ничо не получится и забить на программирование.
Ждём урока про спрайты
А возможно ли самому делать пиксельные текстуры, если да то где?
В Substance Designer
Перекомпилируй потом в asm с помошью библиотеки, тогда будет летать в 10 раз лудше!
Очень круто!
Это шедеврально!
Возникла такая проблема - на этапе добавления лучей стало сильно лагать. Ты с этим сталкивался? Если да, то скажи, как ее решить, пожалуйста
Если вопрос по первому уроку, то делай дальше, лаги уйдут когда начнем обнаруживать препятствия и отсекать лучи.
@@StandaloneCoder да, по первому, спасибо!
У меня неожиданная проблема с тем, чтобы найти бесшовную текстуру неба. Можно подсказку?
загугли "seamless sky texture"
@@StandaloneCoder спасибо!
круто!
Если увеличить ширину или высоту экрана, то с небом будет происходить что-то странное, я попробовал увеличить саму картинку неба следующим образом: ширина такая же, как и у экрана, а высота = пол высоты экрана. И вроде получилось, но небо иногда почему-то резко меняется (при движении игрока конечно же). Помоги мне, пожалуйста, я не знаю как решить эту проблему..
напиши мне на почту, и также отправь всю папку проекта
@@StandaloneCoder написал
Помоги, у меня пишет, типо нет каталога с текстурой. Папку назвал как у тебя - img, текстура называется p.png
Та строка выглядит так:
self.texture = pygame.image.load('img/p.png').convert()
И мне выдаёт ошибку, типо: «FileNotFoundError: No such file or directory»
Что делать? Буду благодарен!
Если что я тоже использую pycharm
Если у тебя мак, то тебе надо создать папку img в папке своего пользователя, и туда кидать текстуры. И всё будет норм
Fyfbif Спасибо!
@@fyfbif7744 слушай а у меня виндовс и дает та же самую ошибку
Когда будет двустволка, тогда будет doom
Здравствуйте у вас хороший контент, но у меня возник вопрос какого размера (в px) должен быть текстура?
1200 х 1200
@@ЖанЖенисканов-р9х Благодарю!
Ещё вопрос - какуда ты нажимаешь, что строка становится серой? К примеру, надпись "import pygame". Возможно, я плохо объяснил(
Это же обычное комментирование. Добавь # в начало строки.
@@Vadim-id1kv неа, это значит что данная хренотень не юзалась в коде.
@@nakidai Удобно. Не факт что запомню, потому что не работаю в питоне, но узнать было интересно)
Топ!)
Мне или кажется или кс 1.6 делали также? Просто очень похоже
не, кс будет на порядок продвинутой)
@@StandaloneCoder Doom почти так же делали, только не на питоне
У тебя на 3:25 переменная называются одинаково,а так спасибо за уроки
Это же специально сделано, чтоб не плодить переменных. Сначала создаём подповерхность, а потом ее же масштабируем
@@StandaloneCoder Понял,извиняюсь
Супер!!!!!!!!!!
Поздравляю тебя с 300 подписчиками на канале !!!
Благодарю!
Уже 400)