如何解决为什么它是本地的,因为我使用的是全局的?
import pygame,os,random,time # Packages that I will use
from spritesheet import SpriteSheet
pygame.init() # Little pygame function to initiate all the modules
WHITE = (255,255,255)
# Window basic information
WIDTH,HEIGHT = 1280,720
win = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("The zombies are COMING!!")
# Sprites
size = (70,70)
environment = pygame.transform.scale(pygame.image.load(os.path.join('Assets','Graveyard.png')),(WIDTH,HEIGHT))
heart = pygame.transform.scale(pygame.image.load(os.path.join('Assets','Heart.png')),(size))
bullet = pygame.transform.scale(pygame.image.load(os.path.join('Assets','Bullet.png')),(size))
sword = pygame.transform.scale(pygame.image.load(os.path.join('Assets','Sword.png')),(size))
rocketLauncher = pygame.transform.scale(pygame.image.load(os.path.join('Assets','Rocket Launcher.png')),(size))
shotgun = pygame.transform.scale(pygame.image.load(os.path.join('Assets','Shotgun.png')),(size))
# Sprite Sheet
spritesheet = SpriteSheet(r'Assets/Ninja Idle.png')
sprite1 = spritesheet.get_sprite(0,16,16)
sprite1 = pygame.transform.scale((sprite1),(100,100))
sprite2 = spritesheet.get_sprite(16,16)
sprite2 = pygame.transform.scale((sprite2),100))
spriteIdle = [sprite1,sprite2]
index = 0
class Player:
def __init__(self,x,y,lives,ammunition):
self.lives = lives
self.ammunition = ammunition
self.x = x
self.y = y
def drawPlayer(self,win):
#pygame.draw.rect(win,(255,0),(self.x,self.y,50,50))
win.blit(spriteIdle[index])
def main(): # Main loop
run = True
FPS = 60
clock = pygame.time.Clock()
wave = 1
lives = 5
ammunition = 1
veLocity = 5
player = Player(WIDTH/2,HEIGHT/2,ammunition)
def windoWrenderer (): # Func to update the screen according the events
win.blit(environment,(0,0))
main_font = pygame.font.SysFont("comicsans",50)
lives_label = main_font.render(f"{lives}",1,(WHITE))
wave_label = main_font.render(f"Wave: {wave}",(WHITE))
ammunition_label = main_font.render(f"{ammunition}",(WHITE))
player.drawPlayer(win)
win.blit(heart,(WIDTH - 150,0))
win.blit(bullet,70))
win.blit(lives_label,(WIDTH - 50,20))
win.blit(wave_label,(WIDTH/2-70,20))
win.blit(ammunition_label,95))
pygame.display.update()
while run:
clock.tick(240)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
key = pygame.key.get_pressed()
if key[pygame.K_a] and player.x > 0:
player.x -= veLocity
if key[pygame.K_d] and player.x + veLocity < WIDTH - 49:
player.x += veLocity
if key[pygame.K_w] and player.y > 0:
player.y -= veLocity
if key[pygame.K_s] and player.y + veLocity < HEIGHT - 49:
player.y += veLocity
else:
index = (index + 1) % len(spriteIdle)
windoWrenderer()
main()
如果您尝试运行该代码,它会回答说在取消分配之前引用了一个局部变量。但是“索引”变量是全局形式的。
我也尝试过非本地形式,但是……也没有结果。
我还尝试将索引变量移动到“main()”函数。但如果我尝试这样做,我对角色本身就没有太多控制权。
具体来说,错误发生在第 86 行。索引变量在第 32 行。
错误信息是“UnboundLocalError: local variable 'index' referenced before assignment”
我正在使用 pygame,但您无需为此担心太多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。