2013-08-10 3 views
2

저는 도약 모션으로 파이 게임 라이브러리를 사용하려고합니다.도약 모션 + 파이 게임 | 창에 텍스트 표시하기

AttributeError: 'function' object has no attribute 'avg_pos'

: 나는 내 SampleListener 클래스에서 변수를 검색하고 내 Main 방법으로 먹이를하려고하지만 때, 내 창에 립 모션에서 일부 데이터를 표시하기 위해 노력하고있어,이 오류가 발생합니다 클래스> 메서드> 변수 구조에 대한 오해가 있습니까?

import Leap, sys, pygame 

#Window 
windowWidth = 800 
windowHeight = 600 

#Leap Motion Settings 
class SampleListener(Leap.Listener): 

    def on_init(self, controller): 
     print "Initialized" 

    def on_connect(self, controller): 
     print "Connected" 

    def on_disconnect(self, controller): 
     # Note: not dispatched when running in a debugger. 
     print "Disconnected" 

    def on_exit(self, controller): 
     print "Exited" 

    def on_frame(self, controller): 
     # Get the most recent frame and report some basic information 
      if not self.frame.hands.empty: 
       # Get the first hand 
       hand = self.frame.hands[0] 

       # Check if the hand has any fingers 
       fingers = hand.fingers 
       if not fingers.empty: 
        # Calculate the hand's average finger tip position 
        avg_pos = Leap.Vector() 
        for finger in fingers: 
         avg_pos += finger.tip_position 
        avg_pos /= len(fingers) 
        print "Hand has %d fingers, average finger tip position: %s" % (
          len(fingers), avg_pos) 

#Application Loop 
def main(): 
    pygame.init() 
    window = pygame.display.set_mode((windowWidth,windowHeight)) 
    pygame.display.set_caption("TEST123") 

    #Surface 
    background = pygame.Surface(window.get_size()) 
    background = background.convert() 
    background.fill ((50,0,80)) 

    if pygame.font: 
     font = pygame.font.Font(None, 36) 
     text = font.render("%s" % SampleListener.on_frame.len(fingers), 1, (255, 255, 255)) 
     textpos = text.get_rect(centerx=background.get_width()/2) 
     background.blit(text, textpos) 

    # Create a sample listener and controller 
    listener = SampleListener() 
    controller = Leap.Controller() 

    # Have the sample listener receive events from the controller 
    controller.add_listener(listener) 

    clock = pygame.time.Clock() 

    while True: 
     clock.tick(60) 
     #Handle Input Events 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       sys.exit() 
       # Remove the sample listener when done 
       controller.remove_listener(listener) 

     window.blit(background, (0,0)) 
     pygame.display.flip() 

if __name__ == "__main__": 
    main() 

편집 : 여기

내가 함께 일하고 있어요 코드입니다 여기에 전체 역 추적 오류입니다 -

Line 53, in main 
    text = font.render("%s" % SampleListener.on_frame.avg_pos, 1, (255, 255, 255)) 
AttributeError: 'function' object has no attribute 'avg_pos' 

감사합니다!

+0

는 립 모션 번도 본 적이는 - 꽤 놀랍다! 그 오류를 일으키는'on_frame' 메서드에서 아무것도 볼 수 없습니다 ... 질문을 편집하여 스택 추적을 더 붙여 넣을 수 있습니까? 그리고/또는 어떤 줄이 예외의 원인인지 지적 할 수 있습니까? –

+0

전체 추적 메시지를 게시 할 수 있습니까? – alexpinho98

+0

추적 표시가 추가되었습니다. – ampexian

답변

0

저에게는 pygame.font가 부울이 아니므로 if 문에서 사용할 수없는 것 같습니다. ( 인용 :

def main(): 
pygame.init() 
window = pygame.display.set_mode((windowWidth,windowHeight)) 
pygame.display.set_caption("TEST123") 

#Surface 
background = pygame.Surface(window.get_size()) 
background = background.convert() 
background.fill ((50,0,80)) 

if pygame.font: \\ HERE <--- 
    font = pygame.font.Font(None, 36) 
    text = font.render("%s" % SampleListener.on_frame.len(fingers), 1, (255, 255, 255)) 
    textpos = text.get_rect(centerx=background.get_width()/2) 
    background.blit(text, textpos) 

)

+0

if 문은 여전히 ​​유효합니다. 왜냐하면 "TEST"와 같은 문자열을 포함하는 font.render 내의 부분을 변경할 때 - 프로그램을 실행할 때 작동하기 때문입니다. – ampexian

+0

아마도 그게 도약과 관련이 있습니다 ... 나는 평범한 파이 게임에서 woudn't 작동 알아요. –