Python 3.3 및 PySDL2 0.5로 win7을 실행하는 Im입니다. 표면을 만들 때 (어떤 방법이든 상관없이) 나는 SDL_Surface 대신 LP_SDL_Surface를 얻습니다. LP_SDL_Surface에는 사용자가 기대할 수있는 메소드 및 속성이 없습니다. 여기 documentation에서 예제 코드를 사용하여 문제 :SDL_Surface/LP_SDL_Surface의 PySDL2 문제
import os
os.environ["PYSDL2_DLL_PATH"] = os.path.dirname(os.path.abspath(__file__))
import sys
import ctypes
from sdl2 import *
def main():
SDL_Init(SDL_INIT_VIDEO)
window = SDL_CreateWindow(b"Hello World",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
592, 460, SDL_WINDOW_SHOWN)
windowsurface = SDL_GetWindowSurface(window)
image = SDL_LoadBMP(b"exampleimage.bmp")
SDL_BlitSurface(image, None, windowsurface, None)
print(image.h)
SDL_UpdateWindowSurface(window)
SDL_FreeSurface(image)
running = True
event = SDL_Event()
while running:
while SDL_PollEvent(ctypes.byref(event)) != 0:
if event.type == SDL_QUIT:
running = False
break
SDL_DestroyWindow(window)
SDL_Quit()
return 0
if __name__ == "__main__":
sys.exit(main())
및 역 추적은 다음과 같습니다 (!)
는Traceback (most recent call last):
File "C:/.../test.py", line 35, in <module>
sys.exit(main())
File "C:/.../test.py", line 17, in main
print(image.h)
AttributeError: 'LP_SDL_Surface' object has no attribute 'h'
"LP_SDL_Surface"에 대한 구글 검색 0 결과를 제공합니다.
을 (http://stackoverflow.com/questions/1413851/expected-lp-c-double-instance-instead-of-c-double-array-python-ctypes-error) LP_ *는 ctypes이고 의미는 (long) 포인터 *. 이것을 실현하기 위해 파이썬 ctypes 문서를 확인한 후 이제 content 속성을 사용하여 서페이스 자체에 도달합니다. 그래서 나는 문제가 해결 된 것 같아요, 메신저 아직도 의도 된 동작이 확실하지. – user2697966
솔루션에 대해 자세히 설명해 주시겠습니까? 나는이 문제를 또한 가지고있다. 'surface.contents'를 사용하면 널 포인터 액세스 오류가 발생합니다. –
확신, 또는 더 나은, 내가 마커스 폰 Appen에서 얻은 설명을 참조하십시오 나는 SD 포럼에있어 : http://forums.libsdl.org/viewtopic.php?t=9419 – user2697966