【问题标题】:Black box appears behind character when moving in pygame, how to make it disappear?在pygame中移动时角色后面出现黑框,如何让它消失?
【发布时间】:2015-11-07 02:58:35
【问题描述】:

我试图在屏幕上左右移动一个角色,并且每次都会绘制和擦除它。尽管字符的背景是透明的,但在其后面有一个可见图像大小的黑框,随着它移动。它不会离开火车,而是更像你正在移动的角色。我该如何解决?这是我的玩家代码和游戏代码。

玩家:

class Player:

    def __init__(self,Scr,cx,cy,speed,bcolor):
        self.screen = Scr
        self.surf = pygame.image.load('player.png')
        self.surf = pygame.transform.scale(self.surf, (160, 200))
        self.rect = self.surf.get_rect()
        self.rect.centerx = cx
        self.rect.y = 510
        self.speed = 30
        self.bc = bcolor

    def draw(self):
        self.screen.blit(self.surf,self.rect)
        pygame.display.update([self.rect])

    def undraw(self):
        surf = self.surf.copy()
        surf.fill(self.bc)
        self.screen.blit(surf,self.rect)
        pygame.display.update([self.rect])

    def move(self,mv):
        self.undraw()
        if mv == 'd' and self.rect.bottom < WHT:
            self.rect.top += self.speed
        if mv == 'u' and self.rect.top > 0:
            self.rect.top -= self.speed
        if mv == 'l' and self.rect.left > 0:
            self.rect.left -= self.speed
        if mv == 'r' and self.rect.right < WWD:
            self.rect.right += self.speed
        self.draw()
        pygame.display.update()

    def jump(self,top,left):
        self.undraw()
        self.rect.top = top
        self.rect.left = left
        self.draw()
        pygame.display.update()

游戏:

class EggDrop:

def __init__(self,Scr):

    pygame.display.update()
    #pygame.mixer.music.load('background.mid')
    #pygame.mixer.music.play(-1,0.0)
    #self.Mplay = True
    self.Player = Player(Scr,WWD//2,WHT//2,6,BLACK)
    Scr.blit(BG, (0, 0))
    self.Scr = Scr

def togglePlayer(self):
    if self.Pvis:
        self.Player.undraw()
    else:
        self.Player.draw()
    self.Pvis = not self.Pvis

主循环

def run(self):
    STOP = False
    while not STOP:
        for event in pygame.event.get():
            if event.type == QUIT:
                STOP = True
            if event.type == KEYDOWN:
                if event.key == K_LEFT or event.key == ord('a'):
                    self.Player.move('l')
                if event.key == K_RIGHT or event.key == ord('d'):
                    self.Player.move('r')
                #if event.key == K_RETURN:
            if event.type == KEYUP:
                if event.key == ord('q'):
                    STOP = True
                if event.key == K_ESCAPE:
                    STOP = True
                if event.key == ord('x'):
                    top = random.randint(0, WHT - self.Player.rect.height)
                    left = random.randint(0, WWD - self.Player.rect.width)
                    self.Player.jump(top,left)
                if event.key == ord('m'):
                    self.toggleMusic()
        self.Scr.blit(BG, (0, 0))
        #self.Player.draw()

    pygame.mixer.music.stop()

Display = pygame.display.set_mode((WWD,WHT),0,0)
pygame.display.set_caption('Egg Drop V.1')


OpeningScreen(Display)

g = EggDrop(Display)
g.run()

pygame.quit()

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    当使用具有透明度的 .png 时,加载后在 Surface 上调用 convert_alpha

    来自pygame.image.load

    对于 alpha 透明度,就像在 .png 图像中一样,在加载后使用 convert_alpha() 方法,以便图像具有每个像素的透明度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2019-10-06
      • 2019-05-09
      • 1970-01-01
      相关资源
      最近更新 更多