所以我一直在用精灵和小组创造一个游戏。除了让我烦恼的一件事之外,一切都很顺利。一张图片说了千言万语: http://i.imgur.com/S3fsone.png
如您所见,背景图像显示在十字准线中,就像它应该的那样。然而,这艘船被长方形的白色边缘切断了。十字准线和船只都是精灵,其中使用的图像是透明的PNG图像。
我不知道如何删除它。目前我正在尝试十字准线,所以考虑到这一点,我将发布相关代码:
#Ship class
class Ship(pygame.sprite.Sprite):
def __init__(self, position):
pygame.sprite.Sprite.__init__(self)
self.imageoriginal = pygame.image.load("ship.png")
self.image = self.imageoriginal
self.rect = self.image.get_rect()
self.rect.center = position
#Crosshair class
class Pointer(pygame.sprite.Sprite):
def __init__(self, image):
super(Pointer, self).__init__()
self.image = image.convert_alpha()
self.rect = self.image.get_rect()
def update(self):
self.rect.center = pygame.mouse.get_pos()
def main():
pygame.init()
#Window and background
window = pygame.display.set_mode((1000, 600), SRCALPHA)
background = pygame.image.load("background.png")
window.blit(background, (0, 0))
#Ship and ship group
ship = Ship((490, 500))
theship = pygame.sprite.Group(ship)
#Crosshair image and group
crosshairimage = pygame.image.load("images\\crosshair.png")
pointer = pygame.sprite.Group()
#Game loop
running = True
while running:
clock.tick(60)
#Cut out from my event loop. Creates the crosshair that follows the mouse
for e in pygame.event.get():
elif e.key == K_4:
pointer.add(Pointer(crosshairimage))
#Update and redraw methods for both
theship.clear(window, background)
theship.update(window)
theship.draw(window)
pointer.clear(window, background)
pointer.update()
pointer.draw(window)
pygame.display.flip()
那应该是它。十字准线完美地跟随鼠标,并且它的非红色部分在背景上是透明的。然而,它并不比其他精灵透明,这就是问题的关键。在其他精灵上移动的其他精灵也会导致这个问题。
我可以猜到精灵中的矩形导致了这种情况,但我不知道如何修复它。尝试使用面具,但我需要rects能够移动我的精灵不是吗?发现不等于" self.rect.center = position"掩码类中的方法。
非常感谢,如果有人能告诉我我能做些什么,很长一段时间以来一直很头疼。
答案 0 :(得分:0)
我认为问题出在您的绘图部分。不要让每个组清楚并单独绘制,清除两个组,然后更新它们,然后绘制它们,而不是:
#Update and redraw methods for both
theship.clear(window, background)
theship.update(window)
theship.draw(window)
pointer.clear(window, background)
pointer.update()
pointer.draw(window)
pygame.display.flip()
有:
#Update and redraw methods for both
theship.clear(window, background)
pointer.clear(window, background)
theship.update(window)
pointer.update()
theship.draw(window)
pointer.draw(window)
pygame.display.flip()
我希望这会有所帮助。