Pygame:从不同的模块绘制一个Class多边形

时间:2016-06-15 20:34:41

标签: python pygame

历史: 成就不明白我的代码有什么问题,第一次使用类来创建数字。

我有一个模块,其中的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()

2 个答案:

答案 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