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 を使用していますが、 と で同じ問題が発生bmppngますjpg

追加するために編集:

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

4

1 に答える 1