Class 用Python在我的显示类中创建更新函数

Class 用Python在我的显示类中创建更新函数,class,python-2.7,object,pygame,Class,Python 2.7,Object,Pygame,所以当我调用myDisplay.update()函数时,我试图对它进行编码,我可以将我想要更新的任何游戏元素传递给它,以显示图像。例如,我用一个player类创建了一个player,我想将它传递到myDisplay.update(player)中,以便从player类中提取精灵,然后在update方法中渲染它 当前错误: AttributeError: 'Display' object has no attribute 'blit' 当前代码: import pygame, sys from

所以当我调用myDisplay.update()函数时,我试图对它进行编码,我可以将我想要更新的任何游戏元素传递给它,以显示图像。例如,我用一个player类创建了一个player,我想将它传递到myDisplay.update(player)中,以便从player类中提取精灵,然后在update方法中渲染它

当前错误:

AttributeError: 'Display' object has no attribute 'blit'
当前代码:

import pygame, sys
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_caption("FarmTown Version 1.0")
        self.SCREEN_WIDTH = width * tilesize
        self.SCREEN_HEIGHT = height * tilesize
        self.myScreen = pygame.display.set_mode([self.SCREEN_WIDTH, self.SCREEN_HEIGHT])

    def update(self, updated):
        self.blit(updated.image, (playerPos[0] * TILESIZE, playerPos[1] * TILESIZE))
        pygame.display.update()

class Controller(object):
    controls = {
        "KEY_UP": 273,
        "KEY_DOWN": 274,
        "KEY_RIGHT": 275,
        "KEY_LEFT": 276
        }

    def checkInput(self):
        for key in self.controls:
            if event.key == self.controls[key]:
                if self.controls[key] == self.controls["KEY_UP"]:
                    print "Up"
                elif self.controls[key] == self.controls["KEY_DOWN"]:
                    print "Down"
                elif self.controls[key] == self.controls["KEY_RIGHT"]:
                    print "Right"
                elif self.controls[key] == self.controls["KEY_LEFT"]:
                    print "Left"

class Player(object):
    def __init__(self):
        #if playerClass == "peasant":
        self.image = pygame.image.load("player.png")
        self.pos = [0, 0]

#Set Up Everything To Play
myDisplay = Display(MAPWIDTH, MAPHEIGHT, TILESIZE)
myController = Controller()
player = Player()


#Game Loop Begins
while playing:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            myController.checkInput()

    myDisplay.update(player)

我想你是想给pygame对象子类化。目前,Display只是“object”的一个子类,它不包含“blit”方法。或者您是想编写
pygame.blit
还是
pygame.display.blit
而不是
self.blit

我目前仍在运行代码,并注意到我应该使用self.myScreen.blit,因为在初始化时我确实创建了myScreen变量,这听起来像是在正确的道路上吗?我试图使用pygame blit函数,但我只在创建主窗口/曲面后使用过它。这是我学习闪电游戏的原始教程。他们使用DISPLAYSURF=pygame.display.set_mode((etc.),然后访问DISPLAYSURF中的所有内容。实际上,DISPLAYSURF并不了解pygame,但它看起来像是屏幕对象的一种方法,所以您所说的看起来完全正确。当我使用一个新的框架时,我喜欢首先将一些代码紧密地基于一个示例。您看过pygame文档中的示例了吗?