尝试将碰撞检测作为使精灵彼此反弹的手段,但我的墙上的精灵并没有出现在坐标之后(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)
答案 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