历史: 成就不明白我的代码有什么问题,第一次使用类来创建数字。
我有一个模块,其中的Polygon类包含以下代码:
import pygame
class Polygon:
def __init__(self,):
self.list_puntos = [(200, 30), (250, 80), (225, 130), (175, 130),(150 ,80)]
self.image = pygame.Surface((32, 36))
self.image.fill((255, 255, 255))
def draw(self):
self.pygame.draw.polygon(self.image, (255, 0, 255), self.list_puntos)
def cursors(self):
pass
我有一个内核,代码如下:
import sys
import pygame
from Objects import Polygon
call_polygon = Polygon
class Kernel:
def __init__(self):
pygame.init()
self.screen_size = (800, 600)
self.bg_color = (120, 120, 250)
self.fps = 60
self.screen = pygame.display.set_mode(self.screen_size)
self.clock = pygame.time.Clock()
def handle_input(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
def update(self):
capition = "Music Art - FPS: {:.2f}".format(self.clock.get_fps())
pygame.display.set_caption(capition)
def render(self):
self.screen.fill(self.bg_color)
def main_loop(self):
while True:
self.handle_input()
self.update()
self.render()
call_polygon.draw()
"""TypeError: unbound method draw() must be called with Polygon instance as first argument (got nothing instead)"""
pygame.display.flip()
self.clock.tick(self.fps)
if __name__ == '__main__':
Module_game = Kernel()
Module_game.main_loop()
答案 0 :(得分:1)
类只定义一个"模板"对于某种类型的对象。要实际创建该类型的对象(或"实例"),必须调用该类并将完成其定义所需的任何数据作为参数传递。不将数据硬编码到类本身中将允许您创建多个类的实例,并且每个实例可以具有不同的属性,具体取决于给定的值 - 例如颜色,形状,位置等 - 当它们被执行时创建
考虑到这一点,我会按如下方式更改您的代码。它仍然只有一个多边形,但现在只需多次调用Api23
并存储返回的实例就可以轻松添加更多,这样可以在必要时调用它们的Polygon()
方法。
档案draw()
:
Objects.py
主游戏模块文件:
import pygame
class Polygon:
def __init__(self, *puntos):
self.puntos = puntos
def draw(self, surface):
""" Draw the shape on the surface. """
pygame.draw.polygon(surface, (255, 0, 255), self.puntos)
def cursors(self):
pass
答案 1 :(得分:0)
您需要创建Polygon
类的实例,而不是直接尝试在类上调用方法:
poly = Polygon() # call the class to create an instance; put this in your setup code
poly.draw() # put this in your main loop