我有一个经典的蛇游戏,我试图使蛇变大,所以我开始使用打印矩形而不是像素。我为此尝试了这些代码(我不会编写完整的代码,因为可能会造成混淆):

class Worm(pygame.sprite.Sprite):
    def __init__(self, surface,seg_width,seg_height):
        self.surface = surface #this is ==> screen=pygame.display.set_mode((w, h))
        self.x = surface.get_width() / 2
        self.y = surface.get_height() / 2
        self.length = 1
        self.grow_to = 50
        self.vx = 0
        self.vy = -seg_width
        self.body = []
        self.crashed = False
        self.color = 255, 255, 0
        self.rect = pygame.Rect(self.x,self.y,seg_width,seg_height)
        self.segment = pygame.Rect(0,0,seg_width,seg_height)
   def move(self):
    """ Move the worm. """
    self.x += self.vx
    self.y += self.vy
    self.rect.topleft = self.x, self.y
    if (self.x, self.y) in self.body:
        self.crashed = True

    self.body.insert(0, (self.x, self.y))   #Func of moving the snake
    new_segment = self.segment.copy()
    self.body.insert(0, new_segment.move(self.x, self.y))
    if len(self.body) > self.length:
        self.body.pop()

    def draw(self):
    for SEGMENT in self.body:    #Drawing the snake
        self.surface.fill((255,255,255), SEGMENT) #This is where I got error <-----


如果我使用像素,我的代码可以正常工作,但是我想要一条更大的蛇(不再更长,我的意思是更粗),所以我认为我可以使用rects,我尝试了一下,但这给了我;

self.surface.fill((255,255,255), SEGMENT)
ValueError: invalid rectstyle object


SEGMENT实际上是一个坐标元组,那么为什么会出现此错误?
同样在按f5键之后,我首先看到此屏幕,所以基本上我的理论是可行的,但它的输出很奇怪,一个rect小于另一个?为什么?那“ 0”是记分牌,我没有像我说的那样编写完整的代码。



我只是不明白为什么,该如何解决?

我想再说一遍,因为它也可能造成混淆,该表面参数实际上表示screen = pygame.display.set_mode((w, h)) this,其中w = widhth = height

这是有像素的,所以我想要一条较粗的蛇,由矩形而不是像素构建。





  编辑:从nbro的答案,我改变这一


self.body.insert(0, (self.x, self.y,self.x, self.y))


所以它现在是一个具有4个元素的元组,但是输出非常奇怪。

最佳答案

使用某个地方的简单print调试代码很容易。我在下面放了一个print

def draw(self):
    for SEGMENT in self.body:
        print(SEGMENT)
        self.surface.fill((255,255,255), SEGMENT) #This is where I got error <-----


我立刻发现了你的问题。 SEGMENT必须是基于矩形的形状,这意味着您必须指定xywidthheight,但是,在某些情况下,SEGMENT假定由tuple值组成2个元素,这是不正确的,它必须是4个元素的元组!

具体来说,当我得到错误的输出是这样的:

<rect(320, 210, 30, 30)>
<rect(320, 180, 30, 30)>
(320.0, 180.0)


现在,我想您可以尝试看看为什么即使没有我的帮助,它也会假设包含2个元素的第三元组。

关于python - pygame Sprite 无效的rectstyle对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27680525/

10-12 21:03