Ошибка типа: аргумент 1 должен быть pygame.Surface, а не кортеж - PullRequest
0 голосов
/ 14 мая 2019

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

DISPLAYSURF.blit((catImg, dogImg), (catx, caty, dogx, dogy))

TypeError: аргумент 1 должен быть pygame.Surface,не кортеж

как мне решить эту проблему?Ваш ответ будет высоко оценен!Спасибо.:)

Я пытаюсь гуглить, но их ответ отличается от моего.

import pygame, sys
from pygame.locals import *

pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

DISPLAYSURF = pygame.display.set_mode((500, 500), 0, 32)
pygame.display.set_caption('Cat and Dog running.')

WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
dogImg = pygame.image.load('dog.png')
catx = 50
caty = 50
dogx = 25
dogy = 25
direction = 'right'

running = True
while running:
DISPLAYSURF.fill(WHITE)

if direction == 'right':
    catx += 5
    dogx += 5
    if catx == 250 and dogx == 250:
        direction = 'down'
elif direction == 'down':
    caty += 5
    dogy += 5
    if caty == 225 and dogy == 225:
        direction = 'left'
elif direction == 'left':
    catx -= 5
    dogx -= 5
    if catx == 10 and dogx == 10:
        direction = 'up'
elif direction == 'up':
    caty -= 5
    dogy -= 5
    if caty == 10 and dogy == 10:
        direction = 'right'

DISPLAYSURF.blit((catImg, dogImg), (catx, caty, dogx, dogy))

for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()

pygame.display.update()
fpsClock.tick(FPS)

1 Ответ

1 голос
/ 15 мая 2019

Ваша единственная проблема в том, что вы пытаетесь выбросить два изображения на поверхность одним вызовом.Разделение блитов на два разных вызова решит вашу проблему:

# can't blit two different images with one call
# DISPLAYSURF.blit((catImg, dogImg), (catx, caty, dogx, dogy))

#instead, use two calls
DISPLAYSURF.blit(catImg, (catx, caty))
DISPLAYSURF.blit(dogImg, (dogx, dogy))

Кроме того, вы можете изменить размер изображений, которые вы вводите.Как только он у вас есть, ваш код будет принимать изображения с их собственным разрешением, то есть они могут быть слишком большими или маленькими.Вы можете сделать это с помощью pygame.transform.scale(img, imgSize) следующим образом:

#also, you might want to resize the images used:
imgSize = (300, 300)
catImg = pygame.transform.scale(pygame.image.load('cat.png'), imgSize)
dogImg = pygame.transform.scale(pygame.image.load('dog.png'), imgSize)

Источник: https://www.pygame.org/docs/ref/surface.html#pygame.Surface.blit

...