我试图在Windows机器上开始使用pysdl2。到目前为止,我只是复制并粘贴Hello World tutorial,所以我可以看到它是否真的有效!它不是。
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
,png
和jpg
中遇到同样的问题。
编辑添加:
今天,我一直在试图理解这一点。我的245x245
像素的测试图片将不再起作用,除非我在创建spriterenderer和调用render(sprite)
之间做了一些事情 - 我在这些行之间添加了print sprite
感兴趣的是看看变量中是否存在实际内容,并且显示出来。注释掉print
行并且它失败了。然后我将相同的图像放大500x500
并再次出现access violation
错误。我不知道它发生了什么。
答案 0 :(得分:1)
您使用的是什么版本的SDL?这是Mercurial最新开发的产品吗?
如果是这样,它可能不稳定并且有一个不允许它在Windows上正常运行的错误,在我的情况下,它在Arch和Windows上都能正常运行,并且版本稳定。
返回的错误是WindowsError,它可能来自DLL文件的使用。
如果您使用的是不稳定版本,请尝试使用稳定版本。它可能会在之后发挥作用。