【发布时间】: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()内容并查看精灵是否存在。