Class 用Python在我的显示类中创建更新函数
所以当我调用myDisplay.update()函数时,我试图对它进行编码,我可以将我想要更新的任何游戏元素传递给它,以显示图像。例如,我用一个player类创建了一个player,我想将它传递到myDisplay.update(player)中,以便从player类中提取精灵,然后在update方法中渲染它 当前错误: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
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文档中的示例了吗?