Неверная позиция назначения для ошибки блита, не видя как - PullRequest
1 голос
/ 16 марта 2019

Я программирую игру, в которой в основном используются спрайты, я использовал лист спрайтов для этого кода и в итоге получил

"недопустимое назначение для блита"

ошибка.

class spritesheet:
    def __init__(self, filename, cols, rows):
        self.sheet = pygame.image.load(filename).convert_alpha()

        self.cols = cols
        self.rows = rows
        self.totalCellCount = cols * rows

        self.rect = self.sheet.get_rect()
        w = self.cellWidth = self.rect.width / cols
        h = self.cellHeight = self.rect.height / rows
        hw, hh = self.cellCenter = (w / 2, h / 2)

        self.cells = list([(index % cols * w, index / cols * h, w, h) for index in range(self.totalCellCount)])
        self.handle = list([
            (0,0), (-hw, 0), (-w, 0),
            (0, -hh), (-hw, -hh), (-w, -hh),
            (0, -h), (-hw, -h), (-w, -h),])

    def draw(self, surface, cellIndex, x, y, handle = 0):
        surface.blit(self.sheet, (x + self.handle[handle][0], y + self.handle[handle][1], self.cells[cellIndex]))


s = spritesheet('Number18.png', 6, 58)


CENTER_HANDLE = 4

Index = 0

#mainloop
run = True
while run:

    s.draw(DS, Index % s.totalCellCount, HW, HH, CENTER_HANDLE)
    Index +=1

    pygame.draw.circle(DS, WHITE, (HW, HW), 2, 0)

    pygame.display.update()
    CLOCK.tick(FPS)
    DS.fill(BLACK)

Это в основном весь мой код, и у меня возникает проблема в строке

 surface.blit(self.sheet, (x + self.handle[handle][0], y + self.handle[handle][1], self.cells[cellIndex]))

, постоянно выдающая ошибку, что этоявляется недопустимой позицией назначения для blit, я также заметил, что мой индекс тоже влияет на это, но я не знаю, что делать.

1 Ответ

0 голосов
/ 16 марта 2019

2-й (dest) параметр для pygame.Surface должен быть либо позицией (кортеж (x, y)), либо прямоугольником (кортеж (x, y, h, w)).

ЧтоВы должны передать кортеж (x, y, list):

surface.blit(self.sheet, 
    (x + self.handle[handle][0], y + self.handle[handle][1], self.cells[cellIndex]))

Если вы хотите установить пункт назначения с помощью позиции (x + self.handle[handle][0], y + self.handle[handle][1]), ширины и высоты self.cells[cellIndex], тодолжно быть:

 hdl = self.handle[handle]
 cell = self.cells[cellIndex]
 surface.blit(self.sheet, (x + hdl[0], y + hdl[1], cell[2], cell[3]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...