PythonPyGame在空闲状态下运行模块时总是崩溃并且没有响应

PythonPyGame在空闲状态下运行模块时总是崩溃并且没有响应,python,crash,pygame,Python,Crash,Pygame,我对Pygame甚至Python都很陌生,但我知道,当中的某些内容不正确时,它会在Python Shell中显示一些文本,告诉您出现了一些错误。事实上,我遇到过很多这样的问题,这次,它终于运行并显示了窗口,但它没有响应。我知道我的整个代码中可能有一些错误,所以请随时纠正我(请解释一下,因为我对这些东西还是新手) 代码在下面,但是如果它能帮助你,如果你要求它,我会看看我是否也能发布文件。无论如何,以下是代码: #import Modules import os, sys import pygame

我对Pygame甚至Python都很陌生,但我知道,当中的某些内容不正确时,它会在Python Shell中显示一些文本,告诉您出现了一些错误。事实上,我遇到过很多这样的问题,这次,它终于运行并显示了窗口,但它没有响应。我知道我的整个代码中可能有一些错误,所以请随时纠正我(请解释一下,因为我对这些东西还是新手)

代码在下面,但是如果它能帮助你,如果你要求它,我会看看我是否也能发布文件。无论如何,以下是代码:

#import Modules
import os, sys
import pygame
from pygame.locals import *

background_img="C:/Users/JM/Documents/Python/Pygame_Alpha/background_img.jpg"
cursor_img="C:/Users/JM/Documents/Python/Pygame_Alpha/pygameCursor.png"

def load_image(img_file, colorkey=None):
    file_pathname = os.path.join("\Users\JM\Documents\Python\Pygame_Alpha",img_file)

    try:
        image = pygame.image.load(file_pathname).convert_alpha()

    except pygame.error, message:
        print "Can't load image:", file_pathname
        raise SystemExit, message

    image = image.convert()

    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
    image.set_colorkey(colorkey, RLEACCEL)

    return image, image.get_rect()



#Main character's position and movements
char_x,char_y = 0,0
char_go_x,char_go_y = 0,0

#Main char class
class char(pygame.sprite.Sprite):
 """Main Character"""
     def __init__(self):
        pygame.sprite.Sprite.__init__(self)#call Sprite initializer
        self.image, self.rect = load_image("char_img.png", -1)
        self.jumping = 0

    def update(self):
        self.rect.midtop = char_x,char_y
        if self.jumping == 1:
        self.rect.move_ip(-35,-3)


    def char_no_jump(self):
        self.jumping = 0

    pygame.init()
    pygame.display.set_caption("pygame_Alpha")
    screen = pygame.display.set_mode((800,480),0,32)
    background = pygame.image.load(background_img).convert()
    cursor = pygame.image.load(cursor_img).convert_alpha()

    char = char()

    clock = pygame.time.Clock()
    millisec = clock.tick()
    sec = millisec/1000.0

    char_fall = sec*25
    jump = sec*50

    #blit the background
    screen.blit(background,(0,0))

    #Main Loop
    while 1:

       #Tell pygame not to exceed 60 FPS
       clock.tick(60)


       #Events
       for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

            #Events triggered when a key/s is/are pressed
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                elif event.key == K_UP or event.key == K_w:
                    char.jumping = 1

                elif event.key == K_DOWN or event.key == K_s:
                    char_go_y += 1
                elif event.key == K_LEFT or event.key == K_a:
                    char_go_x -= 0.5                
                elif event.key == K_RIGHT or event.key == K_d:
                    char_go_x += 0.75
                    if char_x > 800:
                        char_x = 0

            #Events triggered when a key/s is/are released
            if event.type == KEYUP:
                if event.key == K_UP or event.key == K_w:
                    char_go_y += 1
                elif event.key == K_DOWN or event.key == K_s:
                    char_go_y = 0
                elif event.key == K_LEFT or event.key == K_a:
                    char_go_x = 0
                    if char_x < 0:
                    char_x = 0
                elif event.key == K_RIGHT or event.key == K_d:
                    char_go_x = 0
                    if char_x > 700:
                    char_x = 0

        char.update()
        while char_y < 200:
        char_go_y += char_fall

        if char_y > 200:
        char_y = 200

        #Update values of position of Main Char
        char_x += char_go_x
        char_y += char_go_y

        #Position Variables of Cursor Image, setting its values equal to cursor pos, and blit it to screen
        cursor_x,cursor_y = pygame.mouse.get_pos()
        cursor_x -= cursor.get_width()/2
        cursor_y -= cursor.get_height()/2
        screen.blit(cursor,(cursor_x,cursor_y))

        pygame.display.update()
#导入模块
导入操作系统,系统
导入pygame
从pygame.locals导入*
background\u img=“C:/Users/JM/Documents/Python/Pygame\u Alpha/background\u img.jpg”
cursor_img=“C:/Users/JM/Documents/Python/Pygame_Alpha/pygameCursor.png”
def load_图像(img_文件,colorkey=None):
file\u pathname=os.path.join(“\Users\JM\Documents\Python\Pygame\u Alpha”,img\u文件)
尝试:
image=pygame.image.load(文件路径名).convert\u alpha()
除了pygame.error,消息:
打印“无法加载图像:”,文件路径名
升起系统退出,消息
image=image.convert()
如果colorkey不是None:
如果colorkey为-1:
colorkey=image.get_位于((0,0))
图像。设置颜色键(颜色键,RLEACCEL)
返回image,image.get_rect()
#主角的位置和动作
char_x,char_y=0,0
char\u go\u x,char\u go\u y=0,0
#主字符类
类字符(pygame.sprite.sprite):
“主要字符”
定义初始化(自):
pygame.sprite.sprite.\uuuu初始化(self)\uuuu调用sprite初始值设定项
self.image,self.rect=load\u image(“char\u img.png”,-1)
自跳=0
def更新(自我):
self.rect.midtop=char\u x,char\u y
如果self.jumping==1:
自校正移动ip(-35,-3)
def char_no_跳转(自):
自跳=0
pygame.init()
pygame.display.set_标题(“pygame_Alpha”)
screen=pygame.display.set_模式((800480),0,32)
background=pygame.image.load(background\u img.convert())
cursor=pygame.image.load(cursor\u img.convert\u alpha()
char=char()
clock=pygame.time.clock()
毫秒=时钟滴答()
秒=毫秒/1000.0
char_fall=秒*25
跳跃=秒*50
#背景光
屏幕光点(背景,(0,0))
#主回路
而1:
#告诉pygame不要超过60 FPS
时钟滴答(60)
#事件
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
#按键时触发的事件
如果event.type==KEYDOWN:
如果event.key==K_转义:
pygame.quit()
sys.exit()
elif event.key==K\u UP或event.key==K\u w:
char.jumping=1
elif event.key==K_DOWN或event.key==K_s:
char_go_y+=1
elif event.key==K_LEFT或event.key==K_a:
char_go_x-=0.5
elif event.key==K_RIGHT或event.key==K_d:
char_go_x+=0.75
如果字符x>800:
char_x=0
#释放钥匙时触发的事件
如果event.type==KEYUP:
如果event.key==K\u UP或event.key==K\u w:
char_go_y+=1
elif event.key==K_DOWN或event.key==K_s:
char\u go\u y=0
elif event.key==K_LEFT或event.key==K_a:
char\u go\u x=0
如果char_x<0:
char_x=0
elif event.key==K_RIGHT或event.key==K_d:
char\u go\u x=0
如果字符>700:
char_x=0
char.update()
当字符小于200时:
char\u go\u y+=char\u fall
如果字符>200:
字符y=200
#更新主字符位置的值
char_x+=char_go_x
char_y+=char_go_y
#定位光标图像的变量,将其值设置为光标位置,并将其显示在屏幕上
cursor\u x,cursor\u y=pygame.mouse.get\u pos()
cursor\u x-=cursor.get\u width()/2
cursor\u y-=cursor.get\u height()/2
blit(光标,(光标x,光标y))
pygame.display.update()

运行idle时是否有任何错误消息?每当屏幕冻结时,您就有问题,但如果不知道错误消息,就很难准确指出问题所在。打开图片可能有问题,您应该尝试将.convert()放在图片文件名的末尾,但这只是猜测。

while char_y < 200:
           char_go_y += char_fall
字符<200时:
char\u go\u y+=char\u fall
除非你有一些我没有看到的有趣的别名,否则如果char_y<200(应该是在开始时,因为你正在更新char_go_y,所以它总是这样)


如果不是这个问题,我们仍然建议添加一些打印,以确定它是否通过了循环。

调用pygame.quit和sys.exit可能会导致问题。通常情况下,pygame中不需要它们

而不是:

#Main Loop
while 1:

   #Tell pygame not to exceed 60 FPS
   clock.tick(60)


   #Events
   for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
这样做

#Main Loop
done = False
while not done:
   clock.tick(60)

   for event in pygame.event.get():
        if event.type == QUIT:
            done = True
        if event.type == KEYDOWN:
            if event.key == K_ESC:
                done = True

你能修改格式吗?很难确定循环的开始和结束位置,但看起来你可能有一个while循环,它只执行时钟。勾选(60)我还修改了格式,但我知道它仍然很混乱,这是一件奇怪的事情,因为Python shell/IDLE中没有文本,它就是不响应。我如何在这里发布屏幕截图?我也是一个新用户。我才13岁,刚刚开始学习这整件事。还有.convert()的东西?!我已经用过了。convert()或者在我加载的所有图像中使用.convert_alpha()。使用convert_alpha()可以使图像中的“alpha”层透明显示。感谢您的帮助。伙计,您真是个天才!我发现了一个错误(al