Главная Юзердоски Каталог Трекер NSFW Настройки

Gamedev

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 271 170 45
НЕОЖИДАННЫЙ Pygame тред №1 Аноним 30/04/22 Суб 23:34:11 800023 1
ПУГАЕМ.webm 2950Кб, 800x800, 00:02:15
800x800
Изучаем лучший движок современности! А заодно и программирование на Питоне, фреймворк SDL, и заодно оптимизацию этого добра, чтобы всё летало в 30 FPS на RTX 5095 Ti! Спрашиваем вопросы! Делимся своими шедеврами! Помогаем новичкам!
Аноним 01/05/22 Вск 00:43:45 800026 2
Минер.png 28Кб, 553x633
553x633
Начну тред своим шедевральным поделием!
Аноним 01/05/22 Вск 00:44:46 800027 3
И сразу вопросы к олдам. Допустим, я хочу эту >>800026 фигню в изометрической проекции. Это достигается какой-то трансформацией или изометрическими тайлами и соответствующей математикой?
Аноним 01/05/22 Вск 10:33:40 800041 4
Не ну это слишком толсто.
Аноним 01/05/22 Вск 10:42:47 800042 5
Аноним 01/05/22 Вск 12:47:30 800059 6
Изом.png 76Кб, 1642x1192
1642x1192
>>800027

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

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

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

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

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

Возможно, блитишь поверх того, что в предыдущих кадрах наблитил? Во всяком случае, когда я столкнулся с чем-то подобным, дело было в этом. Фиксится обновлением поверхности каждый кадр: surface.fill('black')
Аноним 08/05/22 Вск 16:14:05 801006 26
2022-05-08 18-1[...].mp4 58Кб, 380x208, 00:00:01
380x208
>>800998
>surface.fill('black')
Такое есть в коде.
Без него оно - ну, вот это вот...
Аноним 08/05/22 Вск 16:16:23 801007 27
>>800998
Я думаю что может быть проблема в говновидяхе либо с методом вращения спрайтов. Хз.
Аноним 08/05/22 Вск 16:22:31 801009 28
>>801006

Код давай тогда. Потестю на своей видяхе.
Аноним 08/05/22 Вск 17:18:57 801020 29
2022-05-08 19-1[...].mp4 669Кб, 1920x1080, 00:00:04
1920x1080
Аноним 08/05/22 Вск 19:16:24 801042 30
>>801009
Как привязать цикл анимации к pygame.time.Clock() если вообще возможно? Вроде читал что-то такое...
Аноним 08/05/22 Вск 19:42:38 801050 31
>>801042

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

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

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

Но я пока анимацию не изучал, может есть что-то готовое.
Аноним 08/05/22 Вск 21:15:41 801068 32
videoplayback ([...].mp4 1245Кб, 640x360, 00:00:26
640x360
>>801050
Кароч как я понял проблема была в перемещении спрайта, я типа прибавлял к поз.х += 4 на каждом фрейме анимации, что заставляло пугаме перерисовывать спрайт каждое перемещение. Правильно перемещать спрайт нужно функцией пугаме move_ip(*вектор) которая смещает прямоугольник по вектору (который изменяешь в корневом цикле, в зависимости от клавиши) спрайта и вместе с ним уже отрисованный спрайт!
Аноним 08/05/22 Вск 21:46:38 801072 33
Спидран.mp4 389Кб, 820x580, 00:00:32
820x580
Пилим обработку столкновений. Пока со встроенными спидран-функциями. Но хотелось бы, конечно, без них.
Аноним 09/05/22 Пнд 15:16:40 801141 34
Минковски.mp4 470Кб, 820x580, 00:00:32
820x580
Минковски 2.mp4 198Кб, 820x580, 00:00:30
820x580
В общем, напилил и отладил обработку столкновений и доволен. На 99% ничего сложного, принимаем игрока за точку, прямоглы коллайдеров ожиряем на размеры игрока, ищем пересечение луча и прямоугольника, возвращаем нормаль, отговариваем скорость этой нормалью и радуемся. Потом решаем гемор с пенетрацией в углах и спотыканием на стыках, что решается сортировкой коллизий по расстоянию до них и несколькими проверками на пересечение для разных скоростей (обычной, горизонтальной, вертикальной).
Аноним 09/05/22 Пнд 18:35:49 801170 35
Оптимизон.mp4 436Кб, 820x580, 00:00:14
820x580
Оптимизон завез.
Аноним 09/05/22 Пнд 22:45:41 801221 36
Аноним 09/05/22 Пнд 23:07:14 801222 37
>>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 801224 38
>>801222
Разве на отсечение ненужных ректов не тратится примерно то же время, что и на столкновения?
Аноним 09/05/22 Пнд 23:38:29 801226 39
>>801224
Неа. Это оптимизированная операция, исполняемая сишной либой.

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

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

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

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

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

Фух, нашел баг. Подлое -1e-15 вкралось там, где ожидалось ≥ 0. Расчехлил эпсилоны, и теперь всё идеально.
Аноним 13/05/22 Птн 17:52:24 801606 44
2022-05-13 19-4[...].mp4 470Кб, 1440x900, 00:00:10
1440x900
бамп мёртвому треду
Аноним 13/05/22 Птн 18:49:14 801614 45
>>801606

Как спрайты вращаешь?
Аноним 14/05/22 Суб 04:12:56 801707 46
Анимация.mp4 2994Кб, 820x580, 00:00:15
820x580
Потихоньку научился в анимацию:
Аноним 15/05/22 Вск 02:48:54 801893 47
Музыка.mp4 808Кб, 820x580, 00:00:20
820x580
Играем музло на фоне.
Аноним 15/05/22 Вск 12:13:39 801921 48
2022-05-15 14-0[...].mp4 1591Кб, 1440x900, 00:00:27
1440x900
>>801614
Т Р И Г О Н О М Е Т Р И Я
Р
И
Г
О
Н
О
М
Е
Т
Р
И
Я

Мозг взрывается. Сейчас дошёл до того, что ищу вектор до точки, получаю угол между ним и вектором спрайта, поворачиваю спрайт на этот угол, двигаю спрайт по вектору до точки. С телом интереснее - смещаю центр по окружности вокруг центра головы, нахожу вектор между телом и головой, поворачиваю на угол вектора, перемещаю к голове.
Аноним 15/05/22 Вск 13:12:25 801928 49
2022-05-15 15-0[...].mp4 1362Кб, 1440x900, 00:00:24
1440x900
Накатываем гравитацию на обе части тела и пиздярики.
Аноним 16/05/22 Пнд 07:31:22 802073 50
2022-05-16 09-2[...].mp4 578Кб, 1440x900, 00:00:30
1440x900
Аноним 16/05/22 Пнд 07:53:37 802074 51
>>802073

Эт че, инверсная кинематика???
Аноним 16/05/22 Пнд 08:07:22 802076 52
videoplayback ([...].mp4 1245Кб, 640x360, 00:00:26
640x360
>>802074
Я даже слов таких не знал. Скелетная анимация думал.
Аноним 21/05/22 Суб 13:00:44 802725 53
Таскаем.mp4 398Кб, 1280x720, 00:00:18
1280x720
>>801921

Я зделол.

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

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


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

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

Аноним 21/05/22 Суб 14:59:27 802738 55
>>802737
Это о чем? И чем rcos и rsin от cos и sin отличаются?
Аноним 21/05/22 Суб 15:26:52 802739 56
>>802738
r это радиус
там пропущен *
ты смещаешь центр ректа расположенный от пивота на расстоянии r на угол fi, где тут вычисление нового ректа?
Аноним 21/05/22 Суб 15:39:15 802740 57
>>802739
А икс и игрек тут что?
Аноним 21/05/22 Суб 15:40:30 802741 58
>>802740
то что изменяется при смещении, видимо
Аноним 21/05/22 Суб 16:31:06 802747 59
>>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 802748 60
>>802747
ну, конечная формула сложнее чем просто:
self.rect.centerx = pivot_x + r cos(-fi)
self.rect.centery = pivot_y + r
sin(-fi)

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

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

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

И можно назначать на них произвольные кнопки, даже больше одной.
Аноним 22/05/22 Вск 17:29:11 802907 73
1.png 7Кб, 397x251
397x251
>>802897
events ИМХО годится только для KEYDOWN/KEYUP, типа открыть инвентарь, меню выхода и всё такое.
>и желательно сделать так, чтобы инпут могли получать обрабатывать произвольные классы
Заводишь метод класса и суёшь его в update().
Там в книге всё это есть.
Аноним 22/05/22 Вск 17:57:44 802916 74
image.png 805Кб, 700x467
700x467
>>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 803011 75
Контролируем.mp4 4934Кб, 820x580, 00:00:33
820x580
УХАХА! Лисапед готов! В мире нет ничего, что не решалось бы сотней строк отборного говнокода на Питоне!

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

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

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

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

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

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 803293 78
Voronoj.png 29Кб, 902x931
902x931
Я С Н О
С
Н
О
Аноним 25/05/22 Срд 19:45:30 803297 79
Аноним 25/05/22 Срд 20:55:24 803309 80
>>803297
Ну, песочек, хотелось бы. А-ля Oxygen Not Included, по крайней мере в голове образ чего-то такого. Докатился до уровня где понадобилось перемещение персонажа к точке выполнения задания и тут А* с Графами кааак налетели, Графы - вообще особый путь поехать кукухой, а у меня ни опыта, ни знаний, в итоге Вороного таки осилил, теперь буду улучшать алгоритм создания, всякие там сохранения мира, перемещения камеры, и потом уже по Графам взад-вперёд ездить до посинения.
Мимолётом ещё узнал, что блит всего экрана каждый цикл - ваще не вариант, и буду по-ходу ещё вникать в отдельные прорисовки того что подвигалось.
Аноним 25/05/22 Срд 20:57:11 803310 81
>>803309
>блит всего экрана каждый цикл - ваще не вариант, и буду по-ходу ещё вникать в отдельные прорисовки того что подвигалось

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

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

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

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

Запилил эмиттер.
Аноним 26/05/22 Чтв 13:03:45 803354 86
2022-05-26 14-5[...].mp4 17560Кб, 1280x720, 00:00:38
1280x720
Аноним 26/05/22 Чтв 16:23:30 803377 87
Аноним 26/05/22 Чтв 22:24:36 803457 88
Направленный эм[...].mp4 244Кб, 1920x1080, 00:00:09
1920x1080
>>803334

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

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

До и после:
Аноним 28/05/22 Суб 10:41:07 803686 91
2022-05-28 12-3[...].mp4 1315Кб, 640x480, 00:00:32
640x480
8b0c6659c87ea99[...].jpg 86Кб, 500x383
500x383
096236fa8c39d62[...].jpg 62Кб, 480x360
480x360
Аноним 28/05/22 Суб 10:55:17 803688 92
2022-05-28 12-5[...].mp4 7988Кб, 1440x900, 00:00:26
1440x900
Аноним 29/05/22 Вск 00:03:04 803774 93
Всем зип файл, кто-нибудь пытался на пайгейме работать с 3д графикой? Как ощущения?
Аноним 29/05/22 Вск 00:36:19 803776 94
image.png 689Кб, 470x1024
470x1024
>>803774

В Пугайме нет 3д графики. Придется подключать Пуопенжиэль и работать уже с ним, а Пугаем будет как прослойка для окна и т. п.
Аноним 30/05/22 Пнд 13:42:20 803987 95
И получится ренпи... Где чтение ивентов с пигейма, а графика через openGl.
Аноним 31/05/22 Втр 22:19:59 804113 96
16157413582320.jpg 187Кб, 1280x720
1280x720
Оп выложи код-то, любопытно как всё сделано на питоне.
Аноним 01/06/22 Срд 04:46:57 804133 97
4SMn1ft.mp4 2327Кб, 680x796, 00:00:23
680x796
51wweYw.mp4 2054Кб, 828x506, 00:00:18
828x506
jNsgqwA.mp4 842Кб, 894x596, 00:00:06
894x596
LWVgpEI.mp4 1835Кб, 896x594, 00:00:12
896x594
Аноним 01/06/22 Срд 05:23:26 804134 98
Вертикальная со[...].mp4 2482Кб, 1920x1080, 00:00:17
1920x1080
Новая сортировка.mp4 2892Кб, 1920x1080, 00:00:20
1920x1080
Переделал сортировку спрайтов с Y-Sort на псевдо-3D сортировку.
Аноним 01/06/22 Срд 06:41:35 804137 99
Прыжки.mp4 2645Кб, 1920x1080, 00:00:17
1920x1080
Псевдопрыжки без запрыгивания и перепрыгивания.

Удивительно, насколько возможность прыгать всё усложняет.
Аноним 01/06/22 Срд 10:13:27 804146 100
>>804137
То то на сони любят даже в ааа прыжки убрать.
Аноним 01/06/22 Срд 11:38:20 804156 101
2022-06-01 13-3[...].mp4 961Кб, 640x480, 00:01:03
640x480
ух бля, песок сыпится
Аноним 01/06/22 Срд 12:44:27 804162 102
Пол.mp4 1785Кб, 1920x1080, 00:00:13
1920x1080
Определяем тип пола. Кто угадает зачем?
Аноним 01/06/22 Срд 12:47:18 804163 103
>>804156

Прикольная механика для какого-нибудь фарминга. Это с той книжки?
Аноним 01/06/22 Срд 13:37:09 804175 104
2022-06-01 15-3[...].mp4 942Кб, 640x480, 00:00:32
640x480
>>804163
Это свои потуги.
Теперь буду каждому материалу своё поведение присваивать.
Ну и как ты там скейлишь на выводе думать. Потому что ФПС прямо пропорционален площади мира делёной на размер квадратов.
Аноним 01/06/22 Срд 13:51:29 804178 105
8b0c6659c87ea99[...].jpg 86Кб, 500x383
500x383
>>804175
И ещё надо как-то сузить цикл по квадратам которые надо отрисовывать, но в то же время как-то успевать их отрисовывать когда они близко от экрана/расположены на экране и вроде действия внутри квадратов должны происходить, но не отрисовываться до тех пор пока они не находятся в пределах около экрана, и уже два цикла получается - на действия и на отрисовку, и хз в какой жопе в итоге будет ФПС. Кароч ноды это пиздос.
Аноним 01/06/22 Срд 14:03:53 804181 106
>>804175
>Ну и как ты там скейлишь на выводе думать. Потому что ФПС прямо пропорционален площади мира делёной на размер квадратов.

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

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

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

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

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

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

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

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

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

Зарылся с вычислениями ректов немного. У меня тайлы в мировых изометрических координатах, плюс прокрутка камеры. Сложно подобрать нужную процедуру для вычисления ректа.
Аноним 02/06/22 Чтв 21:20:44 804377 115
Без чанков без [...].mp4 2843Кб, 1920x1080, 00:00:10
1920x1080
Без чанков с цв[...].mp4 2707Кб, 1920x1080, 00:00:08
1920x1080
Чанки без цвето[...].mp4 2676Кб, 1920x1080, 00:00:10
1920x1080
Чанки с цветома[...].mp4 3110Кб, 1920x1080, 00:00:10
1920x1080
Завёз оптимизон. Оказалось, что производительность при большом количестве дроуколлов в основном убивал альфа-канал.
Дешевле всего оказалось просто слить все 2500 тайлов в один гигачанк размером с карту.

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

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

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

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

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

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

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

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

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

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

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

Делит сетку произвольного размера чанками произвольного размера. Если кратности нет, в конце будут чанки-обрезки. Порядок слева направо сверху вниз.
Аноним 03/06/22 Птн 00:12:41 804397 119
8b0c6659c87ea99[...].jpg 86Кб, 500x383
500x383
>>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 804419 120
>>804397

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

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

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

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

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

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

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

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

Так один квадратик это одна нода что ли?
Аноним 03/06/22 Птн 18:40:31 804561 131
8b0c6659c87ea99[...].jpg 86Кб, 500x383
500x383
Аноним 03/06/22 Птн 18:47:10 804566 132
>>804561

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

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

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

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

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

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

Во, вот эта хрень мне 50% перформанса убивала. Схитрил, загружая пнгшку и блитя её на сюрфейс розового цвета, которому ставил розовый цветом прозрачности при помощи set_colorkey. Но я все тайлы каждый кадр в гейм лупе рендерил.
Аноним 04/06/22 Суб 12:02:57 804707 141
2022-06-04 13-5[...].mp4 792Кб, 640x480, 00:00:38
640x480
Без OBS ~140-180 если чо. Баги со всех сторон когда двигаешь экран с зажатой мышью, хз пока как фиксить и надо ли, скорее это баг прорисовки, потому что сквозь ноду всё равно проваливается песочек, добавил по краям стенки и пол чтобы индекс не выходил за пределы листа.
Аноним 04/06/22 Суб 12:17:58 804708 142
2022-06-04 14-1[...].mp4 1693Кб, 640x480, 00:00:39
640x480
Аноним 04/06/22 Суб 20:12:46 804822 143
2022-06-04 22-0[...].mp4 3651Кб, 640x480, 00:01:01
640x480
Ух, бля!
Аноним 04/06/22 Суб 22:01:40 804863 144
Аноним 05/06/22 Вск 14:34:51 804922 145
>>804708

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

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

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

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

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

>>805867

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

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

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

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

Осторожно! Так можно докопаться до скрытых [ВЫМАРАНО].
Материалы по объектам этого класса не должны быть доступны обычным пользователям.
Аноним 12/06/22 Вск 14:49:00 806765 165
Рэйбокс.mp4 2036Кб, 1920x1080, 00:00:24
1920x1080
Напилил рэйбоксы.
Аноним 12/06/22 Вск 18:43:49 806820 166
>>806765
А что насчёт ямок?
мимо копатель
Аноним 12/06/22 Вск 19:32:11 806833 167
image.png 361Кб, 500x389
500x389
Аноним 12/06/22 Вск 20:39:35 806856 168
>>806833
Овраги там и канавы.
Аноним 12/06/22 Вск 21:28:17 806870 169
>>806856

Есть примеры тайловых изометрических игр с ямами-оврагами?
Аноним 12/06/22 Вск 22:30:35 806887 170
image.png 99Кб, 259x194
259x194
image.png 87Кб, 259x194
259x194
2022-06-13 00-2[...].mp4 1048Кб, 640x480, 00:00:29
640x480
>>806870
лул
мимо-олд
симмулятор червепидора готов
Аноним 13/06/22 Пнд 05:29:32 806923 171
>>806887
>пики 1 и 2

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

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

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

И присобачил к игре. Вот теперь совсем по-другому ощущается подсветка и интерактирование.
Аноним 14/06/22 Втр 16:22:33 807311 178
2022-06-14 18-1[...].mp4 2419Кб, 640x480, 00:00:37
640x480
Аноним 14/06/22 Втр 16:35:28 807314 179
>>807311

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

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

Надо будет попробовать.
Аноним 14/06/22 Втр 16:47:56 807322 184
image.png 2Кб, 720x480
720x480
>>807314
По поводу физики, кста, натыкался на Хабре на статью про Pymunk либу, вроде что-то делает, у меня движок не про это просто, мож кому пригодится.
Аноним 14/06/22 Втр 16:48:59 807323 185
0e2aeeb01d6494e[...].gif 657Кб, 720x480
720x480
>>807322
ля, копировал в пнг нах
Аноним 17/06/22 Птн 10:18:17 807768 186
2022-06-17 12-1[...].mp4 3609Кб, 640x480, 00:01:02
640x480
Аноним 17/06/22 Птн 13:19:01 807858 187
2022-06-17 15-1[...].mp4 1339Кб, 640x480, 00:00:31
640x480
Аноним 17/06/22 Птн 23:07:56 808114 188
>>807858

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

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

Научился обрабатывать событие масштабирования окна игроком и перерисовывать интерфейс на лету.
Аноним 03/07/22 Вск 00:35:23 813350 192
Смена языка.mp4 358Кб, 1920x1080, 00:00:09
1920x1080
Меняем язык на лету.
Аноним 05/07/22 Втр 06:14:52 814074 193
Настройки.mp4 546Кб, 1920x1080, 00:00:15
1920x1080
Научился менять язык еще более на лету. Запилил экран всевозможных настроек.
Аноним 05/07/22 Втр 21:15:54 814248 194
2022-07-05 22-4[...].mp4 18444Кб, 640x480, 00:01:34
640x480
процы соснули
Аноним 05/07/22 Втр 21:21:36 814253 195
>>814248

КВС>=1 всё еще реалтайм!
Аноним 05/07/22 Втр 21:52:34 814273 196
цйуцйвыфвыфв.jpg 9Кб, 229x220
229x220
16220681548962.jpg 30Кб, 500x375
500x375
15415563370810.png 80Кб, 397x419
397x419
8b0c6659c87ea99[...].jpg 86Кб, 500x383
500x383
>>814253
Реалтайм из прошлого десятилетия, а.к.а мой проц.
На самом деле - пилю физику, с вектором силы и массой, и камень об камень - отскакивает вверх(когда-нибудь и искрить будет), камень об песок - выталкивает из под себя или выталкивает крайний/ие в нижнем ряду, песок - скользит по диагонали обо всё. Функция на два типа материалов(твёрдые и полутвёрдые) занимает 250+ строк. На очереди жидкости, у них ещё и деление объёма по-хорошему надо делать. Ожидаемая длина функции=1кк. Полупуки по теме жидкостей в гугле - вообще ни о чём.
Аноним 06/07/22 Срд 02:25:12 814329 197
>>814248
Лучшебы спиздили у разрабов ноиты движ. По какой-нибудь самосбор оче зашло бы.
Аноним 06/07/22 Срд 06:14:17 814343 198
Главное меню.mp4 1303Кб, 1920x1080, 00:00:24
1920x1080
Запилил главное меню с рудиментарными настройками в игру.

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

Пока что это самый большой файл в проекте (213 строк), но, думаю, сильно больше будет, ведь пока есть только пять виджетов: базовый, текст-строка, кнопка-вызывалка, кнопка-листалка и бесполезный виджет-двачер, выполняющий одну функцию: он синий.
Аноним 06/07/22 Срд 07:11:48 814347 199
ut-00007278.jpg 102Кб, 1200x1200
1200x1200
>>814329
Хз, пиратка у меня, на том же процэ, вылетала тупа. Мож кряк такой, а мож и оптимизация говна.
Аноним 06/07/22 Срд 12:35:59 814394 200
Аноним 06/07/22 Срд 16:34:07 814454 201
15249298813250.webm 210Кб, 1280x720, 00:00:02
1280x720
>>814394
Это четверть пука, максимум - треть.
Аноним 06/07/22 Срд 17:44:40 814473 202
Аноним 06/07/22 Срд 18:26:22 814484 203
пфваыфвуыфв.png 13Кб, 642x512
642x512
>>814473
Ну, да, примерно такие мысли о написании.
Так же не знаю как запилить сообщающиеся сосуды(хотя скорее всего смогу, т.к. есть уже функции работающие по нижнему ряду и поиску всех заполненных нод ниже предложенной, и соответственно давление = сумма всех весов сверху, но там есть ещё заморочки с ситуациями пикрилл - где над/под нодой лежит нода не оказывающая давления, а за ней продолжается ряд давящих), и так же деление объёма на соседей.
Просто на предыдущей реализации физики векторов силы не было, а теперь они есть и вот уже почти начал писать, ленб только.
Аноним 07/07/22 Чтв 23:07:55 815180 204
Инвентарь.mp4 1039Кб, 1920x1080, 00:00:16
1920x1080
Запилил большой черный мешок.
Аноним 08/07/22 Птн 00:50:17 815199 205
>>815198

Нет: >>801330

Надо, конечно, спрайты свои сделать, да лень.
Аноним 08/07/22 Птн 04:11:43 815213 206
Штабелирование.mp4 1481Кб, 1920x1080, 00:00:23
1920x1080
Штабелируем. Теперь все вещи завернуты в стаки. Каждый стак умеет брать число предметов, уменьшать его на число свободного места в стаке и возвращать остаток или 0 (если всё влезло). Добавляя N предметов в инвентарь, мы сначала тратим N в цикле фор по всем существующим стакам, затем в цикле while (N > 0) создаем новые стаки и тратим N на них.
Аноним 09/07/22 Суб 23:47:44 816153 207
>>814484
Эм, с питоном же датасаентисты работают в том числе занимающиеся физикой. Что-то не верится что либы до сих пор не запилили где есть расчёт физ.процессов разных.
Аноним 10/07/22 Вск 07:56:33 816197 208
Аноним 10/07/22 Вск 08:07:37 816199 209
2022-07-10 10-0[...].mp4 9570Кб, 640x480, 00:02:14
640x480
Но я сам пишу.
Аноним 10/07/22 Вск 11:37:59 816218 210
16235898784030.png 768Кб, 2500x1840
2500x1840
Бамп годному треду.
Я вот тоже решил прототип прототипа клиента к своей онлайн дрочильне на pygame накидать, бэкенды тоже на питоне с pymunk правда. Сложно пиздец, я веб дев и с вебом вообще лады, а тут вообще голова пухнет, особенно от попыток организовать норм архитектуру-структуру кода и тысяч физики и геометрии, которых я забыл к хуям после универа. Сложно но интересно сука, весь тред прочитал взахлёб
Аноним 11/07/22 Пнд 05:50:55 816645 211
Аноним 11/07/22 Пнд 11:04:47 816682 212
Аноним 11/07/22 Пнд 14:37:49 816765 213
>>816722

А никак. Есть возможность написать свой велосипед с нуля.
Как ты его напишешь - такие возможности и будут, получается.
Аноним 11/07/22 Пнд 14:54:01 816782 214
Аноним 11/07/22 Пнд 16:42:57 816815 215
>>816645
Спасибо, пока только очевидные вещи встретил, но как то и интересно даже

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

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

Джейсон компактный и строгий, прямолинейно переводится в питоновские структуры. Специальных конфиг-функций нет. Впрочем, со словарями всё просто из коробки: "settings = defaults | overrides", а метод dict.get позволяет задать значение по умолчанию.
Аноним 12/07/22 Втр 07:32:28 817060 217
>>817052
И сразу тихо спарсилась несуществующая кнопка 'Space JoyDown' (забыл разделитель |), а персонаж в игре не прыгает. Без валидации жопа.
Аноним 16/07/22 Суб 09:32:45 818672 218
2022-07-16 11-2[...].mp4 5547Кб, 640x480, 00:02:38
640x480
images.jpg 319Кб, 1000x562
1000x562
Оу, май!
Аноним 16/07/22 Суб 13:19:17 818699 219
Аноним 16/07/22 Суб 16:09:45 818723 220
пфыпаыфыаыфвфыв.png 16Кб, 642x512
642x512
8b0c6659c87ea99[...].jpg 86Кб, 500x383
500x383
>>818699
стил нат енаф, бат...
Застрял на понимании откуда брать вещ-во для переноса вверх если в ряду с тайлом(1) есть тайл(2) с давлением сверху больше чем у тайла(1) и над тайлом(1) есть пустой/с водой тайл(3), которое даст сообщ-ся сосуды, и возможно даст понимание облегчения всей физики жидкости. сложна блять
Аноним 16/07/22 Суб 16:11:05 818725 221
типа если брать из тайла(1) - оно упадёт обратно, тупа
Аноним 19/07/22 Втр 08:34:23 819997 222
Области ввода.mp4 2026Кб, 1920x1080, 00:00:24
1920x1080
Допилил инпут понятием области действия: везде / игра / интерфейс. Теперь коллбэки можно подписывать областью действия. Если система настроена обрабатывать только интерфейсные вызовы, весь инпут игры, такой как движение, прыжки, взаимодействие и т. д., будет проигнорирован.

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

Также поменял поведение эскейпа на контекстное действие (пока только закрытие текущего окна). Вместо того, чтобы всегда открывать главменю.
Аноним 19/07/22 Втр 20:20:57 820283 223
Окей, а с чего начать с этим пигеймом? Как вообще с библиотеками работать?
Аноним 19/07/22 Втр 20:34:34 820291 224
Аноним 19/07/22 Втр 20:46:51 820312 225
>>820291
>Лол, ну как с любыми модулями питона, нет?
А как с любыми другими модулями питона работать?

Я просто в питоне не особо понимаю, но вижу большой интерес. Ладненько, завтра попробую что нибудь сделать.
За документацию спасибо!
Аноним 19/07/22 Втр 21:07:44 820336 226
>>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 820351 227
>>820312
Не надо pygame, он слишком низкоуровневый. По сути позволяет только создавать окно, ловить события мыши и выводить картинки по заданным координатам. Попробуй Arcade, Pyxel, Ursina engine (обёртка над Panda 3D) - там есть игровые сущности.
Аноним 20/07/22 Срд 13:45:22 820574 228
00.png 14Кб, 642x512
642x512
>>820351
Аркадий привлёк внимание.
>По сути позволяет только создавать окно
Там есть пиксельаррай и класс вектор с горой методов.
Можно сочетать, потому что у Аркадия в сравнении с Пугеймом честно написаны плюсы и минусы друг против друга. Главное чтобы х, у, и сходились.
Аноним 23/07/22 Суб 11:48:53 821852 229
Старая рамка.png 61Кб, 1922x1112
1922x1112
Новая рамка.png 68Кб, 1922x1112
1922x1112
Обнаружил, что мой метод рисования рамочки вокруг игрового окна съедает 25% фпс. Переделал всё на апдейт частичного ректа по центру экрана после изначальной заливки цветом. Не то чтобы рамочка вообще была нужна, но как-то уюта добавляет, пусть будет.
Аноним 24/07/22 Вск 17:12:37 822533 230
Журнал.mp4 360Кб, 1920x1080, 00:00:06
1920x1080
У любой конечной игры должна быть какая-то цель. И наверное эту цель хорошо бы знать. А для этого лучше всего подходит что? Правильно! Повествование через окружение и нарративный дизайн.

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

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

Аноним 26/07/22 Втр 16:30:25 823534 236
изображение.png 21Кб, 1195x823
1195x823
изображение.png 11Кб, 431x242
431x242
А вот такое просто окно запускается, а как у него - нету. Что за дела
Аноним 26/07/22 Втр 16:32:58 823537 237
изображение.png 20Кб, 1271x743
1271x743
>>823531
Отбой, получилось починить - я двоеточие забыл поставить в начале класса.
Аноним 26/07/22 Втр 16:33:49 823538 238
Может подскажите какой нибудь текстовый редактор который отлавливает такие синтаксические ошибки? Или таких не бывает? Я сейчас ATOM юзаю.
Аноним 26/07/22 Втр 16:51:04 823545 239
>>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 823550 240
>>823537
>>823538
Ты чё совсем? Запускай код из командной строки, а не кликом по иконке. Так у тебя будет время прочитать ошибку в терминале.

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

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

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

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

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

Использую подобную структуру:
Аноним 01/08/22 Пнд 03:48:50 825005 246
Хранилище.mp4 820Кб, 1920x1080, 00:00:15
1920x1080
Сделал хранилища и окно обмена, которое пока не работает, но уже умеет отображать содержимое инвантаря и хранилища бок о бок.
Аноним 01/08/22 Пнд 04:20:07 825010 247
События.png 9Кб, 428x260
428x260
Посыл.png 7Кб, 628x164
628x164
Прием.png 3Кб, 392x93
392x93
Отработка.png 6Кб, 438x170
438x170
Изучаю события.

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

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

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

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

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

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

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

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

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

Таким образом, если у нас сообщающиеся сосуды, то спрайты естественным образом распределят давление и выдавятся в незанятую полость. Только вот, насколько я слышал (а сам не пробовал) такой поатомный расчёт жидкостей заставит приуныть даже топовую пекарню.
Аноним 21/10/23 Суб 12:14:02 909111 270
Кручение.mp4 1478Кб, 1920x1080, 00:00:19
1920x1080
Непролюбамп с последней страницы. (Планов оживлять тред пока нет.)
Аноним 21/10/23 Суб 14:20:24 909139 271
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов