24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

НЕОЖИДАННЫЙ Pygame тред №1

 Аноним 30/04/22 Суб 23:34:11 #1 №800023 
ПУГАЕМ.webm
Изучаем лучший движок современности! А заодно и программирование на Питоне, фреймворк SDL, и заодно оптимизацию этого добра, чтобы всё летало в 30 FPS на RTX 5095 Ti! Спрашиваем вопросы! Делимся своими шедеврами! Помогаем новичкам!
Аноним 01/05/22 Вск 00:43:45 #2 №800026 
Минер.png
Начну тред своим шедевральным поделием!
Аноним 01/05/22 Вск 00:44:46 #3 №800027 
И сразу вопросы к олдам. Допустим, я хочу эту >>800026 фигню в изометрической проекции. Это достигается какой-то трансформацией или изометрическими тайлами и соответствующей математикой?
Аноним 01/05/22 Вск 10:33:40 #4 №800041 
Не ну это слишком толсто.
Аноним 01/05/22 Вск 10:42:47 #5 №800042 
>>800027
https://www.youtube.com/watch?v=SteMRdOYrds
Аноним 01/05/22 Вск 12:47:30 #6 №800059 
Изом.png
>>800027

Нашел волшебную формулу: x - y, x + y, разбирая сорцы игр DaFluffyPotato.
Аноним 02/05/22 Пнд 02:07:15 #7 №800156 
Курсор.mp4
image.png
Научился отрисовывать курсор по координатам мыши. Тормозит, зараза, так как софтварный.
Аноним 02/05/22 Пнд 02:21:17 #8 №800157 
image.png
О, так всё намного проще было:

pygame.mouse.set_cursor(hotspot, cursor_surface)
Аноним 02/05/22 Пнд 02:23:02 #9 №800158 
>>800157
Так он еще и хардварный! Странно что ВолосатаяКартоха парится с софтварным.
Аноним 02/05/22 Пнд 12:22:10 #10 №800191 
1651483328942.png
>>800023 (OP)
> Pygame
А что насчёт python Kivy? Как он в сравнении с ОП-фреймворком?
Аноним 03/05/22 Втр 03:11:08 #11 №800316 
Ходим.mp4
И скроллим.mp4
Научился ходить и двигать карту.
Аноним 03/05/22 Втр 07:56:09 #12 №800320 
>>800316
И авто-камеру.
Аноним 03/05/22 Втр 08:00:26 #13 №800321 
>>800320
Аноним 03/05/22 Втр 08:55:56 #14 №800328 
Авто-камера.mp4
Аноним 03/05/22 Втр 11:55:44 #15 №800346 
1651568144246.png
>>800253
... и получаешь репорт за политоту.
Аноним 04/05/22 Срд 08:59:47 #16 №800412 
Редактор.png
Решил грузить карты в формате Tiled напрямую, так как ничего сверх того, что он умеет, мне пока не нужно.

Пока через либу PyTMX: https://github.com/bitcraft/PyTMX
Потом, может, свой лисапед сочиню.
Аноним 06/05/22 Птн 17:48:14 #17 №800730 
Спрайты.mp4
Потихоньку учимся выводить спрайты и бороться со странными координатами, которые им назначает Tiled. Например, почему совершенно квадратный спрайт отцентрованный в ячейке 1,1 имеет координаты (8.5, 9.5) - неизвестно, и как это выводить из размера тайла - очень большая загадка.
Аноним 07/05/22 Суб 16:57:47 #18 №800900 
Столкновения.mp4
Определяем столкновения. Но как реагировать на них - понятия не имею.

Вопрос к олдам. Как 2Д вектор скорости модифицировать, зная ректы игрока и стенки?
Аноним 08/05/22 Вск 10:03:14 #19 №800964 
>>800900
>Вопрос к олдам. Как 2Д вектор скорости модифицировать
В думе можно было разгоняться за счет стен т.к. они выталкивали игрока если в них упереться.
Аноним 08/05/22 Вск 10:49:53 #20 №800967 
>>800964

Я думаю запилить классическое скольжение вдоль стенки.
Аноним 08/05/22 Вск 10:58:42 #21 №800968 
Правда не знаю как.
Аноним 08/05/22 Вск 11:38:11 #22 №800970 
>>800023 (OP)
Зачем нужен pygame, если тебе больше 14 лет?
Можно же пользоваться нативным SDL/SMFL или библиотеками вроде raylib. Pygame хорош для обучения детей.
Аноним 08/05/22 Вск 13:44:04 #23 №800982 
>>800979
В современном C++ такого не должно быть, если грамотно использовать смарт пойнтеры. И компиляция на современных процессорах - доли секунды.
Аноним 08/05/22 Вск 13:50:16 #24 №800986 
2022-05-08 15-44-57 (online-video-cutter.com).mp4
>>800023 (OP)
Чё за хуйня со спрайтами? Кароч нарисовал чувачка с двигающимися ручками/ножками, когда двигаю влево/вправо местами спрайты идут по пизде и превращаются в пиксельное месиво, но сука при записи нихуя такого нет. Что это блять?
Аноним 08/05/22 Вск 15:42:41 #25 №800998 
>>800986

Возможно, блитишь поверх того, что в предыдущих кадрах наблитил? Во всяком случае, когда я столкнулся с чем-то подобным, дело было в этом. Фиксится обновлением поверхности каждый кадр: surface.fill('black')
Аноним 08/05/22 Вск 16:14:05 #26 №801006 
2022-05-08 18-11-52 (online-video-cutter.com).mp4
>>800998
>surface.fill('black')
Такое есть в коде.
Без него оно - ну, вот это вот...
Аноним 08/05/22 Вск 16:16:23 #27 №801007 
>>800998
Я думаю что может быть проблема в говновидяхе либо с методом вращения спрайтов. Хз.
Аноним 08/05/22 Вск 16:22:31 #28 №801009 
>>801006

Код давай тогда. Потестю на своей видяхе.
Аноним 08/05/22 Вск 17:18:57 #29 №801020 
2022-05-08 19-10-23 (online-video-cutter.com).mp4
>>801009
Та ни.
Аноним 08/05/22 Вск 19:16:24 #30 №801042 
>>801009
Как привязать цикл анимации к pygame.time.Clock() если вообще возможно? Вроде читал что-то такое...
Аноним 08/05/22 Вск 19:42:38 #31 №801050 
>>801042

Наверное как-то так:

time = pygame.time.get_ticks() / 1000
anim_frame = int(time * anim_fps % anim_frames)

Это внутри вайл лупа.

Но я пока анимацию не изучал, может есть что-то готовое.
Аноним 08/05/22 Вск 21:15:41 #32 №801068 
videoplayback (1).mp4
>>801050
Кароч как я понял проблема была в перемещении спрайта, я типа прибавлял к поз.х += 4 на каждом фрейме анимации, что заставляло пугаме перерисовывать спрайт каждое перемещение. Правильно перемещать спрайт нужно функцией пугаме move_ip(*вектор) которая смещает прямоугольник по вектору (который изменяешь в корневом цикле, в зависимости от клавиши) спрайта и вместе с ним уже отрисованный спрайт!
Аноним 08/05/22 Вск 21:46:38 #33 №801072 
Спидран.mp4
Пилим обработку столкновений. Пока со встроенными спидран-функциями. Но хотелось бы, конечно, без них.
Аноним 09/05/22 Пнд 15:16:40 #34 №801141 
Минковски.mp4
Минковски 2.mp4
В общем, напилил и отладил обработку столкновений и доволен. На 99% ничего сложного, принимаем игрока за точку, прямоглы коллайдеров ожиряем на размеры игрока, ищем пересечение луча и прямоугольника, возвращаем нормаль, отговариваем скорость этой нормалью и радуемся. Потом решаем гемор с пенетрацией в углах и спотыканием на стыках, что решается сортировкой коллизий по расстоянию до них и несколькими проверками на пересечение для разных скоростей (обычной, горизонтальной, вертикальной).
Аноним 09/05/22 Пнд 18:35:49 #35 №801170 
Оптимизон.mp4
Оптимизон завез.
Аноним 09/05/22 Пнд 22:45:41 #36 №801221 
>>801170
В чем оптимизон?
Аноним 09/05/22 Пнд 23:07:14 #37 №801222 
>>801221
Отсекаем ректы и не тратим время на определение столкновений с ними.

Без оптимизона:
hit_rects = move(player, velocity, collisions=all_rects)

С оптимизоном:
scanrect = player.rect.inflate(20, 20)
rects = [all_rects for i in scanrect.collidelistall(all_rects)]
hit_rects = move(player, velocity, collisions=rects)


Ограничение: плюссайз сканректа не может быть меньше скорости, иначе теряется свойство CCD и приобретаются спидраннерские фичи
.
Аноним 09/05/22 Пнд 23:25:25 #38 №801224 
>>801222
Разве на отсечение ненужных ректов не тратится примерно то же время, что и на столкновения?
Аноним 09/05/22 Пнд 23:38:29 #39 №801226 
>>801224
Неа. Это оптимизированная операция, исполняемая сишной либой.

Чтоб ты понимал:
5к ректов, без оптимизона, векторы: ~30 фпс
5к ректов, без оптимизона, тупли: ~60 фпс

5к ректов, с оптимизоном, векторы: ~600 фпс
5к ректов, с оптимизоном, тупли: ~600 фпс
Аноним 10/05/22 Втр 21:11:33 #40 №801325 
Столкновения 2.mp4
Запилил всё это в проект! К несчастью моему, спидраны всё равно повылазили в углах, но результату я всё равно мега рад!
Аноним 10/05/22 Втр 21:20:28 #41 №801328 
>>801325
Ого, выглядит мило. Это будет игра или просто тестишь движок?
Аноним 10/05/22 Втр 21:48:15 #42 №801330 
>>801328

Я впечатлился опенсорсными работами этого гения: https://dafluffypotato.itch.io/shifting-edge
Офигел, что на Питоне можно писать функционирующие и динамичные игры, решил попробовать.

Разобрал одну до винтиков, параллельно всё делаю по-своему, как мне нравится. Не все идёт гладко, но есть и успехи. Например, удалось запилить подгрузку карт из Tiled: >>800412 (уже и спрайты работают) и свою систему обработки столкновений выше.

В планах на будущее: прыжки, анимации, звуки, проджектайлы, частицы, тряска камеры. Потом, может, простой ИИ врагов.
Аноним 10/05/22 Втр 22:32:11 #43 №801335 
>>801325

Фух, нашел баг. Подлое -1e-15 вкралось там, где ожидалось ≥ 0. Расчехлил эпсилоны, и теперь всё идеально.
Аноним 13/05/22 Птн 17:52:24 #44 №801606 
2022-05-13 19-46-47 (online-video-cutter.com).mp4
бамп мёртвому треду
Аноним 13/05/22 Птн 18:49:14 #45 №801614 
>>801606

Как спрайты вращаешь?
Аноним 14/05/22 Суб 04:12:56 #46 №801707 
Анимация.mp4
Потихоньку научился в анимацию:
Аноним 15/05/22 Вск 02:48:54 #47 №801893 
Музыка.mp4
Играем музло на фоне.
Аноним 15/05/22 Вск 12:13:39 #48 №801921 
2022-05-15 14-07-26 (online-video-cutter.com).mp4
>>801614
Т Р И Г О Н О М Е Т Р И Я
Р
И
Г
О
Н
О
М
Е
Т
Р
И
Я

Мозг взрывается. Сейчас дошёл до того, что ищу вектор до точки, получаю угол между ним и вектором спрайта, поворачиваю спрайт на этот угол, двигаю спрайт по вектору до точки. С телом интереснее - смещаю центр по окружности вокруг центра головы, нахожу вектор между телом и головой, поворачиваю на угол вектора, перемещаю к голове.
Аноним 15/05/22 Вск 13:12:25 #49 №801928 
2022-05-15 15-09-24 (online-video-cutter.com).mp4
Накатываем гравитацию на обе части тела и пиздярики.
Аноним 16/05/22 Пнд 07:31:22 #50 №802073 
2022-05-16 09-28-24 (online-video-cutter.com).mp4
Аноним 16/05/22 Пнд 07:53:37 #51 №802074 
>>802073

Эт че, инверсная кинематика???
Аноним 16/05/22 Пнд 08:07:22 #52 №802076 
videoplayback (1).mp4
>>802074
Я даже слов таких не знал. Скелетная анимация думал.
Аноним 21/05/22 Суб 13:00:44 #53 №802725 
Таскаем.mp4
>>801921

Я зделол.

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

От дребезгов помогает старый советский лерп:
sprite_dir = normalize(lerp(mouse_dir, sprite_dir, delta_time))


Жалко, что нет функции, которая вращает спрайт вокруг пивота и возвращает спрайт и новый рект. Приходится вычисислять новый рект отдельно.
Аноним 21/05/22 Суб 14:44:33 #54 №802737 
>>802725
x = rcos(fi)
y = r
sin(fi)

Например "найти точку на окружности имея радиус и угол"?ну и центр окружности = пивот

Аноним 21/05/22 Суб 14:59:27 #55 №802738 
>>802737
Это о чем? И чем rcos и rsin от cos и sin отличаются?
Аноним 21/05/22 Суб 15:26:52 #56 №802739 
>>802738
r это радиус
там пропущен *
ты смещаешь центр ректа расположенный от пивота на расстоянии r на угол fi, где тут вычисление нового ректа?
Аноним 21/05/22 Суб 15:39:15 #57 №802740 
>>802739
А икс и игрек тут что?
Аноним 21/05/22 Суб 15:40:30 #58 №802741 
>>802740
то что изменяется при смещении, видимо
Аноним 21/05/22 Суб 16:31:06 #59 №802747 
>>802741
Короче, я всё понял, что ничего не понял.

Я сделяль через так:

rot_sprite = rotate(sprite, -degrees(angle))
rot_rect = rot_sprite.get_rect(center=pos - rotate(pivot, angle))
screen.blit(rot_sprite, rot_rect)
Аноним 21/05/22 Суб 16:39:21 #60 №802748 
>>802747
ну, конечная формула сложнее чем просто:
self.rect.centerx = pivot_x + r cos(-fi)
self.rect.centery = pivot_y + r
sin(-fi)

там всякие Пи и циферки в разные места надо сувать.
Аноним 21/05/22 Суб 16:40:10 #61 №802749 
>>802748
ебучая макака опять трёт звёздочки
Аноним 21/05/22 Суб 16:43:56 #62 №802750 
>>802749
А. Ну, в принципе, то же самое.
Аноним 21/05/22 Суб 16:52:32 #63 №802752 
>>802750
Ну, в любой момент можно менять радиус (r + i), рект остаётся, и то и другое - ситуативно, я полагаю.
Аноним 21/05/22 Суб 16:55:00 #64 №802753 
>>802752
сам r инициируется со спрайтом через:
self.r = math.sqrt((self.rect.width 2) + (self.rect.height 2)) // 2
что тоже полезно, если разные исходные размеры.
Аноним 21/05/22 Суб 16:55:51 #65 №802754 
>>802753
сука ^2
Аноним 21/05/22 Суб 17:20:27 #66 №802758 
>>802752
В моем варианте для этого двигается пивот.
Аноним 22/05/22 Вск 13:49:44 #67 №802864 
2022-05-22 15-46-22 (video-converter.com).webm
Каеф
https://tocit.ru/static/files/49b36e98dba0e5d4345d641225246ccfa15db62b8233f5f4a72cf221452a6231.pdf
Аноним 22/05/22 Вск 14:05:35 #68 №802867 
image.png
>>802864
Спс. В тему треда, в принципе. Но задачу "поумнеть" можно вычеркнуть. Нам умнеть дальше уже некуда. Поумнено до упора уже.
Аноним 22/05/22 Вск 14:14:16 #69 №802868 
image.png
>>802867
там Pygame начиная с 13 главы, результат вебмрил, +ёбаная гора ссылок, +весь код разжован, штош пойду картографировать Марс
Аноним 22/05/22 Вск 14:34:11 #70 №802873 
>>802868
Здорово. Я тоже скоро за партиклы возьмусь. Где-то после... этой секунды.
Аноним 22/05/22 Вск 16:07:03 #71 №802897 
Но сначала вопрос к олдам. Причем не по пайгейму, а скорее по архитектуре игровой.

Как простыню "for event in events" с обработкой миллиардов кнопок выделить из гейм лупа в отдельный класс, и желательно сделать так, чтобы инпут могли получать обрабатывать произвольные классы?
Аноним 22/05/22 Вск 16:15:20 #72 №802898 
Нравится система в Анриле, где есть понятия Axis и Action

Action происходит однократно, типа "игрок нажал кнопку прыжка".
Axis происходит каждый тик, типа "игрок двигается вертикально" и значение этой оси. Для кнопок это обычно 1.0/-1.0, а для геймпад стиков плавает между этими границами.

И можно назначать на них произвольные кнопки, даже больше одной.
Аноним 22/05/22 Вск 17:29:11 #73 №802907 
1.png
>>802897
events ИМХО годится только для KEYDOWN/KEYUP, типа открыть инвентарь, меню выхода и всё такое.
>и желательно сделать так, чтобы инпут могли получать обрабатывать произвольные классы
Заводишь метод класса и суёшь его в update().
Там в книге всё это есть.
Аноним 22/05/22 Вск 17:57:44 #74 №802916 
image.png
>>802907

Я пока решил запилить велосипед, а именно зоонаблюдателя:

>from input import handle_input, subscribe
>quit_requested = False

>def handle_quit():
> nonlocal quit_requested
> quit_requested = True

>subscribe(name='Quit', callback=handle_quit)
>while True:
> handle_input()
> if quit_requested: break

Внутри input.handle_input пока что происходит взлом жопы луп по эвентам и вызов коллбэков всех падпищеков.
Аноним 23/05/22 Пнд 18:30:32 #75 №803011 
Контролируем.mp4
УХАХА! Лисапед готов! В мире нет ничего, что не решалось бы сотней строк отборного говнокода на Питоне!

Теперь у меня свои Аксисы и Акшоны, круче чем в Анрилах этих ваших. Основная сложность в том, что в Пугейме это всё раскидано по разным сущностям, и собрать их в единый интерфейс довольно сложно.

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

Забиндил управление на мышь, клаву и геймпад. Всё работает. Даже кнопка следования камеры появилась.
Аноним 25/05/22 Срд 11:34:11 #76 №803234 
Система ввода.mp4
image.png
>>803011

Довёл до ума! Теперь эта штука переконфигурируется на лету через простой дедовский дикт или джейсон какими угодно действиями и коллбэками. Строго заданы только имена кнопок, и то можно переименовать. Без проблем могёт в many-to-one, one-to-many и даже many-to-many настройки, хот свап джойстика, инвертирование и масштабирование осей, и наверняка еще что-то грандиозное, что даже я сам еще не знаю.

Уечникам это покажется знакомым, думаю. Художественный фильм "Вдохновились".
Аноним 25/05/22 Срд 11:38:50 #77 №803235 
И заодно узнал две вещи о Пугайме, хорошую и плохую:

1) Для илиты, не добавляя в индекс документации, чтоб быдло не спалило, запилили pygame._sdl2.controller, который в тыщу разов лучше pygame.joystick. Сделан с мыслью о современных геймпадах, а не о джойпадах NES и палках от Atari 2600. Имеет адекватный интерфейс. Есть эвенты на все актуальные кнопки, включая тачпад дуалсенсовский. И последнее, но не менее важное: кнопки ди-пада, которых нет в joystick, где это называется hat и предлагается использовать голые оси без смс и регистрации нажатий и отпусканий. А вот под триггеры всё равно нет кнопок, только оси. Хаха, я здесь живу.жпг
https://www.pygame.org/docs/ref/sdl2_controller.html

2) Минималистичная либа, которую уже больше 20 лет пилят по принципу "лучше делать одну вещь хорошо, чем всё подряд плохо" местами может быть сырой и недописанной, фейля в простейших вещах. Например, крашится, если _sdl2 контроллер выключить или вытащить из юсб порта. Фиксится НЕиспользованием pygame.event.get() без аргументов. И pygame.event.clear() в конце цикла (на всякий пожарный). Это опенсорс, сынок, кушой.
Аноним 25/05/22 Срд 19:23:50 #78 №803293 
Voronoj.png
Я С Н О
С
Н
О
Аноним 25/05/22 Срд 19:45:30 #79 №803297 
>>803293
Чо пилишь?
Аноним 25/05/22 Срд 20:55:24 #80 №803309 
>>803297
Ну, песочек, хотелось бы. А-ля Oxygen Not Included, по крайней мере в голове образ чего-то такого. Докатился до уровня где понадобилось перемещение персонажа к точке выполнения задания и тут А* с Графами кааак налетели, Графы - вообще особый путь поехать кукухой, а у меня ни опыта, ни знаний, в итоге Вороного таки осилил, теперь буду улучшать алгоритм создания, всякие там сохранения мира, перемещения камеры, и потом уже по Графам взад-вперёд ездить до посинения.
Мимолётом ещё узнал, что блит всего экрана каждый цикл - ваще не вариант, и буду по-ходу ещё вникать в отдельные прорисовки того что подвигалось.
Аноним 25/05/22 Срд 20:57:11 #81 №803310 
>>803309
>блит всего экрана каждый цикл - ваще не вариант, и буду по-ходу ещё вникать в отдельные прорисовки того что подвигалось

Так ведь с перемещением камеры у тебя всё подвигалось, не?
Аноним 25/05/22 Срд 21:00:22 #82 №803311 
>>803310
Да, но не каждый цикл. Интерфейс тоже не подвигался. Кароч буду разбираться.
Аноним 25/05/22 Срд 23:26:08 #83 №803325 
Камера.mp4
Продолжаем продолжать. Итак, камеры.

Вытащил обработку сдвига в отдельный класс. Повесил забавы ради обработку осей мыши, чтобы делать ручной скрин шейк. Бдщщщ! Бдждвдждж! Буууум! Уже эпичней некуда, а ведь я еще звуковые эффекты и частицы не запилил.

Оказывается, если не скейлить ОБСом видосики с пиксель артом, то они весят даже меньше, чем даунскейл.
Аноним 26/05/22 Чтв 04:43:45 #84 №803333 
Частицы.mp4
Запилил частицу. Элементарно: спрайт с несколькими фреймами, совершающий self.kill()надзор в конце анимации. В минимуме содержит только позицию (и скролл в моем случае). Но, думаю, без вектора скорости смысла в партиклах мало.

Запускать и апдейтить частицы будет, наверное, эмиттер. Погнали.
Аноним 26/05/22 Чтв 05:14:44 #85 №803334 
Эмиттер.mp4
>>803333

Запилил эмиттер.
Аноним 26/05/22 Чтв 13:03:45 #86 №803354 
2022-05-26 14-53-23 (online-video-cutter.com) (1).mp4
Аноним 26/05/22 Чтв 16:23:30 #87 №803377 
>>803354

Хера майнкрафт.
Аноним 26/05/22 Чтв 22:24:36 #88 №803457 
Направленный эмиттер.mp4
>>803334

Направленные эмиттеры + гравитация.
Аноним 27/05/22 Птн 06:08:08 #89 №803499 
Эффект шагов.mp4
Ну, вроде работает мой партикловый спецэффект шагов. Осталось запилить к нему звуки шагов.
Аноним 27/05/22 Птн 09:04:48 #90 №803506 
Масштаб окна.mp4
Масштаб спрайтов.mp4
Проблема:
Всё это время я рендерил маленькую картинку и растягивал её в конце в N раз. Я подсмотрел это в сорцах ВолосатойКартохи. Так и не понял, почему он так сделал. Однако это весьма удобно, потому что всё рулится глобальным масштабом в настройках, можно задать какой хочется. Всё бы ничего, но движение спрайтов и камеры с шагом N пикселей заставляет вытекать глаза: когда камера замедляется, приближаясь к игроку, она начинает двигаться ступенчато. То же самое с медленно двигающимся игроком, его спрайт сильно дребезжит.

Решение:
Переделать логику масштабирования. Теперь я масштабирую тайлы и спрайты при подгрузке ассетов, а рендерю всегда большую картинку. Графоний улучшился в триллионы раз. Камера стала плавной, дрожание героя исчезло. Ну и всё по-прежнему рулится глобальным масштабом в настройках, и всё ещё можно задать какой хочется.

До и после:
Аноним 28/05/22 Суб 10:41:07 #91 №803686 
2022-05-28 12-30-32 (online-video-cutter.com).mp4
8b0c6659c87ea996122166da9e8f5ffd.jpg
096236fa8c39d62f8ccfa129e93bb21e.jpg
Аноним 28/05/22 Суб 10:55:17 #92 №803688 
2022-05-28 12-53-19 (online-video-cutter.com).mp4
Аноним 29/05/22 Вск 00:03:04 #93 №803774 
Всем зип файл, кто-нибудь пытался на пайгейме работать с 3д графикой? Как ощущения?
Аноним 29/05/22 Вск 00:36:19 #94 №803776 
image.png
>>803774

В Пугайме нет 3д графики. Придется подключать Пуопенжиэль и работать уже с ним, а Пугаем будет как прослойка для окна и т. п.
Аноним 30/05/22 Пнд 13:42:20 #95 №803987 
И получится ренпи... Где чтение ивентов с пигейма, а графика через openGl.
Аноним 31/05/22 Втр 22:19:59 #96 №804113 
16157413582320.jpg
Оп выложи код-то, любопытно как всё сделано на питоне.
Аноним 01/06/22 Срд 04:46:57 #97 №804133 
4SMn1ft.mp4
51wweYw.mp4
jNsgqwA.mp4
LWVgpEI.mp4
>>804113

У меня всё слишком сыро. Лучше сюда ходи: https://dafluffypotato.itch.io/
Аноним 01/06/22 Срд 05:23:26 #98 №804134 
Вертикальная сортировка.mp4
Новая сортировка.mp4
Переделал сортировку спрайтов с Y-Sort на псевдо-3D сортировку.
Аноним 01/06/22 Срд 06:41:35 #99 №804137 
Прыжки.mp4
Псевдопрыжки без запрыгивания и перепрыгивания.

Удивительно, насколько возможность прыгать всё усложняет.
Аноним 01/06/22 Срд 10:13:27 #100 №804146 
>>804137
То то на сони любят даже в ааа прыжки убрать.
Аноним 01/06/22 Срд 11:38:20 #101 №804156 
2022-06-01 13-31-41 (online-video-cutter.com).mp4
ух бля, песок сыпится
Аноним 01/06/22 Срд 12:44:27 #102 №804162 
Пол.mp4
Определяем тип пола. Кто угадает зачем?
Аноним 01/06/22 Срд 12:47:18 #103 №804163 
>>804156

Прикольная механика для какого-нибудь фарминга. Это с той книжки?
Аноним 01/06/22 Срд 13:37:09 #104 №804175 
2022-06-01 15-30-02 (online-video-cutter.com).mp4
>>804163
Это свои потуги.
Теперь буду каждому материалу своё поведение присваивать.
Ну и как ты там скейлишь на выводе думать. Потому что ФПС прямо пропорционален площади мира делёной на размер квадратов.
Аноним 01/06/22 Срд 13:51:29 #105 №804178 
8b0c6659c87ea996122166da9e8f5ffd.jpg
>>804175
И ещё надо как-то сузить цикл по квадратам которые надо отрисовывать, но в то же время как-то успевать их отрисовывать когда они близко от экрана/расположены на экране и вроде действия внутри квадратов должны происходить, но не отрисовываться до тех пор пока они не находятся в пределах около экрана, и уже два цикла получается - на действия и на отрисовку, и хз в какой жопе в итоге будет ФПС. Кароч ноды это пиздос.
Аноним 01/06/22 Срд 14:03:53 #106 №804181 
>>804175
>Ну и как ты там скейлишь на выводе думать. Потому что ФПС прямо пропорционален площади мира делёной на размер квадратов.

Скейлю спрайты при загрузке. Чтобы обойтись без pygame.transform.scale в геймлупе.

settings.py:
> GLOBAL_SCALE = 3
> UNIT_SIZE = TILE_SIZE * GLOBAL_SCALE
Аноним 01/06/22 Срд 14:32:02 #107 №804184 
>>804181
А, ну это не то, у меня скейл при инициализации класса спрайта сейчас, и мне скорее в лупе надо его делать, типа увеличенной проекции сурфасе мира на экран что-то. Сейчас у меня субсурфасе от сурфасе мира блитится на экран, поэтому я могу изменяя положение субсурфасе на сурфасе мира иммитировать перемещение камеры, значит мне надо скейлить субсурфасе перед тем как блитить на экран, в то время как
оригинальную площадь мира(в пикселях), оставив колличество квадратов, можно будет сократить. Я просто не разобрался ещё как именно её скейлить, вернее скейлю но фпс падает, что мне не нужно. Там код такой:
screen.blit(subsurface, (0,0), (и вот тут типа скейл, называется AREA, но этот скейл отрисовывает за экран в итоге тупо))
Как-то с этими циферками надо играться.
Аноним 01/06/22 Срд 14:34:31 #108 №804185 
>>804184
или даже эта DiArea тупо разположение на экране меняет, а не скейлит, и где-то в кваргах валяется заветное ключевое слово.
Аноним 01/06/22 Срд 15:33:05 #109 №804192 
videoplayback (11).mp4
>>804185
Кароч subsurface создаётся меньшего размера, потом через pygame.transform.scale создаётся другая растянутая из subsurface и новая блитится на экран, все координаты мыши и границы за которые нельзя уезжать - у меня, разумеется пошли по пизде, но фпс вроде отрастает. Настало время переписывать весь код.
Аноним 02/06/22 Чтв 15:43:30 #110 №804334 
Большая карта.mp4
vCf8zfO.gif
Попробовал загрузить большую карту...
Аноним 02/06/22 Чтв 19:11:05 #111 №804364 
>>804162
>Определяем тип пола. Кто угадает зачем?
Чтобы изменять скорость движения?

>>804334
В чём проблема? КВС мало?

Есть одна старая методика для 2D тайловых карт, которые рисуют бит блиттингом. Объединяй тайлы в чанки (группы), рисуй каждый чанк на отдельной текстуре, затем рисуй на экране чанки. Итого, если карта не обновляется, ты делаешь значительно меньше дроуколлов. Если карту нужно иногда обновлять, т.е. менять тайлы - после изменения тайла заново рисуешь текстуру чанка, в который входит этот тайл. Всё просто и скорость при этом большая. Если у тебя есть слои, их придётся рисовать в отдельные текстуры. Учитывая вид твоей графики, не забудь включить прозрачность у текстур чанков, иначе уголки будут перекрывать соседние чанки.

Если же у тебя не бит блиттинг, а 3D API, то теоретически можно комбинировать вершины в один массив и с разными материалами, но таким в чисто 2D движке позорно заниматься.

мимо проходил
Аноним 02/06/22 Чтв 19:20:53 #112 №804366 
>>804334
Вообще, я не знаю, как там оно под капотом устроено: используется ли встроенный рендерер SDL (с бит блиттингом)? Если так, то другого выбора как рендерить чанки в текстуру вроде и нет, SDL вроде не имеет встроенного механизма батчинга.

Просто тут недавно кто-то возмущался, зачем рендерить чанки в текстуру, в чём смысл. А на SDL другого пути нет, только если на OpenGL переезжать, но там ты теряешь контроль за пикселями, т.е. это уже не пиксель-перфект 2D получается...
Аноним 02/06/22 Чтв 19:25:34 #113 №804368 
>>804364
>Чтобы изменять скорость движения?

Пока что просто чтобы разный звук шагов проигрывать.
Аноним 02/06/22 Чтв 19:29:52 #114 №804371 
Чанкинг.mp4
>>804366
>>804364

Да, там блитинг. Чанкинг в процессе:

Зарылся с вычислениями ректов немного. У меня тайлы в мировых изометрических координатах, плюс прокрутка камеры. Сложно подобрать нужную процедуру для вычисления ректа.
Аноним 02/06/22 Чтв 21:20:44 #115 №804377 
Без чанков без цветомаски.mp4
Без чанков с цветомаской.mp4
Чанки без цветомаски.mp4
Чанки с цветомаской.mp4
Завёз оптимизон. Оказалось, что производительность при большом количестве дроуколлов в основном убивал альфа-канал.
Дешевле всего оказалось просто слить все 2500 тайлов в один гигачанк размером с карту.

Без чанков без цветомаски 90 фпс
Без чанков с цветомаской 250 фпс
Гигачанк без цветомаски 400 фпс
Гигачанк с цветомаской 410 фпс
Аноним 02/06/22 Чтв 22:29:12 #116 №804388 
>>804377
>альфа-канал
Да... Там вроде умножения постоянно производятся вместо прямого копирования пикселей. Или как минимум проверка каждого пикселя на наличие альфы < 1.0.

>цветомаски
А разве не достаточно отметить "прозрачный" цвет?
https://wiki.libsdl.org/SDL_SetColorKey

>2500 тайлов
Это не так уж много, 50x50.

Теперь попробуй сгенерировать/загрузить карту ещё больше)
Аноним 02/06/22 Чтв 22:52:17 #117 №804389 
image.png
>>804388

Да, я имел в виду прозрачный цвет.

>попробуй сгенерировать/загрузить карту ещё больше

В моем случае ничего не меняется. Чем больше чанки - тем выше производительность.

А вот с памятью проблема, вплоть до:
> pygame.error: Out of memory

Это на 500х500 (250 000 тайлов) и одном гигачанке. Но на 4 чанках работает, кушая 10 гигов оперативы.

Хотя, 50х50 в моем случае более чем помещается в экран с запасом, так что смысла в большей карте пока нет.
Аноним 02/06/22 Чтв 22:59:35 #118 №804390 
Чанки.jpg
Хоть я и зря потратил половину дня, тумкая над функцией чанкинга, вот вам мойНАШ алгоритм, вдруг вам полезней окажется:

https://pastebin.com/raw/66b4b1Kj

Делит сетку произвольного размера чанками произвольного размера. Если кратности нет, в конце будут чанки-обрезки. Порядок слева направо сверху вниз.
Аноним 03/06/22 Птн 00:12:41 #119 №804397 
8b0c6659c87ea996122166da9e8f5ffd.jpg
>>804390
я хз про все эти ваши чанки, но когда пилил свою матрицу, пришёл к списку list = [0,1,2,3,4,...,n] из которого высчитываю координаты на сетке через y = n//grid_width x = n%grid_width ебля с определением клетки внизу через клетка = list[(self.x)+(self.y*grid_width)] included, наверное какой-то тупль можно кидать как чанк в этот лист.
Аноним 03/06/22 Птн 08:02:40 #120 №804419 
>>804397

У тебя всё плохо. У меня-то статичная земля: склеил всё в один жипег и показывай. А тебе еще и обновлять надо динамически, чтобы песочек подбличивать в кучу.

Попробуй при каждом добавлении песочка регенерировать всю кучу и склеивать их в один большой сюрфейс.
Это скорее всего будет статтерить при добавлении песка. Но при бездействии и скролле будет видна максимальная теоретическая польза от чанкинга. И уже думать как оптимизировать кусок чанка в месте подсыпания.
Аноним 03/06/22 Птн 09:17:07 #121 №804425 
image.png
Вопрос к олдам. Как умножить только видимую часть спрайта с цветомаской?

Сейчас использую такое:

> image.fill(color, rect=None, special_flags=pygame.BLEND_RGBA_MULT)

Тут цветомаска тоже умножается, и перестаёт быть цветомаской. Пробовал все флаги.
Аноним 03/06/22 Птн 12:11:53 #122 №804445 
>>804425

Короче, решил через цикл по всем пикселям оригинала и восстановлением пикселей цветомаски на тинтованном изображении. Странно, что нет такой банальной функции.
Аноним 03/06/22 Птн 16:12:46 #123 №804513 
>>804419
Где ты прочитал, что у меня весь лист блитится на поверхность мира каждый цикл?
Аноним 03/06/22 Птн 17:01:43 #124 №804529 
image.png
>>804513

А как у тебя? А то вроде скроллишь всю бодягу, и фпс не меняется?
Аноним 03/06/22 Птн 17:51:04 #125 №804550 
2022-06-03 19-45-30 (online-video-cutter.com).mp4
>>804529
У меня мир из тех же чанков, только они объекты класса Node, наследник класса pygame.Surface, у каждого объекта свой контейнер спрайтов, который объект сам на себя блитит, и потом блитит себя на картинку мира, сейчас сделал начальную отрисовку всего мира и потом отрисовку изменений только во время нахождения на экране и пилю цикл изменения объектов и помещения в сет изменённых чтобы при пересечении сета экрана и сета изменённых происходила отрисовка. Пока что только под себя умеем перекидывать, после изменения функция возвращает в сет объектов в очереди на изменение None объект.
Аноним 03/06/22 Птн 17:56:09 #126 №804552 
>>804550
Наверное стоит написать FX8350
Аноним 03/06/22 Птн 18:02:40 #127 №804553 
>>804552
ну и OBS кушает проц ващет
Аноним 03/06/22 Птн 18:14:46 #128 №804555 
>>804550

Понял. Какой размер чанка-ноды? Меня чанки поменьше как-то не впечатлили по сравнению с одним гигачанком.
Аноним 03/06/22 Птн 18:26:54 #129 №804557 
>>804555
В пикселях 10х10, при инициализации каждому объекту роллится свой цвет, чтобы потом филл накидывать, в тестовом режиме. Всего их 12288 пока что. На экране 48 срезов листа по 64 объекта брошенных в сет.
Аноним 03/06/22 Птн 18:31:09 #130 №804559 
>>804557

Так один квадратик это одна нода что ли?
Аноним 03/06/22 Птн 18:40:31 #131 №804561 
8b0c6659c87ea996122166da9e8f5ffd.jpg
>>804559
Получается так.
Аноним 03/06/22 Птн 18:47:10 #132 №804566 
>>804561

А что содержит контейнер спрайтов ноды?
Ты уже финальную картинку мира скроллишь, я так понимаю?
Аноним 03/06/22 Птн 19:24:12 #133 №804573 
>>804566
Изначально ничего не содержит, по клику кидаю в контейнер спрайт, спрайт проваливается в контейнер нижней ноды, если нижняя занята - случайная слева или справа от нижней.
>Ты уже финальную картинку мира скроллишь, я так понимаю?
>>804550
>сейчас сделал начальную отрисовку всего мира
Перед запуском while. Потому что изначально сет изменённых пуст и прорисовывать нечего хоть с пересечением экрана, хоть без.

Аноним 03/06/22 Птн 19:45:01 #134 №804576 
>>804573

А, вот чего у тебя фепесы подросли. Сами сюрфейсы без альфы? Просто image.convert()? А то Пугейм никак не препятствует выстрелам себе в ногу. (И это хорошо!)
Аноним 03/06/22 Птн 20:35:46 #135 №804595 
>>804334
Вспомнился Song of Conquest который 2D спрайтовый и нещадно тормозит при скролинге карты на 1060, в то время как такие же спрайтовые герои 3 сносно идут на пека до 1го пентиума...
В чём магия оптимизации?
Аноним 03/06/22 Птн 20:46:53 #136 №804602 
>>804595
>Song of Conquest

Не играл, но судя по скринам, это полностью 3д игра с реалтаймовыми тенями, пбр графикой, пост-процессом, налогом на юнити и т. д. Пффф! Щенки.

То ли дело Пугайм, пердящий на 90 фпс, отрисовывая пару тысяч 2д спрайтов на чистом SDL. Вот это да, внушает уважение.
Аноним 03/06/22 Птн 21:00:52 #137 №804604 
>>804602
Ну как бы да, но выглядит это как пикселявые спрайты, особенно при приближении камеры. Предполагаю что там туман войны ещё какой-то ёба эффект который рендерится на всю карту сразу.
Аноним 03/06/22 Птн 21:13:55 #138 №804611 
>>804604

Реалтаймовые динамические тени на всю карту и 5 тыщ дроуколлов делают своё черное дело.
Аноним 03/06/22 Птн 22:28:07 #139 №804633 
>>804576
Сами сурфасе вообще без имаге, это же поверхность для отрисовки, на них self.fill(self.color) для того чтобы видеть как расположены сами ноды и как отрисовываются, было дело что пол экрана только заполнялось. Альфа там только для прозрачности, насколько я понимаю. Типа делаешь set_alpha и цвет альфы выпиливается при отрисовке. У меня так обводка на координатах возле курсора сделана, хотя я её не планировал, но она вылезла. У координат тоже своя сурфасе, которую надо филлить каждый цикл, чтобы циферки не сливались в гавно, но и летающий прямоугольник возле курсора - так себе смотрится, поэтому сетаешь альфу и pygame.SRCALPHA её глушишь. А спрайты загружаю с .convert_alpha(), на простом конверте альфа заполняет спрайтовые пустоты.
Аноним 03/06/22 Птн 22:42:26 #140 №804636 
>>804633
>convert_alpha

Во, вот эта хрень мне 50% перформанса убивала. Схитрил, загружая пнгшку и блитя её на сюрфейс розового цвета, которому ставил розовый цветом прозрачности при помощи set_colorkey. Но я все тайлы каждый кадр в гейм лупе рендерил.
Аноним 04/06/22 Суб 12:02:57 #141 №804707 
2022-06-04 13-54-33 (online-video-cutter.com).mp4
Без OBS ~140-180 если чо. Баги со всех сторон когда двигаешь экран с зажатой мышью, хз пока как фиксить и надо ли, скорее это баг прорисовки, потому что сквозь ноду всё равно проваливается песочек, добавил по краям стенки и пол чтобы индекс не выходил за пределы листа.
Аноним 04/06/22 Суб 12:17:58 #142 №804708 
2022-06-04 14-16-04 (online-video-cutter.com).mp4
>>804707
Аноним 04/06/22 Суб 20:12:46 #143 №804822 
2022-06-04 22-07-57 (online-video-cutter.com).mp4
Ух, бля!
Аноним 04/06/22 Суб 22:01:40 #144 №804863 
>>804708
>>804822
Магический песок, не иначе.
Аноним 05/06/22 Вск 14:34:51 #145 №804922 
>>804708

Исправил? В чем баг-то был?
Аноним 05/06/22 Вск 15:00:22 #146 №804940 
>>804822
А что ты делаешь? Клон The Powder Toy?
https://powdertoy.co.uk/
Кстати, песочница эта, оказывается, опенсурс:
https://github.com/The-Powder-Toy/The-Powder-Toy
Много лет назад игрался с ней, быстро надоело. А ведь некоторые целые компьютеры сооружали. Очень жаль что мир ограничен рамками экрана.

В общем, интересно, будешь ли ты делать электронику в своей песочнице, с полупроводниками и т.д.?
Аноним 05/06/22 Вск 16:11:39 #147 №804951 
>>804368
Аудиосопровождение постоянное на фоне? В таком случае звуки шагов будут неслышны.
Аноним 06/06/22 Пнд 08:26:28 #148 №805040 
>>804922
Там скорее всего в контейнер падает больше одного спрайта, а активность ноды выключается после переноса одного, полуфикс - замена постоянного закидывания при нажатии на мышь на одно действие по клику - event.type и MOUSEBUTTONDOWN перед click[0], либо целыйфикс - прописывание условий на повторную проверку осталось ли что-то в контейнере, по сути мне будет достаточно полуфикса.
>>804940 -> >>803309
Не знал про сабж.
>будешь ли ты делать электронику в своей песочнице
До этого ещё далеко, я не очень опытный программист.
Аноним 06/06/22 Пнд 08:42:56 #149 №805045 
>>805040
Ну, кстати можно тип контейнера сменить на переменную со значением между None и спрайтом, но там лежит много всякой фигни типа у None объекта нету имаге и ректа или ещё какая-нибудь срань в дальнейшем, так же у Пугейма есть своя группа одного спрайта, которая если получает спрайт выкидывает тот, который уже в ней есть, можно через неё, но там чтобы вызвать аргумент спрайта всё время надо обращаться к спрайту через group.sprites()[0].image например и в итоге строки по 200 символов, ну, и для того чтобы помещать несколько спрайтов разных сущностей надо будет пилить отдельный контейнер под каждую сущность. для песка, для персонажа, для проводов, etc.
Аноним 06/06/22 Пнд 09:36:56 #150 №805050 
>>805045
Почитал, там обращение к спрайту в одиночной группе через:
group.sprite
Отдельные контейнеры скорее всего надо будет запилить.
Аноним 06/06/22 Пнд 11:02:23 #151 №805059 
>>805040
>Не знал про сабж.
Поиграй. Там много интересных механик и физика сложная. Есть встроенная онлайн галерея пользовательских работ, которые можно в пару кликов скачать и попробовать. В ONI тоже есть физика газов и жидкостей, но в ONI оно как-то грубо выглядит. Может, из-за оптимизации, всё же размеры мира большие, или из-за крупного размера тайлов (в The Powder Toy буквально пиксели).

Но, как я понял, у тебя жанр совсем другой, ты хочешь симулятор колонии как в ONI? Тогда нужно фокусироваться на ботах, там отлаживать ИИ довольно сложно, наверное.
Аноним 06/06/22 Пнд 11:57:53 #152 №805063 
>>805059
>Поиграй
Я скачал, потыкал в разные стороны, не разобрался. Сложно позволить себе поиграть во что-то, когда поставил цель писать и надо думать над кодом.
>в ONI оно как-то грубо выглядит. Может, из-за оптимизации
Там обнову завезли, обещали экономию памяти на всех этапах игры. Хочется глянуть, но не могу себе позволить, опять же.
>симулятор колонии как в ONI
Да. Но конечная картина игры в голове постоянно меняется в разные стороны.
>ИИ довольно сложно, наверное
По сути весь ИИ там заключается в поиске пути от точки нахождения до точки задания, алгоритм А*, из-за этого и начал ковырять все эти ноды. Эмуляция выполнения задания на месте - скорее просто: если а - то покрути ручками и потом б.
Аноним 06/06/22 Пнд 20:15:04 #153 №805133 
Загрузка и выгрузка.mp4
Запилил загрузку и выгрузку карт.
Аноним 07/06/22 Втр 01:26:53 #154 №805167 
Материалы.mp4
Сделал материалы: контейнеры с настройками частиц и звуков различных физических поверхностей: травы, земли, камня, листвы, досок и т. д.

Назначил материалы тайлам пола, чтобы использовать при обработке шагов.
Аноним 09/06/22 Чтв 09:21:29 #155 №805848 
Размеры.mp4
Запилил физические размеры объектам, а также их отрисовку в виде псевдо-3д коробок.
Аноним 09/06/22 Чтв 09:35:09 #156 №805851 
ААББ.png
Ректы.png
Вопрос к олдам. Какой есть годный алгоритм для пересечения курсора/луча и изометрических AABB? Какая-нибудь дистанция Сосницкого, учитывающая размеры коробок и их перекрытие друг друга.

В Пугайме есть пересечение точки с ректами, но это отстой для изометрии, если именно экранные ректы трогать.
Аноним 09/06/22 Чтв 12:33:04 #157 №805867 
image.png
>>805851
Если у тебя каждый объект находится точно в клетке карты, и размеры коробки равны размеру клетки и отличаются только высотой, то может можно все свести к алгоритму Digital differential analyzer?
Аноним 10/06/22 Птн 10:50:21 #158 №806150 
Подсвечивание.mp4
Подсвечиваем объекты под мышью. Пока что на ректах.

>>805867

У меня произвольные AABB. Видимо, придется 3д рэй-бокс использовать.
Аноним 11/06/22 Суб 09:48:42 #159 №806327 
Без окна.mp4
С окном.mp4
Небольшой оптимизоний подсветки. Отсекаем все объекты, кроме тех, что попадают в небольшое окно вокруг курсора.

Не знаю зачем. Но при 5000+ объектов это заметно.
Аноним 11/06/22 Суб 13:10:26 #160 №806346 
Без оптимизона.mp4
С оптимизоном.mp4
Заодно добавил оптимизон коллизий из >>801170 в игру.
Аноним 11/06/22 Суб 13:38:14 #161 №806349 
Интерактируем.mp4
Девочка-с-пончиком.mp4
Новая веха в проекте!!! Интерактируем с объектами! Пока что просто убираем спрайты. Но уже такой-то геймплей на кончиках пальцев! Круче, чем в этих ваших дарксоулсах и зельдах. Ведь это уже почти полноценная функционирующая игра получается. Ура!

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

И господи, как же это приятно, когда просто добавляешь функцию на несколько строк, и всё просто и без задней мысли работает: объекты убираются, подсветка очищается, коллизии удаляются. Не надо с болью перепиливать половину кода. Бог-император архитектуры в треде!
Аноним 11/06/22 Суб 14:29:22 #162 №806365 
16462547915450.mp4
>>806349
Красава!
Аноним 11/06/22 Суб 22:38:27 #163 №806539 
>>806349
На днях буквально тыкал в ренпи ядро, и там был список функций пигейма залоченных. Может разлочить пошаманить тоже с чем-нибудь. Выглядит прикольно.
Аноним 12/06/22 Вск 14:46:37 #164 №806764 
>>806539

Осторожно! Так можно докопаться до скрытых [ВЫМАРАНО].
Материалы по объектам этого класса не должны быть доступны обычным пользователям.
Аноним 12/06/22 Вск 14:49:00 #165 №806765 
Рэйбокс.mp4
Напилил рэйбоксы.
Аноним 12/06/22 Вск 18:43:49 #166 №806820 
>>806765
А что насчёт ямок?
мимо копатель
Аноним 12/06/22 Вск 19:32:11 #167 №806833 
image.png
>>806820

Ямок?
Аноним 12/06/22 Вск 20:39:35 #168 №806856 
>>806833
Овраги там и канавы.
Аноним 12/06/22 Вск 21:28:17 #169 №806870 
>>806856

Есть примеры тайловых изометрических игр с ямами-оврагами?
Аноним 12/06/22 Вск 22:30:35 #170 №806887 
image.png
image.png
2022-06-13 00-27-28 (online-video-cutter.com).mp4
>>806870
лул
мимо-олд
симмулятор червепидора готов
Аноним 13/06/22 Пнд 05:29:32 #171 №806923 
>>806887
>пики 1 и 2

Это ж наклейка на полу с принтом ямы. Обман на доллары. В принципе, такое без проблем сделать можно запилить на текущем коде.
Аноним 13/06/22 Пнд 07:31:54 #172 №806927 
image.png
>>806923
Ну, вот тогда. Проект забросили в раннем доступе, вроде был какой-то конкурент получше.
Аноним 13/06/22 Пнд 07:44:01 #173 №806929 
выфафафывафывф.png
>>806927
Ну, или не забросили.
Аноним 13/06/22 Пнд 08:46:18 #174 №806932 
>>806927

Тут, как видишь, независимые плоские этажи и лестницы-телепорты между ними.

Лично мне на ум приходит Стронгхолд 1, там настоящий террейн с перепадами высот, но там какая-то йоба технология, а не тупо 2д массив с тайлами. Для меня это технологии 22 века.
Аноним 13/06/22 Пнд 10:47:47 #175 №806952 
>>806923
Экран компьютера - это двухмерная наклейка с принтом из пикселей. Обман на далары.
Аноним 13/06/22 Пнд 18:54:28 #176 №807150 
Рэйбокс курсора.mp4
Напилил наконец-то рэйбокс курсора.
Аноним 14/06/22 Втр 16:19:09 #177 №807310 
Интерактируем 2.mp4
>>807150

И присобачил к игре. Вот теперь совсем по-другому ощущается подсветка и интерактирование.
Аноним 14/06/22 Втр 16:22:33 #178 №807311 
2022-06-14 18-18-14 (online-video-cutter.com).mp4
Аноним 14/06/22 Втр 16:35:28 #179 №807314 
>>807311

Фигасе у тебя физониум! А что за зеленые квадратики? Дебаг?

Как делал гуй?
Аноним 14/06/22 Втр 16:35:46 #180 №807315 
Ну, лан. Без профилирования и с отрисовкой(каждый цикл) ректов только на экране, вместо ректов на всей карте. без ОБСа не могу записать
Аноним 14/06/22 Втр 16:36:14 #181 №807316 
2022-06-14 18-32-26 (online-video-cutter.com).mp4
>>807315
отклеилось
Аноним 14/06/22 Втр 16:40:20 #182 №807319 
>>807314
Зелёные - по которым можно пройти, они же путь.
GUI просто слой, который блитается на экран, на котором надписи, если мышь в пределах прямоугольников и кликает - делаем Тру-инструмент, если инструмент Тру, ну, ты понял.
Аноним 14/06/22 Втр 16:41:56 #183 №807320 
>>807319

Надо будет попробовать.
Аноним 14/06/22 Втр 16:47:56 #184 №807322 
image.png
>>807314
По поводу физики, кста, натыкался на Хабре на статью про Pymunk либу, вроде что-то делает, у меня движок не про это просто, мож кому пригодится.
Аноним 14/06/22 Втр 16:48:59 #185 №807323 
0e2aeeb01d6494ec13b3f3cdee034276.gif
>>807322
ля, копировал в пнг нах
Аноним 17/06/22 Птн 10:18:17 #186 №807768 
2022-06-17 12-14-18 (online-video-cutter.com).mp4
Аноним 17/06/22 Птн 13:19:01 #187 №807858 
2022-06-17 15-17-39 (online-video-cutter.com).mp4
>>807768
Аноним 17/06/22 Птн 23:07:56 #188 №808114 
>>807858

Поиск пути запилил? Какой алгоритм?
Аноним 18/06/22 Суб 07:36:53 #189 №808160 
>>808114
А*
>>808118
Кто живое?
Аноним 19/06/22 Вск 19:18:07 #190 №808443 
>>808402
Типа реалтайм изменение пути? На поиск уходит, пока что 0,001-0,002, один персонаж может и норм по ФПС выйдет, но несколько в дальнейшем сожрут проц.
Аноним 03/07/22 Вск 00:32:51 #191 №813347 
Меню.mp4
Масштабирование окна 1.png
Масштабирование окна 2.png
Запилил зачатки интерфейса и виджет нажимающейся кнопки.

Пока что успешно открываем и закрываем главное меню, а также закрываем игру.

Научился обрабатывать событие масштабирования окна игроком и перерисовывать интерфейс на лету.
Аноним 03/07/22 Вск 00:35:23 #192 №813350 
Смена языка.mp4
Меняем язык на лету.
Аноним 05/07/22 Втр 06:14:52 #193 №814074 
Настройки.mp4
Научился менять язык еще более на лету. Запилил экран всевозможных настроек.
Аноним 05/07/22 Втр 21:15:54 #194 №814248 
2022-07-05 22-47-18 (online-video-cutter.com).mp4
процы соснули
Аноним 05/07/22 Втр 21:21:36 #195 №814253 
>>814248

КВС>=1 всё еще реалтайм!
Аноним 05/07/22 Втр 21:52:34 #196 №814273 
цйуцйвыфвыфв.jpg
16220681548962.jpg
15415563370810.png
8b0c6659c87ea996122166da9e8f5ffd.jpg
>>814253
Реалтайм из прошлого десятилетия, а.к.а мой проц.
На самом деле - пилю физику, с вектором силы и массой, и камень об камень - отскакивает вверх(когда-нибудь и искрить будет), камень об песок - выталкивает из под себя или выталкивает крайний/ие в нижнем ряду, песок - скользит по диагонали обо всё. Функция на два типа материалов(твёрдые и полутвёрдые) занимает 250+ строк. На очереди жидкости, у них ещё и деление объёма по-хорошему надо делать. Ожидаемая длина функции=1кк. Полупуки по теме жидкостей в гугле - вообще ни о чём.
Аноним 06/07/22 Срд 02:25:12 #197 №814329 
>>814248
Лучшебы спиздили у разрабов ноиты движ. По какой-нибудь самосбор оче зашло бы.
Аноним 06/07/22 Срд 06:14:17 #198 №814343 
Главное меню.mp4
Запилил главное меню с рудиментарными настройками в игру.

Наверное, стоило всё сделать плоской простыней волшебных чисел с ректами и спрайтами-кнопками, но я психанул и навелосипедил недофреймворк с иерархическими виджетами, слотами, якорями, z сортировкой и прочим никому не нужным хламом. Причем сам, так как по всем запросам всплывало только программирование на гуи фреймворках, а не создание гуи систем с нуля.

Пока что это самый большой файл в проекте (213 строк), но, думаю, сильно больше будет, ведь пока есть только пять виджетов: базовый, текст-строка, кнопка-вызывалка, кнопка-листалка и бесполезный виджет-двачер, выполняющий одну функцию: он синий.
Аноним 06/07/22 Срд 07:11:48 #199 №814347 
ut-00007278.jpg
>>814329
Хз, пиратка у меня, на том же процэ, вылетала тупа. Мож кряк такой, а мож и оптимизация говна.
Аноним 06/07/22 Срд 12:35:59 #200 №814394 
>>814273
>Полупуки по теме жидкостей в гугле - вообще ни о чём

https://ru.wikipedia.org/wiki/Уравнения_Навье_—_Стокса
Аноним 06/07/22 Срд 16:34:07 #201 №814454 
15249298813250.webm
>>814394
Это четверть пука, максимум - треть.
Аноним 06/07/22 Срд 17:44:40 #202 №814473 
>>814273
https://gamedev.stackexchange.com/questions/58734/simulating-pressure-in-a-grid-based-liquid-simulation
http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/
https://www.google.com/search?q=Godot+Cellular+Automata+Liquid
Аноним 06/07/22 Срд 18:26:22 #203 №814484 
пфваыфвуыфв.png
>>814473
Ну, да, примерно такие мысли о написании.
Так же не знаю как запилить сообщающиеся сосуды(хотя скорее всего смогу, т.к. есть уже функции работающие по нижнему ряду и поиску всех заполненных нод ниже предложенной, и соответственно давление = сумма всех весов сверху, но там есть ещё заморочки с ситуациями пикрилл - где над/под нодой лежит нода не оказывающая давления, а за ней продолжается ряд давящих), и так же деление объёма на соседей.
Просто на предыдущей реализации физики векторов силы не было, а теперь они есть и вот уже почти начал писать, ленб только.
Аноним 07/07/22 Чтв 23:07:55 #204 №815180 
Инвентарь.mp4
Запилил большой черный мешок.
Аноним 08/07/22 Птн 00:50:17 #205 №815199 
>>815198

Нет: >>801330

Надо, конечно, спрайты свои сделать, да лень.
Аноним 08/07/22 Птн 04:11:43 #206 №815213 
Штабелирование.mp4
Штабелируем. Теперь все вещи завернуты в стаки. Каждый стак умеет брать число предметов, уменьшать его на число свободного места в стаке и возвращать остаток или 0 (если всё влезло). Добавляя N предметов в инвентарь, мы сначала тратим N в цикле фор по всем существующим стакам, затем в цикле while (N > 0) создаем новые стаки и тратим N на них.
Аноним 09/07/22 Суб 23:47:44 #207 №816153 
>>814484
Эм, с питоном же датасаентисты работают в том числе занимающиеся физикой. Что-то не верится что либы до сих пор не запилили где есть расчёт физ.процессов разных.
Аноним 10/07/22 Вск 07:56:33 #208 №816197 
>>816153
>>807322
Аноним 10/07/22 Вск 08:07:37 #209 №816199 
2022-07-10 10-00-52 (online-video-cutter.com).mp4
Но я сам пишу.
Аноним 10/07/22 Вск 11:37:59 #210 №816218 
16235898784030.png
Бамп годному треду.
Я вот тоже решил прототип прототипа клиента к своей онлайн дрочильне на pygame накидать, бэкенды тоже на питоне с pymunk правда. Сложно пиздец, я веб дев и с вебом вообще лады, а тут вообще голова пухнет, особенно от попыток организовать норм архитектуру-структуру кода и тысяч физики и геометрии, которых я забыл к хуям после универа. Сложно но интересно сука, весь тред прочитал взахлёб
Аноним 11/07/22 Пнд 05:50:55 #211 №816645 
>>816218

Вот книжка годная:
https://gameprogrammingpatterns.com/contents.html
Аноним 11/07/22 Пнд 11:04:47 #212 №816682 
>>816645
Она переведена кстати.
https://martalex.gitbooks.io/gameprogrammingpatterns/content/chapter-3/3.3-update-method.html
Аноним 11/07/22 Пнд 14:37:49 #213 №816765 
>>816722

А никак. Есть возможность написать свой велосипед с нуля.
Как ты его напишешь - такие возможности и будут, получается.
Аноним 11/07/22 Пнд 14:54:01 #214 №816782 
>>816777

Питоновский PyPI и есть: https://pypi.org/search/?q=pygame
Еще на сайте есть проекты разной степени качества: https://www.pygame.org/tags/all
Вот, например, целая ГУИ либа: https://www.pygame.org/project/4381
Аноним 11/07/22 Пнд 16:42:57 #215 №816815 
>>816645
Спасибо, пока только очевидные вещи встретил, но как то и интересно даже

>>816722
А там в юае надо разбираться, по мне так проще новый язык освоить чем с этими интерфейсами дрочиться ещё и при том что совсем не знаешь best practices. Ну энивей на пайгейме только прототип клиента конечно же, если вдруг получиться неплохо буду движок выбирать
Аноним 12/07/22 Втр 06:32:58 #216 №817052 
image.png
image.png
Запилил конфиги. Пока еще не определился, какой формат мне нравится больше.

Инишники аккуратны, но их надо парсить и валидировать. Встроена поддержка пользовательских настроек и значений по умолчанию.

Джейсон компактный и строгий, прямолинейно переводится в питоновские структуры. Специальных конфиг-функций нет. Впрочем, со словарями всё просто из коробки: "settings = defaults | overrides", а метод dict.get позволяет задать значение по умолчанию.
Аноним 12/07/22 Втр 07:32:28 #217 №817060 
>>817052
И сразу тихо спарсилась несуществующая кнопка 'Space JoyDown' (забыл разделитель |), а персонаж в игре не прыгает. Без валидации жопа.
Аноним 16/07/22 Суб 09:32:45 #218 №818672 
2022-07-16 11-21-36 (online-video-cutter.com).mp4
images.jpg
Оу, май!
Аноним 16/07/22 Суб 13:19:17 #219 №818699 
>>818672
Ебать крутяк
Аноним 16/07/22 Суб 16:09:45 #220 №818723 
пфыпаыфыаыфвфыв.png
8b0c6659c87ea996122166da9e8f5ffd.jpg
>>818699
стил нат енаф, бат...
Застрял на понимании откуда брать вещ-во для переноса вверх если в ряду с тайлом(1) есть тайл(2) с давлением сверху больше чем у тайла(1) и над тайлом(1) есть пустой/с водой тайл(3), которое даст сообщ-ся сосуды, и возможно даст понимание облегчения всей физики жидкости. сложна блять
Аноним 16/07/22 Суб 16:11:05 #221 №818725 
типа если брать из тайла(1) - оно упадёт обратно, тупа
Аноним 19/07/22 Втр 08:34:23 #222 №819997 
Области ввода.mp4
Допилил инпут понятием области действия: везде / игра / интерфейс. Теперь коллбэки можно подписывать областью действия. Если система настроена обрабатывать только интерфейсные вызовы, весь инпут игры, такой как движение, прыжки, взаимодействие и т. д., будет проигнорирован.

Так можно запретить герою ходить и интерактировать с предметами, когда кликаем по кнопкам в главном меню. Или разрешить только ходить, смотря на карту. Или позволить делать что угодно и при этом шариться в окошке инвентаря одновременно.

Также поменял поведение эскейпа на контекстное действие (пока только закрытие текущего окна). Вместо того, чтобы всегда открывать главменю.
Аноним 19/07/22 Втр 20:20:57 #223 №820283 
Окей, а с чего начать с этим пигеймом? Как вообще с библиотеками работать?
Аноним 19/07/22 Втр 20:34:34 #224 №820291 
>>820283
>с чего начать
С документации. https://www.pygame.org/docs/
https://www.pygame.org/wiki/GettingStarted

>Как вообще с библиотеками работать?
Лол, ну как с любыми модулями питона, нет?

мимо щупал питон на уровне hello world
Аноним 19/07/22 Втр 20:46:51 #225 №820312 
>>820291
>Лол, ну как с любыми модулями питона, нет?
А как с любыми другими модулями питона работать?

Я просто в питоне не особо понимаю, но вижу большой интерес. Ладненько, завтра попробую что нибудь сделать.
За документацию спасибо!
Аноним 19/07/22 Втр 21:07:44 #226 №820336 
>>820283

Пайгейм это сторонний питоний модуль. Сторонние модули устанавливаются через командную строку программой pip:

> pip install pygame

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

Попробуй этот тутор:
https://www.youtube.com/watch?v=QU1pPzEGrqw


>>820312

А, тебе в целом интродакшн в Питон нужен? Тогда сюда ходи:

https://www.coursera.org/learn/interactive-python-1
https://www.coursera.org/learn/interactive-python-2

Это курс, преподающий Питон через геймдев. Они используют Пайгейм-подобный фреймворк.
Аноним 19/07/22 Втр 21:24:11 #227 №820351 
>>820312
Не надо pygame, он слишком низкоуровневый. По сути позволяет только создавать окно, ловить события мыши и выводить картинки по заданным координатам. Попробуй Arcade, Pyxel, Ursina engine (обёртка над Panda 3D) - там есть игровые сущности.
Аноним 20/07/22 Срд 13:45:22 #228 №820574 
00.png
>>820351
Аркадий привлёк внимание.
>По сути позволяет только создавать окно
Там есть пиксельаррай и класс вектор с горой методов.
Можно сочетать, потому что у Аркадия в сравнении с Пугеймом честно написаны плюсы и минусы друг против друга. Главное чтобы х, у, и сходились.
Аноним 23/07/22 Суб 11:48:53 #229 №821852 
Старая рамка.png
Новая рамка.png
Обнаружил, что мой метод рисования рамочки вокруг игрового окна съедает 25% фпс. Переделал всё на апдейт частичного ректа по центру экрана после изначальной заливки цветом. Не то чтобы рамочка вообще была нужна, но как-то уюта добавляет, пусть будет.
Аноним 24/07/22 Вск 17:12:37 #230 №822533 
Журнал.mp4
У любой конечной игры должна быть какая-то цель. И наверное эту цель хорошо бы знать. А для этого лучше всего подходит что? Правильно! Повествование через окружение и нарративный дизайн.

Но я сделал старый дедовский журнал. А именно простенькую систему заданий и виджет журнала. Пока окно не умеет реагировать на клики и обновляться, но основа для интереснейших квестов уже видна. Осталось понять, как бы получше запилить проверки и продвижение по заданиям, чтобы можно было их завершать и проваливать.
Аноним 24/07/22 Вск 20:14:11 #231 №822613 
Выбор заданий.mp4
>>822533
Добавил таки базовый функционал в окно журнала. Внимание, спойлеры эндгейма!
Аноним 24/07/22 Вск 20:22:58 #232 №822618 
>>822613
Квесты - зарыться под землю, притворится деревом, вырастить из куста аниме девочку.
Аноним 24/07/22 Вск 21:43:31 #233 №822685 
>>822618
Вы приняты
Аноним 25/07/22 Пнд 10:51:30 #234 №822818 
Задания.mp4
Выполняем задания!
Аноним 26/07/22 Втр 16:23:01 #235 №823531 
изображение.png
изображение.png
изображение.png
изображение.png
>>820336
>https://www.youtube.com/watch?v=QU1pPzEGrqw
Вот у чувака в самом начале всего 3 файла есть, он открывает main и у него открывается окно с Pygame, а у меня откроется и за долю секунды закроется сразу. Что я делаю не так?

У меня 1 в 1 как у него все, я списал. Все 3 файла в одной папке лежат.

Аноним 26/07/22 Втр 16:30:25 #236 №823534 
изображение.png
изображение.png
А вот такое просто окно запускается, а как у него - нету. Что за дела
Аноним 26/07/22 Втр 16:32:58 #237 №823537 
изображение.png
>>823531
Отбой, получилось починить - я двоеточие забыл поставить в начале класса.
Аноним 26/07/22 Втр 16:33:49 #238 №823538 
Может подскажите какой нибудь текстовый редактор который отлавливает такие синтаксические ошибки? Или таких не бывает? Я сейчас ATOM юзаю.
Аноним 26/07/22 Втр 16:51:04 #239 №823545 
>>823538

Я использую PyCharm Community от JetBrains:
https://www.jetbrains.com/pycharm/download/
Офигенно удобная и быстрая IDE, самое то для игрового проекта с кучей файлов.


Но если хочешь что-то полегче, можешь попробовать редактор Visual Studio Code от Microsoft. Не путать с Visual Studio, неподъемной неповоротливой IDE.
https://code.visualstudio.com/

И то, и другое бесплатны и кроссплатформенны. Рекомендую заменить ATOM на VSCode в любом случае, даже если PyCharm будешь ставить.
Аноним 26/07/22 Втр 17:03:02 #240 №823550 
>>823537
>>823538
Ты чё совсем? Запускай код из командной строки, а не кликом по иконке. Так у тебя будет время прочитать ошибку в терминале.

Ну и в глобальное окружение пакеты не рекомендуется ставить - используй virtual environment.
Аноним 26/07/22 Втр 17:05:15 #241 №823552 
>>823550
>Ты чё совсем? Запускай код из командной строки, а не кликом по иконке. Так у тебя будет время прочитать ошибку в терминале.
Ну да, ради ошибки наверное стоит, но так то кликом быстрее и удобнее чем через терминал. У меня 1 монитор, и лишнее окно держать не очень хочется.

>Ну и в глобальное окружение пакеты не рекомендуется ставить - используй virtual environment.
Пакеты это ты про pygame ? Ну уже поздно, а так да, затупил, у меня есть виртуалка с линуксом.
Аноним 26/07/22 Втр 17:10:40 #242 №823554 
>>823552
>У меня 1 монитор, и лишнее окно держать не очень хочется.
А лишнее окно проводника держать хочется? Как ты отлаживать код будешь без терминала? В VS Code он встроенный в основное окно, кстати.

>Ну уже поздно, а так да, затупил, у меня есть виртуалка с линуксом.
Я про https://docs.python.org/3/tutorial/venv.html
Аноним 26/07/22 Втр 21:06:19 #243 №823656 
>>823554
Знаешь, пожалуй ты прав, стоит сразу по нормальному учиться делать.
А если в винде, то что лучше использовать - повер шелл или простую цмд?

Аноним 26/07/22 Втр 21:32:25 #244 №823659 
изображение.png
>>823554
Слушай, я вот создал виртуальное окружение, установил туда Pygame. А куда кидать мои готовые файлики с игрой? Прямо в корень каталога этого окруждения или в новую папку для удобства?

И я правильно понял что алгоритм работы окружения такой: запускаю активирующий скрипт в командной строке, запускаю свою игру, потом запускаю деактивирующий скрипт. Правильно? Если я запущу сразу свою игру без запуска скрипта, то она запустится не в моем виртуальном окружении?
Аноним 27/07/22 Срд 09:49:33 #245 №823806 
image.png
>>823659

Использую подобную структуру:
Аноним 01/08/22 Пнд 03:48:50 #246 №825005 
Хранилище.mp4
Сделал хранилища и окно обмена, которое пока не работает, но уже умеет отображать содержимое инвантаря и хранилища бок о бок.
Аноним 01/08/22 Пнд 04:20:07 #247 №825010 
События.png
Посыл.png
Прием.png
Отработка.png
Изучаю события.

Где-то ошибочно вычитал, что для пользователя зарезервировано всего 30 с чем-то видов событий. Не то чтобы сложно было уложиться в этот лимит, либо навелосипедить свои события поверх неё, использовав всего лишь один полиморфный тип для всех событий в игре, но оказалось, что пользовательских событий можно напилить 32685!

> >>>pygame.constants.NUMEVENTS - pygame.constants.USEREVENT
> 32685

Ну и остается только запиливать свои тивпы событий с минимальной обвязкой. Короче, события офигенны, не представляю, как бы я жил без событий, когда всё начинает референсить друг друга, а Питон не умеет в круговые импорты.
Аноним 01/08/22 Пнд 09:36:23 #248 №825033 
>>823656
>А если в винде, то что лучше использовать - повер шелл или простую цмд?
Windows Terminal + Git for Windows
Аноним 01/08/22 Пнд 10:12:11 #249 №825038 
>>825005
красота
Аноним 03/08/22 Срд 02:59:38 #250 №825560 
Многострочный текст.png
Добавил поддержку многострочного текста. При этом потерял поддержку выравнивание, но выравнивание многострочных текстов по центру и правому краю всё равно никому не нужно, даже исправлять не буду.
Аноним 03/08/22 Срд 09:57:25 #251 №825596 
Выравнивание по левому краю.png
Выравнивание по правому краю.png
Выравнивание по центру.png
Ладно, уговорили.
Аноним 03/08/22 Срд 10:46:33 #252 №825606 
>>825596
Ну вот другое дело, люблю когда делают качественно.
Аноним 03/08/22 Срд 12:53:37 #253 №825631 
>>825606

Качество тут запредельного уровня.
Аноним 17/08/22 Срд 03:19:06 #254 №827751 
Обмен.mp4
Обмен вещами работает.
Аноним 18/08/22 Чтв 01:00:23 #255 №827885 
Перетаскивание.mp4
>>827751
И даже перетаскивание вещей с одной панели на другую. Можно и вещь на вещь перетаскивать, но сейчас это ничего не делает.
Аноним 18/08/22 Чтв 03:14:20 #256 №827894 
Обратная связь.mp4
>>827885

Добавил обратной связи. Обратной связи много не бывает. Еще бы курсор менять, но это целый отдельный квест.
Аноним 18/08/22 Чтв 14:24:01 #257 №827919 
>>827894
Такими темпами годика за 3 что-то и выйдет законченное.
Аноним 19/08/22 Птн 02:22:23 #258 №827964 
>>827919

Почему так оптимистично?
Аноним 20/08/22 Суб 09:14:51 #259 №828069 
Триггеры.mp4
Новый тип объектов - триггеры. Умеют пересекаться с игроком и писать "привет" в консоль, но вы этого не видите, да вам оно и не надо.
Аноним 20/08/22 Суб 13:37:52 #260 №828087 
Триггеры заданий.mp4
>>828069

И без задней мысли триггерим задания в журнале.
Аноним 20/08/22 Суб 20:47:00 #261 №828161 
Коллайдеры.mp4
Долго думал, как быть с пустотой, по которой всё это время можно было свободно ходить. Особо ничего не надумал, но через то же самое АПИ с триггерами оказалось легко запилить поддержку невидимых стен. Просто и эффективно.
Аноним 21/08/22 Вск 18:14:13 #262 №828295 
>>800023 (OP)
А в чём смысл? Питун это не язык для геймдева от слова совсем.
Аноним 21/08/22 Вск 19:44:41 #263 №828302 
>>828295

Питон на данный момент является лучшим языком для новых проектов. Исключительная выразительность языка и мощная система аннотации типов позволят Вам быстро писать элегантный и надежный код. Язык еще не столь распространён в геймдеве. Пока ваши конкуренты используют устаревшие технологии на базе Сишарп или Си++, вы сможете в разы поднять свою эффективность, задействовав pygame.Sprite - последнее достижение науки в области высокоуровневой отрисовки графики. Но это еще не все. В жизни любого проекта наступает момент, когда он превращается в продукт и к сопровождению проекта привлекаются дополнительные разработчики. На этом этапе распространённость и доступность движка начинает играть решающую роль. Благодаря активной популяризации Пугайм в среде профессиональных игроделов, а также поддержке этого фреймворка со стороны библиотеки для создания кроссплатформенных приложений - фонда Симпл ДиректМедиа Леер, Вы можете быть уверены, что в будущем Вам не придется переписывать свой проект на Юнити, как это произошло с проектами на печально известном движке Аур Машинери. Пугайм обеспечит вам гарантии успеха и стабильности Ваших начинаний. Выберите Пугайм сейчас и через несколько лет Вы сможете наслаждаться результатами своих трудов - успешным проектом, выполненным с учетом всех современных технологий и индустриальных стандартов. Пугайм - Ваш проводник к успеху в мире разработки игр. Выбирайте Пугайм.
Аноним 22/08/22 Пнд 14:50:49 #264 №828402 
Оповещение.mp4
Добавил еще обратной связи. На этот раз оповещаем игрока об изменении состояния мира. Пока что работает при добавлении новых заданий и при их завершении.
Аноним 22/08/22 Пнд 15:55:14 #265 №828416 
>>828295
Залётный ты? Пигейм это sdl, а sdl это С.
Аноним 22/08/22 Пнд 18:48:36 #266 №828460 
>>828416
А анимацию и сценграф ты на чём пишешь?
Аноним 06/09/22 Втр 00:16:04 #267 №830297 
Псевдовращение.mp4
Совершенствую графоний. Запилил псевдовращение анимаций.
Аноним 04/10/22 Втр 10:49:02 #268 №833426 
>>818723
В Noita эту хуйню не осилили.
Аноним 11/10/22 Втр 16:52:05 #269 №834221 
>>818723
Я бы решал задачу от гравитации. Каждый тайл имеет единичную гравитацию. Если он может двигаться вниз, он каждый кадр движется вниз на 1хG, где G - гравитация игрового мира. Если под тайлом есть другой тайл, то этот тайл не может двигаться вниз, тогда он сообщает тайлу снизу некоторый коэффициент, например треть своей суммарной массы (а масса у нас это 1хG, если кто не догадался), затем наш тайл проверяет, может ли он соскользнуть в сторону? выбирает рандомное направление и пытается соскользнуть, если не удалось, то вторую треть от сообщает тайлу в той стороне, куда хотел соскользнуть, и выбирает оставшееся направление, и если не удалось соскользнуть то последнюю треть своей массы он сообщает третьему тайлу. Если соскользнуть удалось, то он падает с 1/3 x G только в этом кадре, в следующем кадре он снова обладает полной массой в 1xG.

Теперь рассмотрим слой ниже. На тайл сверху давит несколько тайлов и каждый кадр сообщают ему коэффициент в скажем, 3.5, тайл домножает на G и теперь его полная масса 3.5xG, и он каждый кадр пытается упасть вниз с этой массой, если снизу неподвижный тайл, то он переданный ему коэффицент посылает обратно. Это у нас реакция опоры. Наш тайл получает этот возврат в стек, но будет суммировать его на следующем кадре. Далее он пытается соскользнуть по схеме выше. Если сбоку опора, то импульс соскальзывания тоже возвращается ему в стек. На следующем кадре каждый тайл смотрит, что у него в стеке и импульсы справа передаёт влево, и наоборот, а импульсы снизу передаёт наверх. Затем обрабатывает импульсы сверху. Снова.

Таким образом, если у нас сообщающиеся сосуды, то спрайты естественным образом распределят давление и выдавятся в незанятую полость. Только вот, насколько я слышал (а сам не пробовал) такой поатомный расчёт жидкостей заставит приуныть даже топовую пекарню.
Аноним 21/10/23 Суб 12:14:02 #270 №909111 
Кручение.mp4
Непролюбамп с последней страницы. (Планов оживлять тред пока нет.)
Аноним 21/10/23 Суб 14:20:24 #271 №909139 
>>909111
С годовщиной.
comments powered by Disqus

Отзывы и предложения