在pygame中的某些坐标后,墙上的精灵没有出现在屏幕上

时间:2018-01-17 02:05:12

标签: python pygame sprite

尝试将碰撞检测作为使精灵彼此反弹的手段,但我的墙上的精灵并没有出现在坐标之后(5,5) 我不确定是否可能与fill和colorkey都是白色,或者pygame.Surface(x,y)与rect的x,y相同。

这是我的墙类:

class Wall(pygame.sprite.Sprite):

def __init__(self, color, h, d, x, y):
    super().__init__()

    self.image = pygame.Surface([x, y])
    self.image.fill(WHITE)
    self.image.set_colorkey(WHITE)

    pygame.draw.rect(self.image, color, [h, d, x, y])

    self.rect = self.image.get_rect()

这里是我的代码,我打电话给墙3创建一个墙4:

wall3 = Wall(BLACK, 0, 400, 700, 2)
wall_list.add(wall3)
all_sprite_list.add(wall3)

wall4 = Wall(BLACK, 700, 0, 2, 400)
wall_list.add(wall4)
all_sprite_list.add(wall4)

1 个答案:

答案 0 :(得分:0)

至于我,你有两个问题

首先:你使用了误导性的名字 - 变量x,y应该是width, height,但稍后会这样。

第二:你假设表面使用与屏幕相同的坐标但不是真的。它从(0,0)开始,以(x,y)结束,但您尝试在位于表面之外的位置(h,d)中绘制矩形。

所以排队

pygame.draw.rect(self.image, color, [h, d, x, y])

您需要(0,0)而不是(h,d)

pygame.draw.rect(self.image, color, [0, 0, x, y])

,您必须将(h,d)Rect()

一起使用
self.rect = self.image.get_rect()
self.rect.x = h
self.rect.y = d

坦率地说,draw.rect()将使用所有表面,因此您只能使用fill()

def __init__(self, color, h, d, x, y):
    super().__init__()

    self.image = pygame.Surface([x, y])
    self.image.fill(color)

    self.rect = self.image.get_rect()
    self.rect.x = h
    self.rect.y = d

如果你为变量使用更好的名字,那么你得到

def __init__(self, color, x, y, width, height):
    super().__init__()

    self.image = pygame.Surface([width, height])
    self.image.fill(color)

    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y