2011-02-28 6 views
3

그래서 문제가 있습니다 - Pygame을 사용하여 파이썬에서 게임 프로토 타입을 작성하고 게임을 저장하고 싶습니다. 모든 게임 관련 데이터는 특정 클래스의 세 인스턴스에 있으며이 세 인스턴스를 파일에 저장하려고합니다. 그러나, 나는 이러한 인스턴스를 pickling 시도하고 작동하지 않습니다. 대신 TypeError : Surface 객체를 피클링 할 수 없습니다. 이것은 Surface 객체를 저장하기 때문에 문제입니다.외부 파일에 unpicklabe pygame.Surface 객체 저장

다른 종류의 데이터 유형을 사용하여 산세에 대한 대안을 공개합니다. 중요한 것은 이러한 인스턴스가 저장되고 나중에 해당 데이터를 검색 할 수 있다는 것입니다. 그렇다면이 문제를 극복하기 위해 무엇을 할 수 있습니까? 저는 아주 숙련 된 프로그래머는 아니며 1 년 전에 여가 시간에 파이썬을 배웠고 다른 언어도 많이 쓸 수는 없지만 천천히 C++를 배우고 있습니다.

답변

5

피클 링의 기본 포인트는 어떻게 든 개체를 직렬화 할 수 있어야한다는 것입니다. SDL 표면은 많은 런타임 상태를 유지하는 메모리 개체입니다. 그것을 연재하려는 것은 완전히 합리적이지 않습니다.

당신이해야 할 일은 렌더링 구성 요소와 게임의 상태를 분리하여 (피클 링이나 무엇이든) 일련 번호를 지정할 수 있도록하는 것입니다.

디코딩 된 비디오를 보유하고있는 메모리 버퍼를 어떻게 든 저장하여 비디오 상태를 저장하는 것과 같습니다. 이것은 작동하지 않습니다. 대신, 저장하는 방법은 비디오 파일의 위치와 시간 오프셋을 직렬화하는 것입니다. 그러면 다음 번에 응용 프로그램을 복원 할 때로드시 재생을 계속할 수 있습니다.

2

http://docs.python.org/library/pickle.html#pickle-protocol 읽기, 당신은 표면 객체가 방법을 줄이거 나 방법 http://docs.python.org/library/copy_reg.html#module-copy_reg에 설명 된대로 해당 데이터를 처리하는 피클을 이야기하는 copy_reg 모듈을 사용하여 수출하도록 중 하나가 필요합니다.

피클이 필요로하는 것은 어쩌면 (some_class, [arguments here])으로 처리 할 수없는 얼룩을 돌리는 함수입니다. 그리고 나서 여러분이 unpickle 할 때 그 논쟁들로 그 클래스의 새로운 것을 만들 것입니다.

+0

+1 세부 정보 –