Как сделать 3D Игру на Python с Нуля [ Часть #4 Спрайты ]

Поделиться
HTML-код
  • Опубликовано: 2 окт 2024
  • В этом видео узнаете о моем способе внедрения спрайтов в псевдо 3d игру (ray casting), написанной на Python и Pygame.
    Код:
    github.com/Sta...
    #standalonecoder

Комментарии • 142

  • @govdamikhaylo4183
    @govdamikhaylo4183 4 года назад +12

    Мне 13 лет я только 1 год учу питон, в тригонометри них не понимаю, но твои видео не просто розжыгают костёр они запускают атомной реактор моего интереса в изучении кодинга,

  • @mhdmodocluber9591
    @mhdmodocluber9591 4 года назад +31

    Есть баг: игра тормозит на секунду, если вплотную подойти к спрайту. У меня спрайт в виде лампы на потолке из Wolfenstein, и если через неё пройти иногда виснет. Хорошо бы в следующих уроках сделать свойства к каждому спрайту, будет ли он проходимым. Например, бочка не проходимая, а лампа проходимая.
    Добавлено:
    Тут стопудово нужны дополнительные свойства, такие как проходимое/не проходимое, тип спрайта: пик ап, декорация, враг. Но думаю для начала надо сделать со стенами коллизию.

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +8

      чтобы не было тормозов, в файле sprite_objects для вычисления proj_height используйте это:
      proj_height = min(int(PROJ_COEFF / distance_to_sprite * self.scale), 2 * HEIGHT)

    • @mhdmodocluber9591
      @mhdmodocluber9591 4 года назад +2

      Standalone Coder Спасибо огромное!

    • @Belui_Volk
      @Belui_Volk 3 года назад

      @@StandaloneCoder выдает ошибку

  • @fyfbif7744
    @fyfbif7744 4 года назад +9

    Огромное спасибо за спрайты)
    Остаётся коллизия, пик апы оружий, аптечки. Но всё это относится к теме коллизии спрайта. Правильно отметил чел mihlandota, что каждый спрайт будет иметь различные свойства. По сути пик ап - это спрайт, у которого проверяется коллизия с игроком, и если игрок Костромы спрайта, спрайт даёт команду прибавить жизни, оружия и т.п. игроку, а сам пик ап уничтожится.

  • @mhdmodocluber9591
    @mhdmodocluber9591 4 года назад +37

    БРАТАН КРАСАВА! Я ТАК ЗАРПЛАТЫ НЕ ЖДУ, КАК ТВОИХ РОЛИКОВ!!

  • @Cheatset
    @Cheatset 4 года назад +8

    Где можно достать такой же крутой мозг как у автора, только чтобы не слишком дорого?

  • @кточтотин
    @кточтотин 4 года назад +7

    я наблюдал все четыри стадии твоего канала
    1).змейка,2).как ты хвастаешься 3д игрой,3).как ты делаешь 3д фигуры и 4) как сделать 3д игру на питоне с нуля

  • @Алексей-ъ3л2х
    @Алексей-ъ3л2х 4 года назад +4

    Спасибо оргромное за новый ролик!!! Сказать, что это круто - ничего не сказать! Во время просмотра часто чуствовал себя идиотом... Но нет ничего непостижимого, а ваши ролики дико мотивируют! Заметил такой эффект: если подойти к стене совсем-совсем вплотную, то текстура расплывается вширину и в итоге проходишь сквозь стену. На текущем этапе разработки так должно быть или такое только у меня наблюдается? А если такой финт провернуть с наружней стеной, то за пределы карты не уходишь, но программа крашится с такой ошибкой:
    Traceback (most recent call last):
    File "main.py", line 26, in
    walls = ray_casting(player, drawing.textures)
    File "d:\Python\projects\3D-Python-game-Raycast-master\part4

    ay_casting.py", line 42, in ray_casting
    depth, offset, texture = (depth_v, yv, texture_v) if depth_v < depth_h else
    (depth_h, xh, texture_h)
    UnboundLocalError: local variable 'texture_h' referenced before assignment
    Кстати, проходить сквозь спрайт devil также, как сквозь стены не получается.

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      Благодарю за отзыв. В следующем ролике избавимся от этих недостатков

    • @mhdmodocluber9591
      @mhdmodocluber9591 4 года назад

      Так мы ещё коллизию не создали. Поэтому и расплывается и сквозь стену проходит

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      про коллизию ролик обязательно будет, сегодня только что тестировал её

    • @Алексей-ъ3л2х
      @Алексей-ъ3л2х 4 года назад +1

      @@StandaloneCoder подскажите, а возможно ли как-то применить multiprocessing к ray_casting() или бесполезно?

    • @StandaloneCoder
      @StandaloneCoder  4 года назад

      эффект есть, но довольно слабый, прибавка 5-10 кадров максимум

  • @TGrod
    @TGrod 4 года назад +9

    Очень круто! Продолжай в том же духе)) Ждём от тебя дум)

  • @wizard3374
    @wizard3374 4 года назад +12

    Очень круто! Надеюсь выйдет ещё одна часть

  • @РичардДелида
    @РичардДелида 4 года назад +7

    Скоро тысяча подписчиков будет)

  • @rayosorrow
    @rayosorrow 3 года назад +2

    Единственный спрайт, с которым мне комфортно работать, это с газированным напитком, а вычислять арктангенсы, чтобы разместить картинки НПС в игре, это задача не для слабонервных 🍻

  • @БейбалаГаджибеков
    @БейбалаГаджибеков 4 года назад +15

    Нечего не понял, но было интересно!!!

  • @Vitaliy-ct2wv
    @Vitaliy-ct2wv 4 года назад +3

    настолько круто, что можно усраться от восхищения!!! это просто полный армогидец восторга от контента!!! создайте канал в телеге, если не для себя так для нас ))

  • @whistheangell
    @whistheangell Год назад +1

    Что делать если в файле drawings в линии 26 пишет "ValueError: too many values to unpack"?

  • @Ivan-ee4pz
    @Ivan-ee4pz 2 года назад

    Очень круто, спасибо большое!

  • @serj5931
    @serj5931 Год назад +1

    там было устранение бага из прошлой части спс только я хз в чем тут было дело

  • @ToshibaMastr
    @ToshibaMastr 4 года назад +1

    пасиб за формулы по спрайтам

  • @rustamtermenusmack7165
    @rustamtermenusmack7165 4 года назад

    А этот движок может в динамическое освещение?
    Можешь добавить поддержку .obj
    Добавь зеркальные отражения!
    Лайк и подписка!

  • @IRDIgames
    @IRDIgames 7 месяцев назад

    картинка спрайта отдельный вид искуства

  • @aresont9372
    @aresont9372 4 года назад +2

    Урааааааааааааааааааааааааааааа!

  • @strexiz5652
    @strexiz5652 6 месяцев назад

    у меня такая проблема 'barrel': pygame.image.load('image\Sarrel.png').convert_alpha()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    pygame.error: No video mode has been set
    как ее решить?

  • @АртёмАбрамов-ы6ь
    @АртёмАбрамов-ы6ь 3 года назад +2

    Спасибо огромное.Я всегда любил программировать.Я обожаю тебя не только как программиста,но и как человека который любит мемасики.

  • @shirokagaricu1919
    @shirokagaricu1919 2 года назад +2

    TypeError: argument 1 must be pygame.Surface, not list выходит и весь даже скопировал уже весь код, печалька

    • @АлександрФевралев-в9п
      @АлександрФевралев-в9п 2 года назад

      У меня тоже, на какой платформе кодите?

    • @shirokagaricu1919
      @shirokagaricu1919 2 года назад

      @@АлександрФевралев-в9п visual studio code

    • @АлександрФевралев-в9п
      @АлександрФевралев-в9п 2 года назад

      @@shirokagaricu1919 у меня тоже там выскакивает, а в пайшарме все хорошо

    • @shirokagaricu1919
      @shirokagaricu1919 2 года назад

      @@АлександрФевралев-в9п надо как то на него переходит, но лень) привык к vsc

  • @КаналЗаблокирован-е4л

    Опа, спрайты. Надо бы реализовать двери, и переход на следующую карту))))

  • @iceone9342
    @iceone9342 4 года назад +1

    Очень круто!
    Я тоже пытаюсь сделать игру но сейчас у меня максимум в cmd получается... Что симулятор жизни. :)

  • @gamedev-9135
    @gamedev-9135 2 года назад

    У меня проблема, куда-то исчезла миникарта, что делать?

  • @LainnMapperYou
    @LainnMapperYou 4 года назад +2

    Oo шутер)

    • @si0era
      @si0era 4 года назад

      Ыыы

  • @Vitaliy-ct2wv
    @Vitaliy-ct2wv 4 года назад

    хочу продолжение сериала! =)

  • @Konb-idiot
    @Konb-idiot Год назад +1

    Что делать, если вылезает ошибка при нестатичном спрайте
    sprite = pg.transform.scale(self.object, (self.object, (proj_height, proj_height)))
    TypeError:argument 1 must be pygame.Surface, not list

    • @snou.888
      @snou.888 Год назад

      Это в координатах дело . SpriteObject(self.sprite_types['devil], False, (7.1, 2.1), -0.2, 0.7) поставь такие как у меня и оно заработает

    • @bug3900
      @bug3900 6 месяцев назад +1

      @@snou.888 спасибо тебе добрый человек, два дня думал что не так:)

  • @Maksitnumber8
    @Maksitnumber8 Год назад

    Что делать, у меня текстуры и спрайты с вырезанным фоном, а в игре они вырезанные места черные, хотя должны быть прозрачными

  • @govdamikhaylo4183
    @govdamikhaylo4183 4 года назад +1

    Есть ли какая-то достойная и интересная литература по тригонометри господа:)

  • @kirilltsaryk7100
    @kirilltsaryk7100 4 года назад

    А чего ты говоришь не своим голосом? А видео классное, лайк!!!

  • @sosi7550
    @sosi7550 4 года назад +2

    Я нашел 2 бага, из-за первого падает игра. "если войти в нпс то игра начинает сильно проседать и игра падает". Из-за второго пол крашнет игру "если создать и войти в просторную комнату то на полу появляется чёрное пятно(на старой версии) , а новой игра крашится" (перезалив)

    • @StandaloneCoder
      @StandaloneCoder  4 года назад

      напиши на почту поподробнее

    • @sosi7550
      @sosi7550 4 года назад

      @@StandaloneCoder а какая у тебя почта?

    • @StandaloneCoder
      @StandaloneCoder  4 года назад

      на главной странице канала, в разделе - о канале

    • @sosi7550
      @sosi7550 4 года назад

      @@StandaloneCoder короч вот: drive.google.com/file/d/1-O8ixQ6JDBfracRE4kjO8Wh-fB3MxPs8/view?usp=sharing и вот: drive.google.com/file/d/1ZWMfDakiXZm7m7j0fORBR7IbZwRPyZez/view?usp=sharing

  • @Vagrament
    @Vagrament 2 года назад

    Кто там алгебру и геометрию прогуливал? )

  • @smoke9238
    @smoke9238 4 года назад

    Оооооо да, погнали.

  • @1Sh0ckF0x1
    @1Sh0ckF0x1 2 года назад

    кто поможет со спрайтом у которого минимум 8 сторон??

  • @shalker_s_almazami
    @shalker_s_almazami 3 года назад

    2 пи = тау

  • @ruminaliev4471
    @ruminaliev4471 4 года назад

    Никогда не думал, что профильная математика пригодится...

  • @HIIKEWA
    @HIIKEWA Год назад

    🥲

  • @lordorbit
    @lordorbit 4 года назад +1

    Оооооо спасибо за новую серию!!

  • @koshakpoc2876
    @koshakpoc2876 2 года назад

    не знаю нужно здесь это но в pygame есть класс sprite и group

  • @ДокторМоро-е8в
    @ДокторМоро-е8в 3 года назад

    Глядя на то, как шарит автор - в голову лезет мысль, каким образом он это всё выучил или понял или вообще, как нужно обучаться чтобы так шарить? Потому что банальное повторение и долбёжка из книги не приближает меня к реальным знаниям и умениям=( помогите кто может

  • @iniuss20
    @iniuss20 4 года назад +1

    А где ты брал спрайты ?

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      я уже не помню, но погугли "спрайты doom"

  • @kirixoto
    @kirixoto 4 года назад +1

    Где такой голос взять?

  • @ДмитрийРассказов-я7г

    большое спасибо! всё начало получаться, но потом почему то пропала миникарта после проделанных изменений

  • @d1mple05
    @d1mple05 3 года назад

    Бром спс как насчёт того чтобы добавить спрайтам ИИ

  • @РобинзонКрузо-ч4к
    @РобинзонКрузо-ч4к 4 года назад +1

    Привет, не подскажешь, как увеличить скорость поворота игрока?

    • @andrax6547
      @andrax6547 4 года назад

      Посмотри лутше в коде там все розписано і поворот и движениє игрока

    • @StandaloneCoder
      @StandaloneCoder  4 года назад

      в файле player, где self.angle меняй значение 0.02 на большее

  • @BumatuHe
    @BumatuHe 2 года назад

    Если углы которые применяются в высислениях целые - можно зарание посчитать таблицы значений синусов косинусов и так далее и потом подставляль готовое значение из таблицы значений по идее это сильно ускорит вычисления

  • @alexdubkov6998
    @alexdubkov6998 4 года назад

    Это серьезный прорыв. Пора наделить «красавца» способностью двигаться, а себе заспаунить пистолет!

  • @alkashPotapuch
    @alkashPotapuch 2 года назад

    Бро спасибо, мне 11 лет как пк подключу сразу попытаюсь создать игру)

  • @Chebypashka
    @Chebypashka Год назад

    Вот и я, например, так жёстко срал.
    Показал туалетной двери свой оскал.
    Я Пробил своё дно. И полезло оно.
    Славное, сильное говно.
    Заплакал дракон. От разжигающей вони.
    В слезах утопил он дерьма последние стоны.
    И каждый, кто срал Так хотя бы разок.
    Любого говна уважает кусок.
    Испустил мой жопень последние томные вздохи.
    Разверзлись, как облака, мои булки и ноги.
    Дерьму потоки открыты теперь.
    И всё время, что срал, смотрел я на дверь.
    Тернистые густы лились, словно кровь.
    Дерьмища потоки и кала струи покрыли толчок, словно капли росы.
    На заре, когда солнце восходит на небо.
    Я сру и дристаю. В пределах туалета.
    :D

  • @Xxx_HA7u6ATOP_228_xxX
    @Xxx_HA7u6ATOP_228_xxX 4 года назад +1

    Есть идеи как добавить спрайты на карту?

    • @Xxx_HA7u6ATOP_228_xxX
      @Xxx_HA7u6ATOP_228_xxX 4 года назад

      И реально ли сделать локации выше/ниже как в думе 2

    • @blockedchannel7032
      @blockedchannel7032 4 года назад

      elisey bogdanov Реально

  • @РичардДелида
    @РичардДелида 4 года назад

    Можешь пожалуйста продолжать

  • @FeynFox
    @FeynFox 2 года назад

    Что если не париться так сильно со спрайтами и просто рисовать готовое изображение рассчитывая его размер?

  • @blockedchannel7032
    @blockedchannel7032 4 года назад +1

    Спасибо за новый урок, бро! Надо бы карту побольше сделать, я пробовал добавить больше символов в массив с картой, и больше строк, но когда я доходил до определённого места, игра крашалась. Не знаешь, как увеличить карту и что бы она не крашалась?

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      чтобы игра не падала, периметр карты должен быть замкнут, то есть стены расставляйте по всем границам

    • @blockedchannel7032
      @blockedchannel7032 4 года назад

      Standalone Coder У меня всё замкнуто, но всё равно в один момент происходит краш.

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      @@blockedchannel7032 вышли файлы игры мне на почту

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      попробуй в самом начале ray_casting функции объявить:
      def ray_casting(player, textures):
      texture_v, texture_h = '1', '1'

    • @blackfox4035
      @blackfox4035 4 года назад

      @@StandaloneCoder у меня этот баг был. Если переменная с разрешением текстур больше самих текстур, то произойдёт ошибка.

  • @mainfunction3055
    @mainfunction3055 4 года назад

    Большое спасибо! К этому голосу минуса кровостока фоном зайдут на ура))

  • @КадырАманов-р2г
    @КадырАманов-р2г 3 года назад

    Я конечно могу ошибаться но вы же вроде не используете мощности gpu или нет?

  • @ruminaliev4471
    @ruminaliev4471 4 года назад +1

    Интересно почему у меня в этой игре 5 фпс?

  • @кточтотин
    @кточтотин 4 года назад

    наконецто начал про спрайты говорить

  • @kirixoto
    @kirixoto 3 года назад

    я когда запускаю, то нет не спрайтов не стен

  • @lordjamesf6644
    @lordjamesf6644 4 года назад

    чел , а как добавить хп, аптечку там патроны?

  • @bogdandakhno
    @bogdandakhno 11 месяцев назад

    А где ты взял спрайты?

    • @energy_but0n4ik
      @energy_but0n4ik 6 месяцев назад

      В описании есть ссылка на код и все изображения

  • @general9893
    @general9893 4 года назад

    По идей под этом голосом стоит директор компании Тенсент

  • @koliqa_leo
    @koliqa_leo 4 года назад

    2:36 ну хз, bmp Ван лав

  • @pozzytronicadbulahmedd8074
    @pozzytronicadbulahmedd8074 4 года назад

    pezdato!!! Давай дальше!!!

  • @zirnn9631
    @zirnn9631 3 года назад

    очень крутой урок спасибо тебе большое

  • @Лама-и9ю
    @Лама-и9ю 4 года назад

    Что делать если мини карта пропала ?

  • @alexanderpadalka5708
    @alexanderpadalka5708 3 года назад

    🗽

  • @mhdmodocluber9591
    @mhdmodocluber9591 4 года назад

    Чекни почту, я тебе два бага прислал.

  • @hoh6587
    @hoh6587 4 года назад

    Добавь в игру музыку

  • @СергейКитин
    @СергейКитин 4 года назад

    ЛоГиЧнО

  • @DimPerch
    @DimPerch 4 года назад

    Топ!!!

  • @ЧибисовВиталий
    @ЧибисовВиталий 4 года назад

    Крууутяк!!!

  • @bionicman285
    @bionicman285 4 года назад

    Урааа! Новое видео 🎉

  • @smoke9238
    @smoke9238 4 года назад

    Кароче вроде бы у меня есть очень интересный совет , добавь величину поворота камеры вдоль продольной оси на каждом шаге(en.m.wikipedia.org/wiki/Aircraft_principal_axes#Longitudinal_axis_(roll) Здесь много лишних букв , но ща я сам объясню зачем это нужно)Если в кратце , то это нужно для того чтобы игрок мог смотреть на потолок чего не было например в том же думе.

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      благодарю, поизучаю на досуге

  • @Кто-то-ц8я
    @Кто-то-ц8я 4 года назад

    Спасибо за урок

  • @blackfox4035
    @blackfox4035 4 года назад

    Лайк не глядя

  • @X666X
    @X666X 4 года назад

    *звуки E1M1*

  • @nch2284
    @nch2284 4 года назад

    Круто!

  • @bloody1429
    @bloody1429 2 года назад

    не могу понять почему мой спрайт вращается вместе со мной, при обходе спрайта он поворачивается лицевой стороной ко мне из-за этого достаточно сложно осмотреть его полностью

  • @3PM_tema
    @3PM_tema Год назад

    что делать если а питоне пишет типо папки со значением спрайт ''devil' не существует

    • @Захар-ь8ц2п
      @Захар-ь8ц2п 6 месяцев назад +1

      Из папки вытащи, а папку удали, возможно Пайтон не видит папки, Пайтон видит файлы.

  • @severyss_fgi5924
    @severyss_fgi5924 4 года назад

    Молодец😀

  • @КостяЯхимович
    @КостяЯхимович 4 года назад

    Сколько учился программированию и где

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      учился самостоятельно дома, чтобы нормально освоить язык наверное ушло полгода, в день по 1-2 часа хотя бы надо заниматься эти полгода, много практиковался в решении задач - проект Эйлера, codewars, codeforces и т.п.

  • @viceversa3315
    @viceversa3315 4 года назад

    Здравсвуйте, делал игру по вашим туториалам, когда дошел до добавления текстур, столкнулся с ошибкой ValueError: subsurface rectangle outside surface area, думал что-то не правильно написал, но позже все перепроверил и все работало, не понимаю из-за чего возникает ошибка, можете как-то с этим помочь? Строки с ошибки:
    wall_column = textures[texture].subsurface(offset * TEXTURE_SCALE, 0, TEXTURE_SCALE, TEXTURE_HEIGHT)
    ray_casting(self.sc, player_pos, player_angle, self.textures)
    drawing.world(player.pos, player.angle)
    Заранее спасибо

    • @viceversa3315
      @viceversa3315 4 года назад +1

      Мда, ошибка была из-за того, что текстура в формате jpg

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      ошибка говорит о том, что размер подповерхности больше чем разрешение текстуры. Если все как в уроке, то надо брать текстуру разрешением 1200 х 1200

  • @ДавидС-ы3ч
    @ДавидС-ы3ч 4 года назад

    Есть идея, как сделать игру полноценной игрой, т.е. чтобы там можно было выиграть и проиграть: чтобы выиграть, нужно дойти, до определённого места, чтобы проиграть, нужно, чтобы ты увидел какого-то определённого спрайта и этот спрайт бы дошел до тебя раньше, чем ты выиграешь.

    • @StandaloneCoder
      @StandaloneCoder  4 года назад

      Я думаю лучше сделать обычных врагов, которых надо будет уничтожить

    • @ДавидС-ы3ч
      @ДавидС-ы3ч 4 года назад

      @@StandaloneCoder Но тогда надо по больше запариться)

  • @boomgg6902
    @boomgg6902 4 года назад +2

    Всьо круто, НОООООООО говори своим голосом, бо етот режет уши

  • @dednase
    @dednase 4 года назад

    а откуда ты брал спрайты?

    • @StandaloneCoder
      @StandaloneCoder  4 года назад

      погугли "sprite pack doom"

    • @dednase
      @dednase 3 года назад

      @@StandaloneCoder да, я находил довольно большие паки. но вот именно таких, как у тебя, не нашёл. пользуясь случаем, скажу тебе огромное спасибо за эти видео. благодаря тебе, я смог написать похожий движок на Си.

  • @rgdcode26
    @rgdcode26 Год назад

    у меня выдаёт три ошибки!!!
    in module drawing.world[walls+[obj.objectlocate(player,walls) for obj in sprites.list_of_object ошибка: [obj.objectlocate(player,walls)

    • @rgdcode26
      @rgdcode26 Год назад

      in listcomp drawing.world[walls+[obj.objectlocate(player,walls) for obj in sprites.list_of_object ошибка: [obj.objectlocate(player,walls)

    • @rgdcode26
      @rgdcode26 Год назад

      in objectlocate dx,dy=self.x - player.x,self.y-player.y AttributeError: 'SpriteObject' object has no attribute 'x'

  • @Даниил-ц4э5о
    @Даниил-ц4э5о 4 года назад

    Не сильно тормозит игра?

    • @StandaloneCoder
      @StandaloneCoder  4 года назад +1

      У меня ФПС в среднем держится в пределах 50 - 80 кадров в секунду

  • @cfifffff
    @cfifffff 2 года назад +1

    Я узнал больше чем в школе

  • @ZamirMal
    @ZamirMal 4 года назад

    Есть возможность игру перевести в exe или apk?

    • @_fox7512
      @_fox7512 4 года назад

      pyinstaller

    • @KotikPlay1234
      @KotikPlay1234 3 года назад

      @@_fox7512 ты прав pyinstaller

    • @Konb-idiot
      @Konb-idiot Год назад

      А apk это buildozer

  • @brawaga
    @brawaga 3 года назад

    6:36 «масшто́б» - новое слово в русском языке и в математике.

  • @ThA891
    @ThA891 4 года назад +2

    Чокнутый