【发布时间】: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()
【问题讨论】: