我正在创建平台游戏,并且试图通过为平台创建类来缩短代码。但是,我的代码无法运行,我不确定显示的错误是什么。
我的代码:
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
答案 0 :(得分:0)
您在__init__
类中误拼了Rect
。
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))
参数不应为字符串:
Rect(light_red, random.randrange(0,150), 150, 300, 50, 5)
您可以给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
类。