Я пытаюсь создать приложение, которое требует, чтобы пользователь что-то нарисовал.
Для этого я создаю холст (объект pygame.Surface), на котором зарегистрирован чертеж, и затем я блею это на окно. Мне бы хотелось, чтобы холст был бесконечным , чтобы, когда пользователь прокручивает, он мог продолжать рисовать (конечно, только небольшая часть холста скрывается в окне). Но, на самом деле, Surface в Pygame требует конечной ширины и высоты, а главное, он не такой большой! (Я думаю, это потому, что он фактически блокирует пространство в памяти).
Итак, я попытался создать чанков : каждый чанк имеет фиксированный размер (например, в два раза больше размера экрана), и каждому куску выделяется определенная поверхность. Чанки создаются динамически, по требованию, и в целом это работает довольно хорошо.
Моя проблема в том, что когда я пытаюсь нарисовать линии, которые пересекаются на несколько чанков, это требует больших усилий для вычисления того, какие чанки эта линия должна На самом деле быть нарисованным, и на какие части он должен быть разбит. Я даже не пытался рисовать прямоугольники, потому что на самом деле было затруднительно, чтобы функция 'рисовать линию' работала.
Именно тогда я подумал, что то, что я делал, было в корне неверно: вместо того, чтобы пытаться переписать все функции pygame.draw и pygame.gfxdraw, чтобы они в основном выполняли работу для каждого чанка, я должен действительно перегружать pygame.Surface (скажем, создать дочерний класс MySurface класса Surface), поэтому всякий раз, когда пиксель изменяется, я внутренне выбрал, к какому чанку он принадлежит, и на самом деле изменил его в этом чанке, и передал этот новый объект Surface в функции pygame.
Я много искал в pygame сделать c, но там не объясняется, как это сделать. Я даже не знаю, какие методы объекта Surface внутренне вызываются, когда я рисую на нем! Я также гуглю это, и я не нашел никого, кто пытался бы делать такие вещи (может быть, я иду не в ту сторону?).
Итак, мой вопрос (ы): это правильный подход ? И, если да, как мне это осознать?
Я не публикую код, потому что мне нужно больше объяснения того, где найти то, что я пытаюсь сделать больше, чем код обзор.