Делая игру, я не могу импортировать фоновое изображение или спрайт - PullRequest
2 голосов
/ 12 октября 2019

Я - новый программист, пытающийся создать 2D-скроллер с платформерной битвой, и я уже создал свой фон и спрайт персонажа, но я пытаюсь blit добавить их в свой код, но я получаюошибка, говорящая, что

Первый аргумент должен быть pygame.Surface()

Когда я это делаю, он говорит мне

ValueError:размер должен быть (int width, int height)

Я рассмотрел довольно много вопросов по этому поводу, перепробовал кучу вещей, и ничего не работает. Пожалуйста, помогите.

import pygame
pygame.init()

global X, Y, gameBackground
bg = [pygame.image.load("pygame/gameBackground.png")]
char = [pygame.image.load("pygame/characterStandingRight.png")]
#I have my .png files in a folder named "pygame" inside of my general program folder
windowWidth = 1366
windowHeight = 697
Width = 40
Height = 64
X = 5
Y = windowHeight - (Height + 5)
tick = 30
run = True

def redrawGameWindow():
    window.blit(pygame.Surface(bg), (0, 0)) #draws Window Background
    window.blit(pygame.Surface(char), (X, Y)) #draws Character Sprite
    pygame.display.update()
#above is where I have my errors of "pygame.Surface" and "(int width, int height)"

window = pygame.display.set_mode((windowWidth, windowHeight))
pygame.display.set_caption("Game")

while run:
    pygame.time.delay(tick)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    #other game code which controls character movement functions
    redrawGameWindow()

pygame.quit()
quit()

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Ошибка вызвана pygame.Surface(bg) соответственно bygame.Surface(char), где bg и char - списки объектов. Не существует конструктора pygame.Surface другой Surface или даже списка объектов Surface.

Обратите внимание, что у вас есть список фонов и список символов

bg   = [ pygame.image.load("pygame/gameBackground.png") ]
char = [ pygame.image.load("pygame/characterStandingRight.png") ]

Для доступа к объекту в списке вы должны использовать оператор индекса (например, char[0]). bg[0] и char[0] являются pygame.Surface объектами и могут использоваться непосредственно в методе blit(). Например:

def redrawGameWindow():
    window.blit(bg[0], (0, 0))
    window.blit(char[0], (X, Y))
    pygame.display.update()

Если вам нужен только один pygame.Surface, вам придется пропустить square brackets (например, bg = pygame.image.load("pygame/gameBackground.png")).

bg   = pygame.image.load("pygame/gameBackground.png")
char = pygame.image.load("pygame/characterStandingRight.png")
def redrawGameWindow():
    window.blit(bg, (0, 0))
    window.blit(char, (X, Y))
    pygame.display.update()
1 голос
/ 12 октября 2019

Я думаю, что вы кладете список в блиц, что приводит к ошибке. Должно быть:

window.blit(bg[0], (0, 0)) #draws Window Background
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...