我的实例有问题';s函数不工作(Python3,Pygame),请检查我的代码?

我的实例有问题';s函数不工作(Python3,Pygame),请检查我的代码?,python,class,pygame,Python,Class,Pygame,我一直试图把我的主角变成一个我可以在游戏中调用的类。这是因为我知道在开发的后期,由于计划实施敌人和生成可升级的电源,它将变得更加复杂 出于某种原因,我的精灵将被绘制,但获取的方法使其检测到我的关键点,然后移动(getkey、animandmove)似乎不起作用,因为按下任何输入都不会移动它。请帮忙 import pygame from pygame.locals import * import sys import pyganim # used for animations pygame.i

我一直试图把我的主角变成一个我可以在游戏中调用的类。这是因为我知道在开发的后期,由于计划实施敌人和生成可升级的电源,它将变得更加复杂

出于某种原因,我的精灵将被绘制,但获取的方法使其检测到我的关键点,然后移动(getkey、animandmove)似乎不起作用,因为按下任何输入都不会移动它。请帮忙

import pygame
from pygame.locals import *
import sys
import pyganim  # used for animations

pygame.init()
pygame.mixer.init()

WINDOWWIDTH = 1600
WINDOWHEIGHT = 900

# x = 100
# y = 100
# vel = 10
# width = 64
# height = 64
# moveleft = moveright = moveup = movedown = False
# direction = 'left'

background = pygame.image.load('sprites/background1.png')
leftidle = pygame.image.load("sprites/left.png")
rightidle = pygame.image.load("sprites/right.png")
upidle = pygame.image.load("sprites/up.png")
downidle = pygame.image.load("sprites/down.png")

charanim = {"walkleft": pyganim.PygAnimation(
[("sprites/left2.png", 100), ("sprites/left.png", 100), ("sprites/left3.png", 100), ("sprites/left.png", 10)]),
"walkright": pyganim.PygAnimation(
    [("sprites/right2.png", 100), ("sprites/right.png", 100), ("sprites/right3.png", 100),
     ("sprites/right.png", 10)]), "walkup": pyganim.PygAnimation(
    [("sprites/up2.png", 100), ("sprites/up.png", 100), ("sprites/up3.png", 100), ("sprites/up.png", 10)]),
"walkdown": pyganim.PygAnimation(
    [("sprites/down2.png", 100), ("sprites/down.png", 100), ("sprites/down3.png", 100), ("sprites/down.png", 10)])}
moveConductor = pyganim.PygConductor(charanim)

mainmenuanim = {"splashscreen": pyganim.PygAnimation([("sprites/splash1.png", 500), ("sprites/splash2.png", 500)])}
mainmenuConductor = pyganim.PygConductor(mainmenuanim)

muzzleflashanim = {"fire": pyganim.PygAnimation(
[("sprites/muzzleflash.png", 100), ("sprites/muzzleflash2.png", 100),                 ("sprites/muzzleflash3.png", 100),
 ("sprites/muzzleflash4.png", 100)])}

mainwin = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption("2084 Ver 0.1.1.1")


def mainmenu():
global running
menulive = True
pygame.mixer.music.load('track0.ogg')
pygame.mixer.music.play(-1)
while menulive:
    mainmenuConductor.play()
    mainmenuanim["splashscreen"].blit(mainwin, (0, 0))
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_RETURN:
                pygame.mixer.music.stop()
                mainloop()

        if event.type == pygame.QUIT:
            running = False
            pygame.quit()

    pygame.display.update()


def mainloop():
global running
running = True
char1 = Character()
pygame.mixer.music.load("track1.ogg")
pygame.mixer.music.play(-1)
char1.__init__()
while running:
    mainwin.blit(background, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    char1.getkey()
    char1.animandmove()
    pygame.display.update()


class Character:

def __init__(self):
    self.x = 100
    self.y = 100
    self.vel = 10
    self.width = 64
    self.height = 64
    self.moveleft = False
    self.moveright = False
    self.moveup = False
    self.movedown = False
    self.direction = 'left'

def animandmove(self):
    if self.moveleft or self.moveright or self.moveup or self.movedown:
        moveConductor.play()

        # draws animations for each of the directions
        if self.direction == "left":
            charanim["walkleft"].blit(mainwin, (self.x, self.y))
        elif self.direction == "right":
            charanim["walkright"].blit(mainwin, (self.x, self.y))
        elif self.direction == "up":
            charanim["walkup"].blit(mainwin, (self.x, self.y))
        elif self.direction == "down":
            charanim["walkdown"].blit(mainwin, (self.x, self.y))

        # moving the physicial character
        if self.moveleft and self.x > 0:
            self.x -= self.vel
        if self.moveright and self.x < (WINDOWWIDTH - 64):
            self.x += self.vel
        if self.moveup and self.y > 0:
            self.y -= self.vel
        if self.movedown and self.y < (WINDOWHEIGHT - 64):
            self.y += self.vel
    else:
        moveConductor.stop()
        if self.direction == "left":
            mainwin.blit(pygame.image.load("sprites/left.png"), (self.x, self.y))
        elif self.direction == "right":
            mainwin.blit(pygame.image.load("sprites/right.png"), (self.x, self.y))
        elif self.direction == "up":
            mainwin.blit(pygame.image.load("sprites/up.png"), (self.x, self.y))
        elif self.direction == "down":
            mainwin.blit(pygame.image.load("sprites/down.png"), (self.x, self.y))

def getkey(self):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
        elif event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            if event.key == K_LEFT or event.key == K_a:
                self.moveleft = True
                self.moveright = False
                if not self.moveup and not self.movedown:
                    self.direction = "left"
            elif event.key == K_RIGHT or event.key == K_d:
                self.moveleft = False
                self.moveright = True
                if not self.moveup and not self.movedown:
                    self.direction = "right"
            elif event.key == K_UP or event.key == K_w:
                self.moveup = True
                self.movedown = False
                if not self.moveleft and not self.moveright:
                    self.direction = "up"
            elif event.key == K_DOWN or event.key == K_s:
                self.moveup = False
                self.movedown = True
                if not self.moveleft and not self.moveright:
                    self.direction = "down"
        elif event.type == KEYUP:
            if event.key == K_LEFT or event.key == K_a:
                self.moveleft = False
                if self.moveup:
                    self.direction = "up"
                if self.movedown:
                    self.direction = "down"
            elif event.key == K_RIGHT or event.key == K_d:
                self.moveright = False
                if self.moveup:
                    self.direction = "up"
                if self.movedown:
                    self.direction = "down"
            elif event.key == K_UP or event.key == K_w:
                self.moveup = False
                if self.moveleft:
                    self.direction = "left"
                if self.moveright:
                    self.direction = "right"
            elif event.key == K_DOWN or event.key == K_s:
                self.movedown = False
                if self.moveleft:
                    self.direction = "left"
                if self.moveright:
                    self.direction = "right"

        pygame.display.update()


mainmenu()

pygame.quit()
导入pygame
从pygame.locals导入*
导入系统
导入用于动画的pyganim
pygame.init()
pygame.mixer.init()
窗宽=1600
窗高=900
#x=100
#y=100
#水平=10
#宽度=64
#高度=64
#moveleft=moveright=moveup=movedown=False
#方向=‘左’
background=pygame.image.load('sprites/background1.png')
leftidle=pygame.image.load(“sprites/left.png”)
rightidle=pygame.image.load(“sprites/right.png”)
upidle=pygame.image.load(“sprites/up.png”)
downidle=pygame.image.load(“sprites/down.png”)
charanim={“walkleft”:pyganim.pyganization(
[((“sprites/left2.png”,100),(“sprites/left.png”,100),(“sprites/left3.png”,100),(“sprites/left.png”,10)],
“walkright”:pyganim.PygAnimation(
[((“sprites/right2.png”,100),(“sprites/right.png”,100),(“sprites/right3.png”,100),
(“sprites/right.png”,10)],“walkup”:pyganim.pyganization(
[((“sprites/up2.png”,100),(“sprites/up.png”,100),(“sprites/up3.png”,100),(“sprites/up.png”,10)],
“巡检”:pyganim.PygAnimation(
[((“sprites/down2.png”,100),(“sprites/down.png”,100),(“sprites/down3.png”,100),(“sprites/down.png”,10)])
moveConductor=pyganim.PygConductor(charanim)
mainmenuanim={“splashscreen”:pyganim.pyganization([((“sprites/splash1.png”,500),(“sprites/splash2.png”,500)])
mainmenuConductor=pyganim.PygConductor(mainmenuanim)
muzzleflashanim={“火”:pyganim.PygAnimation(
[((“sprites/muzzleflash.png”,100),(“sprites/muzzleflash2.png”,100),(“sprites/muzzleflash3.png”,100),
(“sprites/muzzleflash4.png”,100)])
mainwin=pygame.display.set_模式((窗口宽度、窗口高度))
pygame.display.set_标题(“2084版本0.1.1.1”)
def主菜单():
全球运行
menulive=True
pygame.mixer.music.load('track0.ogg')
pygame.mixer.music.play(-1)
虽然menulive:
mainmenuConductor.play()
mainmenuanim[“splashscreen”].blit(mainwin,(0,0))
对于pygame.event.get()中的事件:
如果event.type==KEYDOWN:
如果event.key==K_返回:
pygame.mixer.music.stop()
mainloop()
如果event.type==pygame.QUIT:
运行=错误
pygame.quit()
pygame.display.update()
def mainloop():
全球运行
运行=真
char1=字符()
pygame.mixer.music.load(“track1.ogg”)
pygame.mixer.music.play(-1)
char1.\uuuuu init\uuuuuuuu()
运行时:
mainwin.blit(背景,(0,0))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
char1.getkey()
char1.animandmove()
pygame.display.update()
类别字符:
定义初始化(自):
self.x=100
self.y=100
self.vel=10
self.width=64
self.height=64
self.moveleft=False
self.moveright=False
self.moveup=False
self.movedown=False
self.direction='left'
def animandmove(自身):
如果self.moveleft或self.moveright或self.moveup或self.movedown:
移动指挥。播放()
#为每个方向绘制动画
如果self.direction==“left”:
charanim[“walkleft”].blit(mainwin,(self.x,self.y))
elif self.direction==“right”:
charanim[“walkright”].blit(mainwin,(self.x,self.y))
elif self.direction==“向上”:
charanim[“walkup”].blit(mainwin,(self.x,self.y))
elif self.direction==“向下”:
charanim[“walkdown”].blit(mainwin,(self.x,self.y))
#移动身体特征
如果self.moveleft和self.x>0:
self.x-=self.vel
如果self.moveright和self.x<(窗口宽度-64):
self.x+=self.vel
如果self.moveup和self.y>0:
self.y-=self.vel
如果self.movedown和self.y<(窗口高度-64):
self.y+=self.vel
其他:
moveConductor.stop()
如果self.direction==“left”:
blit(pygame.image.load(“sprites/left.png”),(self.x,self.y))
elif self.direction==“right”:
blit(pygame.image.load(“sprites/right.png”),(self.x,self.y))
elif self.direction==“向上”:
blit(pygame.image.load(“sprites/up.png”),(self.x,self.y))
elif self.direction==“向下”:
blit(pygame.image.load(“sprites/down.png”),(self.x,self.y))
def getkey(自):
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
elif event.type==KEYDOWN:
如果event.key==K_转义:
pygame.quit()
sys.exit()
如果event.key==K_LEFT或event.key==K_a:
self.moveleft=True
self.moveright=False
如果不是self.moveup和self.movedown:
self.direction=“左”
elif event.key==K_RIGHT或event.key==K_d:
self.moveleft=False
self.moveright=True
如果不是self.moveup和self.movedown:
self.direction=“right”
elif event.key==K\u UP或event.key==K\u w:
self.moveup=True
self.movedown=False
如果不是self.moveleft和非self.moveright:
self.direction=“向上”
elif event.key==K_DOWN或event.key==K_s:
self.moveup=False
self.movedown=True
如果不是self.moveleft和非self.moveright:
while running:
    mainwin.blit(background, (0, 0))
    for event in pygame.event.get():
        char1.getkey(event)
        if event.type == pygame.QUIT:
            pygame.quit()
    char1.animandmove()
    pygame.display.update()
def getkey(self, event):
    if event.type == ...
        ...