我被屏幕撕裂问题困扰了大约一周。
这里是我的问题:我想做一个程序,可以显示一个PNG图片序列非常快(以30帧或以上的速度)。为此,我使用pygame库,尤其是pygame。陈列blit
和pygame。陈列翻转
。
下面是一个代码示例(带有自制的延迟功能):
import time
import pygame
screen=pygame.display.set_mode(size, pygame.FULLSCREEN)
nbPicturesToLoad=12
pictures=range(nbPicturesToLoad)
for i in range(nbPicturesToLoad):
pictures[i]=pygame.image.load(pictureName).convert() //Here pictureName depends on the value of i
(...)
for i in range(nbPicturesToLoad):
timer1=time.time()
screen.blit(pictures[i], (0,0))
pygame.display.flip()
timer2=time.time()
timer=timer2-timer1
while(timer<0.03333):
timer2=time.time()
timer=timer2-timer1
计时器允许我在屏幕上有相同的刷新率。我的问题是,一个人可以亲眼看到屏幕撕裂问题(https://en.wikipedia.org/wiki/Screen_tearing)。在pyplay留档他们建议使用其他标志的屏幕init(pyplay.HWSURFACE和pyplay。DOUBLEBUF
,http://www.pygame.org/docs/ref/display,y.set_mode
)。显然,这些可以帮助纠正屏幕撕裂的问题。但是当我使用这些标志时,我看不到屏幕撕裂校正。
我在某个地方看到pyplay不能处理X11上的vsync,这可以解释为什么我认为HWSURFACE和DOUBLEBUF标志没有区别。
有人在Raspberry Pi上遇到过这个vsync问题吗?“config.txt”文件中是否有参数?有没有人有办法获得真正的vsync信息来避免这些屏幕撕裂效果?
我已经看到pyglet可以在创建的窗口中处理vsync,但是由于未知的原因,我不能在pyglet窗口中显示图像,我真的不确定它是否能解决这个问题,尤其是如果覆盆子现在不能处理vsync。
尝试使用Pyplay时钟来处理计时,它更容易实现和理解,它可能会解决这个问题。
如下所示:
import pygame as py
py.init()
WINDOW = (400,400)
screen = py.display.set_mode(WINDOW)
nbPicturesToLoad=12
pictures = range(nbPicturesToLoad)
for i in range(nbPicturesToLoad):
pictures[i]=py.image.load(pictureName).convert()
FPS = 30
clock = py.time.Clock() # Create a clock object
done = False
while not done:
for event in py.event.get():
if event.type == py.QUIT:
done = True
for i in range(nbPicturesToLoad):
screen.fill((255,255,255))
screen.blit(pictures[i],(0,0))
py.display.flip()
clock.tick(FPS) # use pygame.time.Clock to wait 1/30th of a second
py.quit()
然而,由于这是一个屏幕撕裂问题,解决方案可能是完全停止使用Pygame。如何避免在Linux/X11上使用pygame撕裂这个问题似乎涵盖了您可能需要的内容。
祝你好运
我试图移动这个图像: 在我的PyGame屏幕上,从右到左再向后,但是随着图像的移动,每隔一秒左右我就会有一点屏幕撕裂,就像这样: 我使用的代码是类似于此的循环: 到目前为止,我已经尝试了以下方法来解决这个问题: 在创建屏幕时使用,,标志,这没有效果,我也调整了更新为(因为使用?)时建议使用此选项) 在GPU和CPU之间拆分内存(我在raspberry pi 2上运行此功能)我尝试过为这两个处理器提
您好,我正在中制作一个游戏,我想知道如何以及最好的方式是在屏幕上添加游戏。以下是玩家健康状况小于或等于0的代码: 我不确定该怎么做,因为我试图使用另一个py呼叫游戏,但玩家死亡的时间被重置为0并返回,所以玩家死亡的地方可能发生任何事情吗?
我试图检测从覆盆子pi图像中拍摄的两张照片之间的运动。我通过比较原始像素数据来做到这一点。下面是一个简单的脚本,我用它来测试比较。 在脚本中,我启动相机,拍摄第一张照片,等待几秒钟,拍摄第二张照片并计算差值。但是每次我运行这个脚本时,“val1”变量总是0.0。任何帮助都将不胜感激。
我制作了一个类,在draw函数中,我画了一个文本区域,一些静态文本,并给屏幕上色。draw函数位于while循环中。我希望整个pygame屏幕除输入框外都清晰,并且我希望屏幕改变颜色。我该怎么做?我的代码如下: ######################################################################################### 皮加梅。
我在VPS的Xvfb上运行火狐。我想做的是对页面进行全页截图。 我可以使用以下方法将Firefox重定向到特定页面 并使用ImageMagick进行屏幕截图(在X内部) 问题是,大部分页面需要滚动,我无法事先知道高度。 另一种方法是挑一个非常大的高度(像4000px)然后对图像进行处理,去掉无用的部分。但那是不必要的处理。 我发现了许多Firefox插件,但我正在寻找一个可以使用Shell命令行编
我一直在尝试使用pygame来显示游戏场景,但它似乎已经停止了对我的工作:在pygame关闭之前,它只在我创建的任何屏幕上显示一个灰色框,然后屏幕上应该显示的内容在退出之前短暂闪烁。例如,下面的最小代码显示灰色屏幕5秒钟,然后快速闪烁黑色并退出: 这似乎是屏幕显示的问题,而不是pygame本身的问题,因为我可以使用pg.image制作曲面并将其保存到图像文件中。save(),它们在那里看起来很好。