2016-07-10 3 views
0

나는 pickle을 사용하는 shelve 모듈을 사용하여 만든 작은 RPG에 저장 기능을 구현하고자합니다.Pickling pygame clock

파이 게임 표면을 피클 할 수 없다는 것을 알게 된 후 필자는 필자의 객체 속성 대신 사전 키를 전달하라는 조언을 따랐습니다. 게임을 고치는 데 몇 시간을 소비 했더니 체계적으로 모든 표면을 확인하고 실제로 시작 메뉴를 실행하고 실행했습니다. 파이 게임 시계 객체가 직렬화 될 수 없다는 새로운 메시지 오류가 발생했습니다. 실망스럽게도, 표면과는 달리 주어진 객체에 특정한 모든 것들 (공격 타이머, 애니메이션 타이머, AI 타이머 등)을 많이 사용하기 때문에 필요한 모든 시계를 미리 작성할 수는 없습니다. 즉, 모든 스프라이트에 대해 하나의 공격 타이머를 사용하는 대신, 각각에 대해 하나의 공격 타이머를 사용하여 유연성을 높입니다. 또한 시계의 수는 내가 만드는 객체의 수에 따라 달라지며이 숫자는 임의적입니다. 나는 객체 지향 구조를 유지하면서 주위에 방법을 생각할 수 없다. 즉, 1000 초 타이머를 생성하지 않고 객체에 연결하는 것을 피한다.

1) 어떻게 할 수 있습니까 shelve 파이 게임 타이머 :

그래서 실제로이 질문에 요약하자면?

2) 어떤 대안을 추천 할 수없는 경우 2)?

3)이 저장 기능 구현에 더 많은 시간을 소비하기 전에 다른 파이 게임 개체가 직렬화 할 수 없거나이 정보를 어디에서 찾을 수 있습니까?

나는 많은 것을 묻는다. 그러나 나는 타이머를 가지고 똑같은 문제를 가지고 다음에 무엇이 있을지 궁금해지기 위해 너무 많은 시간을 들여서 매우 좌절감을 느낀다. 나는 그것이 모두 학습의 일부라고 생각한다.)

답변

2

잘못된 방법으로 문제를 해결하려고 시도했을 수 있습니다. 필자는 파이썬 객체를 직접 직렬화하려고 시도하는 대신 실제로 사전에 필요한 데이터 만 저장하는 방법을 고수해야한다고 말합니다.

실제로 하나 이상의 파이 게임 시계를 사용해야하는 경우를 생각할 수 없습니다. 나는 당신의 정확한 상황을 모른다. 그러나 나는 이런 구조를 추천 할 것이다.

clock = pygame.time.Clock() 
time = 0 

attack_clock1 = {'time_interval': 10, 'time': 0} 
attack_clock2 = {'time_interval': 20, 'time': 0} 
clocks = [attack_clock1, attack_clock2] 

while True: 
    #perform game logic here 

    #use time variable to run other "clocks" 
    #example 
    for c in clocks: 
     if condition: 
      c['tick'] += 1 
      if c['tick'] > c['time_interval']: 
       #do something 

    time += 1 

    clock.tick(FPS) 

다시 정확한 상황을 알 수는 없지만 이러한 종류의 구조에서 유용하게 사용할 수 있기를 바랍니다. 이런 종류의 충고는 아마도 코멘트에 더 적합 할 것이지만 그렇게하기에는 충분한 평판이 없습니다. 행운을 빕니다!