Pygame Cass函数,用于创建平台,而无需手动创建每个平台

时间:2018-09-16 13:36:03

标签: python python-3.x class pygame

我正在创建平台游戏,并且试图通过为平台创建类来缩短代码。但是,我的代码无法运行,我不确定显示的错误是什么。

我的代码:

import pygame,sys,time,random
pygame.init()

#COLOUR
light_red=(255,99,71)

res_x,res_y=800,600
display = pygame.display.set_mode((res_x,res_y))
display.fill(black)
pygame.display.update()
clock=pygame.time.Clock()
fps=60

class Rect:
        def __int__(self,color,x,y,l,h,th):
                self.color=color
                self.x=x
                self.y=y
                self.l=l
                self.h=h
                self.th=th


rect1=pygame.draw.rect(display,Rect('light_red','random.randrange(0,150)','150','300','50','5'))



 pygame.display.update()

显示的错误:

    rect1=pygame.draw.rect(display,Rect('light_red','random.randrange(0,150)','150','300','50','5'))
TypeError: Rect() takes no arguments

1 个答案:

答案 0 :(得分:0)

  1. 您在__init__类中误拼了Rect

  2. pygame.draw.rect包含一个表面,一个颜色和一个rect样式的对象,该对象可以是pygame.Rect,一个列表或具有四个元素的元组。您的自定义Rect类无效,但是您可以传递一个元组:

    rect = Rect(light_red, random.randrange(0,150), 150, 300, 50, 5)
    rect1n = pygame.draw.rect(display, rect.color, (rect.x, rect.y, rect.l, rect.h))
    
  3. 参数不应为字符串:

    Rect(light_red, random.randrange(0,150), 150, 300, 50, 5)
    
  4. 您可以给Rect一个draw方法,在其中调用pygame.draw.rect(也可以给它一个self.rect属性,而不是单独的{{1 }}等属性):

    self.x

我建议检查pygame sprites and sprite groups的工作方式,然后将平台类转换为class Rect: def __init__(self,color,x,y,l,h,th): self.color = color self.th = th # Just create a pygame.Rect object to store the attributes. self.rect = pygame.Rect(x, y, l, h) def draw(self, surface): pygame.draw.rect(display, self.color, self.rect) rect = Rect(light_red, random.randrange(0,150), 150, 300, 50, 5) # Then draw it like this in the while loop. rect.draw(display) 子类。如果您想看一个带有精灵和组的简单平台游戏示例,请查看this answer


另外,最好为pygame.sprite.Sprite类选择另一个名称,因为已经有Rect类。