【问题标题】:Pygame error argument must be pygame.surface not NonePygame 错误参数必须是 pygame.surface 而不是 None
【发布时间】:2019-03-18 19:17:25
【问题描述】:

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

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()

【问题讨论】:

  • blit( 之间有一个空格,这是我要开始的地方
  • while UserSprite != (SPR1...) 没用,因为你break 无论如何都是循环。输入是什么?注意,您必须输入大写字母。
  • 这一行UserSprite = vars()[SpriteName] if SpriteName in vars() else None 可能将None 分配给UserSprite。你确定你输入了一个有效的名字吗?尝试打印vars() 内容并查看精灵是否存在。

标签: python pygame sprite


【解决方案1】:

循环

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

是没用的,因为无论如何你break 循环。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2020-10-10
    • 2021-03-07
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多