Можно ли разделить pygame.Surface на более мелкие pygame.Surface?

Я делаю игру на pygame, у меня есть большая карта, состоящая из нескольких тысяч pygame.Rect, раньше они отрисовывались по очереди каждый кадр, но это было очень не эффективно, я решил поместить их всех на поверхность Surface и отрисовывать ее, но, (как я полагаю из-за размера) это стало еще менее эффективным. Возможно ли как-то разделить на куски эту поверхность и рисовать только те ее части, которые видны?

UPD: Добавил код, как и просили

import random
import pygame
import sys
from ui.classes import *
from engine.level_builder.builder import level_dat
from engine.level_builder.objects.inventory import inventory
import math
from engine.level_builder.objects.OBJECTS_CONSTANTS import BaseObject
from engine.col.col import line_rect_collision
from engine.memory_system.system import Memory

pygame.init()
mode = GameModeStorage("main")
clock = pygame.time.Clock()
screen = pygame.display.set_mode((0, 0))
pygame.init()
scale = 1.0
padding = [-180, -180]
deltetime = 1
player_inv = inventory()
inv = False
memory_t = []
speed = 15
delta = 1
main_srf = pygame.Surface((level_dat["mapsize"][0]*40, level_dat["mapsize"][1]*40))
print(main_srf.get_size())
old_x, old_y = 0, 0
collided = []
memory = Memory((level_dat["mapsize"][0]*40, level_dat["mapsize"][1]*40))

while True:
    screen.fill((84, 84, 82))
    pygame.draw.rect(screen, (255, 0, 0), (955-((10*scale)/2), 535-((10*scale)/2), 10*scale, 10*scale))
    speed = 0.24 * delta

    # обработка движения и масштабирования камеры, scale - float 0.5 - 1.8, padding - массив со смещениями камеры по x и y


    # Именно после добавления этой строки игра начинает идти примерно в 0.5 fps
    screen.blit(pygame.transform.scale(memory.memory_surface, (int(memory.memory_surface.get_size()[0]*scale), int(memory.memory_surface.get_size()[1]*scale))), (960+padding[1]*scale, 540+padding[0]*scale))

    for i in level_dat['map']:
        #Здась большой и сложный для чтения алгоритм
        #Он итерирует примерно 5000 объектов на карте и при определенных условиях добавляет их в memory_t
        #Оставлять его не имеет смысла, т.к. сильно нагружает пк не он 100%


    for i in memory_t:
        pygame.draw.rect(memory.memory_surface, (128, 128, 128), (int(i[0].x), int(i[0].y), 40, 40))

        memory_t.remove(i)

    pygame.display.update()
    old_x, old_y = mouse_x, mouse_y
    print(clock.get_fps())
    delta = clock.tick(60)

Это сильно упрощенная версия кода, но, надеюсь, суть понятна


Ответы (0 шт):