Ошибка обновления поверхностей pygame

Я делаю игру на pygame. У меня есть 3 поверхности: gameDisplay (где персонаж и фон рендерится напрямую), guiSurf и invSurf. У меня есть часы, сделанные в основном pyhon, которые отображают время игры с помощью шрифта pygame. Я переключаю часы на guiSurf, а затем в своем игровом цикле я переключаю guiSurf и invSurf на gameDisplay. Моя проблема в том, что часы оставляют след с того места, где были. IE, когда он изменяется с «07:00» на «07:01», «01» находится поверх «00», которого там быть не должно. Я бы выложил код, но там примерно 400 строк. Кто-нибудь знает, что я сделал не так. Ссылка на изображение часов


person kallerdaller    schedule 17.09.2016    source источник


Ответы (2)


Убедитесь, что вы «очистили» область, в которой печатается время, наложив другое изображение на то место, где находится текст. Когда вы рисуете свои поверхности на экране, они просто становятся одной «поверхностью», которая всегда отрисовывается до тех пор, пока не будет перезаписана чем-то другим. Вам нужно очистить эту поверхность, прежде чем вы добавите к ней что-то еще, иначе вы получите эффект, который видите. Простым вызовом display_name.fill ((0,0,0)) в начале каждого тика игры вы «очищаете» экран, а затем перерисовываете на нем текст без эффекта перетекания. Конечно, вам придется перезаписывать все на экран каждый тик, но это не должно быть проблемой, если вам не нужно переносить тысячи элементов. Если вы не хотите все перерисовывать, нарисуйте небольшой прямоугольник поверх текста, а затем перерисуйте его, и ваши проблемы должны быть решены.

Надеюсь, это поможет вам в решении вашей проблемы и удачного кодирования!

person Community    schedule 17.09.2016

Видно, что часы дважды мигают на guiSurf. И я предполагаю, что он продолжает складывать предыдущее изображение времени (7:00, затем 7:01, затем 7.02 и так далее). Вам нужно очистить поверхность, на которой находятся часы, прежде чем вводить на них время: clock_surf.fill(clearcolor, clock_surf.get_rect()).

person Flint    schedule 17.09.2016