python - Pygame 错误参数必须是 pygame.surface 而不是 None

标签 python pygame sprite

我遇到的问题是当我输入 Sprite 时出现错误,错误状态为:

Traceback (most recent call last):
  File "C:\Users\User\Documents\Pygame\pygame1.py", line 88, in <module>
    drawGrid()
  File "C:\Users\User\Documents\Pygame\pygame1.py", line 58, in drawGrid
    win.blit (UserSprite, (500, 500))
TypeError: argument 1 must be pygame.Surface, not None

我的代码:

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
SpriteName = input("""Choose a sprite [...]""")
UserSprite = vars()[SpriteName] if SpriteName in vars() else None
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()

最佳答案

循环

while UserSprite != (SPR1...)
    print ("Nope")
    break

没用,因为无论如何你都会打破循环。

重复输入,直到读取到有效名称:

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

注意,必须输入大写字母,因为所有变量名都是大写字母。输入必须区分大小写。

关于python - Pygame 错误参数必须是 pygame.surface 而不是 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55228605/

相关文章:

python - 如何找到多维字典的最小值?

python - 当两个 python 脚本访问单个 pickle 文件时,如何避免读取错误?

Python pandas 时间序列插值和正则化

Python - Pygame - 获取特定声音是否正在播放

python-3.x - Pygame TypeError : 'int' object is not callable

opengl-es - OpenGL ES 2.0 绘制多个纹理

python - 如何用漂亮的汤从谷歌抓取一张图片?

python - 如何在python和pygame中获取鼠标输入

java - 有谁知道任何 Sprite Collection ?

java - 如何消除平铺纹理之间的间隙?