Почему параметр rect не работает в pygame fill? - PullRequest
1 голос
/ 05 мая 2020

В модуле pygame Surface.fill имеет параметр под названием rect=[].

в моем коде, я загружаю 8 на 8 пикселей воды с регулируемым уровнем. От 1 до 8 пикселей в высоту.

for x in range(len(screen)):
    for y in range(len(screen[x])):
        if screen[x][y] == 0:
            box.fill((0,0,0))
        elif screen[x][y] == 9:
            box.fill((255,255,255))
        else:
            box.fill((0,0,255), rect = [x*8,y*8+8-screen[x][y],8,screen[x][y]])
        window.blit(box, (x*8,y*8))

box это pygame.Surface((8,8))

Список screen представляет собой весь экран

Я использую screen список для отображения всего экрана с использованием значений из 0to9, где 9 - это платформа solid, 8to1 - уровень воды, а 0 - ничего

Этот код загружается в каждый screen значение как тип 8 на 8 пикселей (0to9). (так как я использую 8 на 8 пикселей, список имеет длину 100, а мой экран - 800 пикселей, отсюда * 8).

В части box.fill я заполняю box синим цветом, а я Я использую параметр rect, чтобы нарисовать rect размером (8 в длину и уровень воды или screen в высоту), и я помещаю его в x*8 (формула объяснена ранее) и y*8 и добавление 8-screen[x][y], которое перемещает прямоугольник вниз, чтобы водный элемент имел правильную высоту.

Моя проблема в том, что пиксели воды не загружаются.

1 Ответ

1 голос
/ 05 мая 2020

Аргумент rect заключается в том, чтобы заполнить область на поверхности, поверхность, которую вы пытаетесь заполнить размером 8x8, в первом фрагменте пикселей, он работает правильно, потому что 0 * 8 равно 0, но когда вы дойдете до второго пикселя chunk, он пытается заполнить 8-16 по оси x, чего нет в поле 8x8, вы хотите начать с 0 (по оси x).

box.fill((0,0,255), rect=(0,8-screen[x][y],8,screen[x][y]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...