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
しpng
ますjpg
。
追加するために編集:
今日、私はこれを理解しようとしてまた突っついてきました。ピクセルである私のテスト画像は245x245
、spriterenderer を作成してから呼び出すまでの間に何かをしない限り、もはや機能しません。変数に実際に何かがあり、そこにあるかどうかを確認するために、それらの行の間に興味を持ってrender(sprite)
追加しました。print sprite
が表示されます。行をコメントアウトするprint
と失敗します。次に、同じ画像を大きくする500x500
と、access violation
再びエラーが発生しました。何が起こっているのかわかりません。