0

在我发现的每个 pySLD2 示例中,我都在代码末尾看到了一个循环,以保持窗口打开直到关闭。例如:

#!/usr/bin/env python
"""
The code is placed into public domain
by anatoly techtonik <techtonik@gmail.com>
"""
import sdl2
import sdl2.ext as lib

lib.init()

window = lib.Window('', size=(300, 100))
window.show()

renderer = lib.Renderer(window)
renderer.draw_point([10,10], lib.Color(255,255,255))
renderer.present()

####Specifically this loop####
running = True
while running:
  for e in lib.get_events():
    if e.type == sdl2.SDL_QUIT:
      running = False
      break
    if e.type == sdl2.SDL_KEYDOWN:
      if e.key.keysym.sym == sdl2.SDLK_ESCAPE:
        running = False
        break

我见过的所有事件处理程序都被阻塞了。有没有办法,就像我在标准 SDL 中看到的那样,在保持打开的窗口上简单地调用初始化和更新函数。我写这篇文章是为了把它写成一个外部库,我可以独立于任何项目调用它。

有任何想法吗?谢谢!

编辑:根据要求在标准 SDL 中执行此操作的方法,方法有效。只需调用 init 函数来设置屏幕,它会一直保持到您关闭它为止。

4

1 回答 1

0

您误解了该示例-这是要在主循环中设置的附加挂钩(screen.c)。

SDL 使用主循环方法来处理事件、更新窗口显示等。是的,有一种方法可以解决这个问题。创建您自己的窗口并使用任何方法使其保持打开状态,通过 SDL_SysWM* 函数获取窗口句柄并更新窗口的显示缓冲区。

然而,这涉及一些胶水代码,并且还需要您自己进行窗口处理。

于 2014-06-18T07:48:39.383 回答