简体   繁体   English

Pygame 参数 2 必须是 pygame.surface 而不是 str

[英]Pygame argument 2 must be pygame.surface not str

My code so far, the problem I have is that when I enter the sprite from the selection, I get an error stating that the argument must be surface not string.我的代码到目前为止,我遇到的问题是当我从选择中输入精灵时,我收到一个错误,指出参数必须是表面而不是字符串。 I am wondering how to fix this.我想知道如何解决这个问题。 What I am trying to do is have the user select a sprite from the following, SP1R, SP1O etcetera.我想要做的是让用户从以下 SP1R、SP1O 等中选择一个精灵。 But after I input one of the sprites, the program does not accept it and it gives the following error:但是在我输入其中一个精灵后,程序不接受它并给出以下错误:

 Traceback (most recent call last): File "C:\\Users\\User\\Documents\\Pygame\\pygame1.py", line 90, in <module> drawGrid() File "C:\\Users\\User\\Documents\\Pygame\\pygame1.py", line 60, in drawGrid win.blit (UserSprite, (500, 500)) TypeError: argument 1 must be pygame.Surface, not str
import pygame #Imports pygame
pygame.init() #Initialises pygame

win = pygame.display.set_mode((700, 700)) #Sets window size

pygame.display.set_caption("T1") #Sets title to T1

SP1R = pygame.image.load('Sprite 1 Red.png')
SP1O = pygame.image.load('Sprite 1 Orange.png')
SP1Y = pygame.image.load('Sprite 1 Yellow.png')
SP1G = pygame.image.load('Sprite 1 Green.png')
SP1B = pygame.image.load('Sprite 1 Blue.png')
SP1PU = pygame.image.load('Sprite 1 Purple.png')
SP1PI = pygame.image.load('Sprite 1 Pink.png')
SP2R = pygame.image.load('Sprite 2 Red.png')
SP2O = pygame.image.load('Sprite 2 Orange.png')
SP2Y = pygame.image.load('Sprite 2 Yellow.png')
SP2G = pygame.image.load('Sprite 2 Green.png')
SP2B = pygame.image.load('Sprite 2 Blue.png')
SP2PU = pygame.image.load('Sprite 2 Purple.png')
SP2PI = pygame.image.load('Sprite 2 Pink.png')
SP3R = pygame.image.load('Sprite 3 Red.png')
SP3O = pygame.image.load('Sprite 3 Orange.png')
SP3Y = pygame.image.load('Sprite 3 Yellow.png')
SP3G = pygame.image.load('Sprite 3 Green.png')
SP3B = pygame.image.load('Sprite 3 Blue.png')
SP3PU = pygame.image.load('Sprite 3 Purple.png')
SP3PI = pygame.image.load('Sprite 3 Pink.png')

x = 300 #x character position set to 50
y = 520 #y character position set to 50
width = 64 #width set to 40
height = 64 #height set to 60
vel = 10 #Character speed set to 5
white = (255, 255, 255)
left = False
right = False
UserSprite = input("""Choose a sprite the options are
SP1R, SP1O, SP1Y, SP1G, SP1B, SP1PU, SP1PI
SP2R, SP2O, SP2Y, SP2G, SP2B, SP2PU, SP2PI
SP3R, SP3O, SP3Y, SP3G, SP3B, SP3PU, SP3PI""")
while UserSprite != (SP1R or SP1O or SP1Y or SP1G or SP1B or SP1PU or SP1PI or SP2R or SP2O or SP2Y or SP2G or SP2B or SP2PU or SP3PI or SP3R or SP3O or SP3Y or SP3G or SP3B or SP3PU or SP3PI):
    print ("Nope")
    break


def drawGrid():
    win.fill((0, 0, 0))
    if left:
        win.blit(walkLeft)#draws the following sprites
    elif right:
        win.blit(walkRight)
    pygame.display.update() #updates the display by doing the above
    pygame.draw.line(win, white, [50,50], [50, 600], 5)
    pygame.draw.line(win, white, [50,50], [600, 50], 5)
    pygame.draw.line(win, white, [600,600], [600, 50], 5)
    pygame.draw.line(win, white, [50,600], [600, 600], 5)
    pygame.draw.line(win, white, [50,450], [600, 450], 5)
    pygame.display.update()
    win.blit (UserSprite, (500, 500))

run = True #sets run to true
while run: #While loop for above
    pygame.time.delay(100) #Sets a delay to prevent crashing

    for event in pygame.event.get(): #For loop for event

        if event.type == pygame.QUIT: #If user quits window
            run = False #Do not run

    keys = pygame.key.get_pressed()#Sets keybinds

    if keys[pygame.K_a] and x>55:
        x -= vel
        left = True
        right = False
    elif keys[pygame.K_d] and x <575:
        x += vel
        right = True
        left = False
    if keys[pygame.K_w] and y >455:
        y -= vel
        up = True
        down = False
    elif keys[pygame.K_s] and y <565:
        y += vel
        down = True
        up = False

drawGrid()

After the input输入后

UserSprite = input("""Choose a sprite [...]""")

the content of the variable UserSprite is a string.变量UserSprite的内容是一个字符串。 You have to find the variable with the name, which is stored in the variable UserSprite .您必须找到具有名称的变量,该变量存储在变量UserSprite
You can get the dictionary with the local variables by the built in function vars() , when you call it without any parameter.当您在没有任何参数的情况下调用它时,您可以通过内置函数vars()获取带有局部变量的字典。 This means vars()["SP1R"] will return the object SP1R .这意味着vars()["SP1R"]将返回对象SP1R

SpriteName = input("""Choose a sprite [...]""")
UserSprite = vars()[SpriteName] if SpriteName in vars() else None

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM