Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame窗口保持空白_Python_Pygame - Fatal编程技术网

Python Pygame窗口保持空白

Python Pygame窗口保持空白,python,pygame,Python,Pygame,我正在PyGame中编程一个platformer,当我添加平台重力的代码(我甚至不确定它是否有效)时,窗口在为所有剩余的代码正常运行后变为空白 以下是我的最小可复制示例: 导入pygame pygame.init() win=pygame.display.set_模式((500480)) platform=pygame.image.load('platform.png') sprite=pygame.image.load('player.png') 平台=[] 类平台(对象): 定义初始化(se

我正在PyGame中编程一个platformer,当我添加平台重力的代码(我甚至不确定它是否有效)时,窗口在为所有剩余的代码正常运行后变为空白

以下是我的最小可复制示例:

导入pygame
pygame.init()
win=pygame.display.set_模式((500480))
platform=pygame.image.load('platform.png')
sprite=pygame.image.load('player.png')
平台=[]
类平台(对象):
定义初始化(self,x,y):
self.x=x
self.y=y
def抽签(自我,赢):
win.blit(平台,(self.x,self.y))
类播放器(对象):
定义初始化(self,x,y):
self.x=x
self.y=y
self.hitbox=(self.x,self.y,25,25)
self.speeded=0
def抽签(自我,赢):
win.blit(雪碧,(self.x,self.y))
pygame.draw.rect(赢,(255,0,0),self.hitbox,2)
#检查播放器是否在平台上或平台下
#如果他们是,那么他们就留下来
对于平台中的平台:
当self.hitbox[1]+self.hitbox[3]>=platform.y+36时:
检查=0
而self.hitbox[1]+self.hitbox[3]platform.y:
self.speeded-=1
self.y+=self.s
#使玩家摔倒,直到碰到平台
def下降(自我):
当check==1时:
自加速+=1
self.y+=self.s
触地
我原以为玩家在没有触到平台时会摔倒,触到平台时会留下来,但我看到的却是一个空白窗口,5秒钟后,它停止了响应。没有错误消息

以下是主要代码:

def重画游戏窗口():
温·布利特(背景,(0,0))
平局(赢)
地精。平局(赢)
对于平台中的平台:
平局(赢)
pygame.display.update()
运行=真
运行时:
时钟滴答作响(27)
如果级别==1:
p1=平台。追加(平台(150375,'中等')
p2=platforms.append(Platform(300325,'short'))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
重画游戏窗口()
pygame.quit()
一个问题是:

对于平台中的平台:
当self.hitbox[1]+self.hitbox[3]>=platform.y+36时:
检查=0
而self.hitbox[1]+self.hitbox[3]
当循环运行时,while循环中的条件永远不会改变。如果条件为
False
,则循环中的代码永远不会执行,或者如果其计算结果为
True
,则循环永远不会终止

目前尚不清楚该代码的用途。代码段更改变量的状态
检查
,但此变量在另一个循环中进行计算:

def下降(自身):
当check==1时:
自加速+=1
self.y+=self.s
触地
最后,这也是一个无止境的循环。原因和以前一样。循环运行时,
check
的状态不变


我建议分别阅读。请看一个简单的示例,它可以实现您想要的功能

代码的主要思想是方法
fall
。该方法将下降限制在窗口底部。此外,该方法会在玩家的“下方”找到平台,并将坠落限制在平台顶部。由于首先识别玩家下方的平台,然后执行坠落,最后限制坠落,因此该算法避免了玩家的“坠落”,即使玩家坠落的距离远大于平台和玩家高度之和

职业玩家(pygame.sprite.sprite):
# [...]
def下降(自我、胜利、平台):
#在播放器下方找到平台
如果p.rect.leftself.rect.left和
p、 rect.top>=self.rect.bottom]
#倒下
自加速+=1
self.rect.y+=自加速
如果self.rect.bottom>=win.get_height():
#限制在地面上
self.rect.bottom=win.get_height()
self.speeded=0
其他:
#限制在平台顶部
对于pl中的p:
如果self.rect.bottom>=p.rect.top:
self.rect.bottom=min(p.rect.top,self.rect.bottom)
self.speeded=0
使用精灵作为平台和播放器的完整示例。精灵按组组织:

导入pygame
pygame.init()
win=pygame.display.set_模式((500480))
clock=pygame.time.clock()
类平台(pygame.sprite.sprite):
定义初始化(self,x,y):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load('player.png')
self.rect=self.image.get_rect(左上=(x,y))
职业玩家(pygame.sprite.sprite):
定义初始化(self,x,y):
super()。\uuuu init\uuuuu()
self.image=pygame.image.load('platform.png')
self.rect=self.image.get_rect(左上=(x,y))
self.speeded=0
def下降(自我、胜利、平台):
#在播放器下方找到平台
如果p.rect.leftself.rect.left和
p、 rect.top>=self.rect.bottom]
#倒下
自加速+=1
self.rect.y+=自加速
如果self.rect.bottom>=win.get_height():
#限制在地面上
self.rect.bottom=win.get_height()
self.speeded=0
其他:
#限制在平台顶部
对于pl中的p: