我有基于pygame的视频播放器,它有用于GUI的berkelium浏览器, 在那下面是用于播放流的VLC库。我没有制作播放器,但我愿意 喜欢添加“调整大小”选项,该选项目前不存在。 该应用程序是为OS X。
在初始化播放器时,调用pygame.set_mode(screensize,OPENGL|DOUBLEBUF|RESIZABLE)
,问题是当我调整窗口大小超过屏幕大小时,如果我再次尝试pygame.set_mode
,则这些部分不可见(显示有问题)它导致应用程序因依赖关系(浏览器和VLC)而崩溃。
所以我决定使用以下方式初始化屏幕:
pygame.set_mode(screenresolution, OPENGL|DOUBLEBUF|RESIZABLE)
应将其设置为最大值,然后切换回原始的较小分辨率(如使用鼠标调整大小)。
怎么做?如何模拟RESIZABLE
标志和鼠标移动动作?
播放器可以很好地调整尺寸,缩小尺寸,只是尺寸较大才有问题。
class InputAndDisplay:
def init(self, fullscreen=False):
global pygame, sys
# if 'darwin' in sys.platform:
# import sys
# sys.argv = ['Core.py']
# import pygame.macosx
# pygame.macosx.init()
pygame.init()
global screenSize
self.screenSize = screenSize
if fullscreen:
try: self.screenSize = pygame.display.list_modes()[0]
except Exception, e: print e
flags = OPENGL|DOUBLEBUF|FULLSCREEN
else:
flags = RESIZABLE|OPENGL|DOUBLEBUF
print 'screenSize:', self.screenSize
try:
povrsina = pygame.display.set_mode(self.screenSize, flags)
except Exception, e:
print e
self.screenSize = screenSize
povrsina = pygame.display.set_mode(self.screenSize, RESIZABLE|OPENGL|DOUBLEBUF)
pygame.display.set_caption('NetTVBox-WebPlayer')
pygame.mouse.set_pos(list(self.screenSize))
if 'darwin' not in sys.platform:
pygame.mouse.set_visible(False)
#pygame.key.set_repeat(300, 100)
if 'darwin' not in sys.platform:
pygame.mixer.quit()
if 'linux' in sys.platform: # try to turn off vsyncing
import ctypes
libgl = ctypes.cdll.LoadLibrary('libGL.so.1')
proc = libgl.glXGetProcAddressARB('glXSwapIntervalMESA')
_glXSwapIntervalMESA = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)(proc)
_glXSwapIntervalMESA(0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
#gluPerspective(45.0, 640/480.0, 0.1, 100.0)
glOrtho(-0.5, 0.5, -0.5, 0.5, -5, 5)
#glTranslatef(0.0, 0.0, -3.0)
#glRotatef(25, 1, 0, 0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glEnable(GL_TEXTURE_2D)
glShadeModel(GL_FLAT)
glClearColor(0.0, 0.0, 0.0, 0.0)
glClearDepth(1.0)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
self.textures = glGenTextures(2)
self.threeDmode = MODE_3D_OFF
init
中的inputAndDisplay.py
主文件是Core.py
,它调用它,还有很多其他的东西。这就是为什么我没有把所有代码都放在这里,有很多并且并非全部重要
这是Core.py
的一部分:
input_and_display = InputAndDisplay()
input_and_display.init(self.fullscreen)
rc = RemoteControl()
rc.init()
media = Media()
if 1: # !
media.config = {
'buffering': state.mediaplayer_buffering,
'contrast': state.mediaplayer_contrast,
'saturation': state.mediaplayer_saturation,
}
media.init()
browser = Browser()
browser.init()
提前感谢您的帮助
答案 0 :(得分:0)
听起来你错过VIDEORESIZE
事件来检测调整大小。
(参见相关活动:VIDEOEXPOSE
,ACTIVEEVENT
http://www.pygame.org/docs/ref/event.html)
http://www.pygame.org/docs/ref/display.html#pygame.display.set_mode
"然后设置显示模式,在pygame事件队列上放置几个事件。当用户请求程序关闭时,会发送 pygame.QUIT 。当显示器获得并失去输入焦点时,窗口将接收 pygame.ACTIVEEVENT 事件。如果使用pygame.RESIZABLE标志设置显示,则当用户调整窗口尺寸时,将发送 pygame.VIDEORESIZE 事件。当必须重绘窗口的某些部分时,直接绘制到屏幕的硬件显示将获得 pygame.VIDEOEXPOSE 事件。 "