4

我正在尝试在 Windows 机器上开始使用 pysdl2。到目前为止,我刚刚复制并粘贴了Hello World 教程,只是为了看看它是否真的有效!它不是。

import sys
import sdl2.ext

RESOURCES = sdl2.ext.Resources(__file__, "resources")

sdl2.ext.init()

window = sdl2.ext.Window("Hello World!", size=(640, 580))
window.show()

factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image(RESOURCES.get_path("testimage.png"))

spriterenderer = factory.create_sprite_render_system(window)
spriterenderer.render(sprite)

processor = sdl2.ext.TestEventProcessor()
processor.run(window)

sdl2.ext.quit()

当我运行程序时,它会短暂显示一个窗口,然后崩溃并出现以下错误:

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    spriterenderer.render(sprite)
  File "C:\Python27\lib\site-packages\sdl2\ext\sprite.py", line 643, in render
    surface.SDL_BlitSurface(sprites.surface, None, self.surface, r)
WindowsError: exception: access violation reading 0x03F3B000

虽然地址每次都不一样。

这似乎只发生在较大的图像上 - 如果我将图像调整为245 x 245像素或更小,那么它将毫无怨言地显示。我正在使用 Pillow 来改进格式支持,并在bmp,pngjpg.

编辑添加:

今天,我一直在戳这个试图理解。我的像素测试图像245x245将不再起作用,除非我在创建 spriterenderer 和调用render(sprite)它之间做了一些事情 - 我print sprite出于兴趣在这些行之间添加,以查看变量中是否真的有什么东西,并且它显示。注释掉该print行,它会失败。然后我将相同的图像放大,500x500access violation再次出现错误。我不知道发生了什么。

4

1 回答 1

1

您使用的是什么版本的 SDL?它是 Mercurial 的最新开发产品吗?

如果是这样,它可能是不稳定的,并且存在一个不允许它在 Windows 上正常运行的错误,在我的情况下,它在 Arch 和 Windows 上都可以正常工作,并且具有稳定版本。

返回的错误是一个WindowsError,它可能来自DLL文件的使用。

如果您使用的是不稳定版本,请尝试使用稳定版本。之后可能会起作用。

于 2014-03-31T01:33:02.663 回答