我正在尝试在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像素或更小,那么它将毫无问题地显示出来。我正在使用枕头来改进格式支持,在bmp,png和jpg上也遇到了同样的问题。
编辑后添加:
今天,我又一次尝试去理解这一点。我的测试图像是245x245像素将不再起作用,除非我在创建spriterenderer和调用render(sprite)之间做了一些事情-出于兴趣,我在这些行之间添加了print sprite,以查看变量中是否确实有什么东西,并且它会显示出来。注释掉print行,它就失败了。然后我将相同的图像放大,500x500,并再次得到access violation错误。我不知道这是怎么回事。
发布于 2014-03-31 09:33:03
您使用的是什么版本的SDL?这是Mercurial的最新开发吗?
如果是这样的话,它可能是不稳定的,并且有一个错误,不允许它在Windows上正常运行,在我的情况下,它在Arch和Windows的稳定版本上都工作得很好。
在那里返回的错误是一个WindowsError,它可能来自于DLL文件的使用。
如果您使用的是不稳定的版本,请尝试使用稳定的版本。之后它可能会起作用。
https://stackoverflow.com/questions/22631202
复制相似问题