У меня возникают проблемы, такие как окно pygame на "не отвечает", [...]
Первое, что вам нужно сделать, это добавить событие enloop to main loop приложения.
pygame.event
удаляет ожидающее сообщение о событии из очереди и возвращает его.По крайней мере, вы должны обработать событие QUIT
.Установите значение управляющей переменной для основного цикла False
:
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
Плитки на листе спрайтов не имеют одинаковый размер.Ограничьте список cells
некоторыми частями листа одинакового размера.
Попробуйте выполнить следующее:
class spritesheet:
def __init__(self, filename, py, tw, th, tiles):
self.sheet = pygame.image.load(filename).convert_alpha()
self.py = py
self.tw = tw
self.th = th
self.totalCellCount = tiles
self.rect = self.sheet.get_rect()
w, h = tw, th
hw, hh = self.cellCenter = (w / 2, h / 2)
self.cells = [(1+i*tw, self.py, tw-1, th-1) for i in range(tiles)]
self.handle = list([
(0,0), (-hw, 0), (-w, 0),
(0, -hh), (-hw, -hh), (-w, -hh),
(0, -h), (-hw, -h), (-w, -h),])
s = spritesheet('Number18.png', 1085, 80, 134, 8)
[...] изображение делаетне загружается [...]
Убедитесь, что изображение находится в рабочем каталоге приложения.
Если вы хотите нарисовать вспомогательное изображение таблицы, то вы 've для установки параметра area
(3-й параметр) pygame.Surface.blit
в область прямоугольника подизображения:
def draw(self, surface, cellIndex, x, y, handle = 0):
hdl = self.handle[handle]
surface.blit(self.sheet, (x + hdl[0], y + hdl[1]), area=self.cells[cellIndex])
[...] Я не могу двигаться [...]
Вы должны изменить положение спрайта.Обработка события KEYDOWN
.Сохраните положение спрайта (px
, py
).Изменение положения при нажатии клавиши K_UP
, K_DOWN
, K_LEFT
или K_RIGHT
:
run = True
px, py, speed = HW, HH, 10
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
py -= speed
elif event.key == pygame.K_DOWN:
py += speed
elif event.key == pygame.K_LEFT:
px -= speed
elif event.key == pygame.K_RIGHT:
px += speed