2014-11-24 2 views
1

프로그래밍에서 클래스와 OOP를 많이 사용하려고 시도하고 있으며, 기본 게임 윈도우를 디스플레이 클래스로 설정하려고합니다.이 클래스는 호출 될 때 게임 윈도우를 만듭니다 , 모든 파이 게임 초기화를 수행합니다.내 파이 게임 표면을 클래스에 넣으려고 시도합니다.

보기 튜토리얼을 완료했지만 pygame.display 호출을 클래스로 캡슐화하는 데 어려움을 겪고 있습니다. 파이 게임이 제대로 작동하기 위해서는 /해야하지 않기 때문입니다.

가장 일반적인 오류는 내가 들어 왔 그것이 내가 클래스 디스플레이 (객체)로 대체하여 (내 코드를 수정하는 경우

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 13, in <module> 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 27, in Display 
NameError: name 'Display' is not defined 

있습니다 주변에 재생하는 동안 -> 클래스 디스플레이 (폭, 높이, tilesize), 내가 전달하려고 값이 오류 얻을되는 :

NameError: name 'width' is not defined 

그냥 오류가 내 구문에 있는지 알아 내려고 노력하고, 아니면이 불가능 감사을 시도하려고합니다. :)

import pygame 
from pygame.locals import * 

#Constants 
TILESIZE = 32 
MAPWIDTH = 16 
MAPHEIGHT = 16 

#variables 
playing = True 

#Creates Display Window 
class Display(object): 

    def __init__(self, width, height, tilesize): 
     pygame.init() 
     pygame.display.set_icon("player.jpg") 
     pygame.display.set_caption("FarmTown Version 1.0") 
     self.SCREEN_WIDTH = width * tilesize 
     self.SCREEN_HEIGHT = height * tilesize 
     self.myScreen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT]) 

    def update(): 
     pygame.display.flip() 

#Set Up Everything To Play 
    myDisplay = Display(MAPWIDTH, MAPHEIGHT, TILESIZE) 


#Game Loop Begins 
while playing: 
    #Display the surface 
    myDisplay.update() 

답변

0

myDisplay는 들여 쓰기되어 있으므로 python은 Display 클래스의 일부라고 생각합니다. 해당 클래스의 정의 내에서 클래스의 인스턴스를 만들 수 없습니다. 또한 set_icon은 파일 경로가 아닌 파이 게임 Surface 객체를 필요로합니다. 이것에

self.myScreen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT]) 

:

# ... 
    icon = pygame.image.load("player.jpg") 
    pygame.display.set_icon(icon) 
    # ... 

마지막으로,이 값을 변경해야하는 문제를 해결하려면 다음을 수행

self.myScreen = pygame.display.set_mode([self.SCREEN_WIDTH, self.SCREEN_HEIGHT]) 
+0

정말 대단한 알림 identing 꽤 코드를한다하더라도 그, 나는 파이썬으로 그렇게 할 수 없다. 아이콘 부분에 대한 추가 팁을 가져 주셔서 감사합니다. 그 부분을보기 전에 오류 메시지를 정리하면 마지막 부분을 수정했습니다. 그런 철저한 답을 주셔서 감사합니다. 나는 버그 수정이 간단한 때를 좋아한다. 다시 한번 감사드립니다. –

관련 문제