试图把我的pygame表面放到一个类中

时间:2014-11-24 19:40:18

标签: python graphics pygame nameerror

我试图在我的编程中开始大量使用类和OOP,并尝试将我的基本游戏窗口设置为显示类,当调用时创建游戏窗口,并完成所有游戏动初始化。

我已经完成了一个视图教程,但我很难找到一个将pygame.display调用封装到一个类中的方法。这是因为/ /不应该/ pygame正常工作吗?

我在玩这个游戏时遇到的最常见的错误是

    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

如果我修改我的代码(通过替换类Display(对象): - &gt; class Display(width,height,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()

1 个答案:

答案 0 :(得分:0)

myDisplay是缩进的,因此python认为它是Display类的一部分。您无法在该类的定义中创建类的实例。此外,set_icon需要一个pygame Surface对象,而不是文件的路径。要解决这个问题,请执行以下操作:

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

最后,你应该改变这个:

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

到此:

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