为我的测试游戏创建了一个背景,但屏幕更新得很糟糕

时间:2014-02-25 05:11:30

标签: python animation pygame sprite

我的RPG代码:     import pygame,sys     来自pygame.locals import *     pygame.init()

pygame.mixer.init()
pygame.mixer.music.load("nq-rotmg.mp3")
pygame.mixer.music.play(-1)

FPS = 30
fpsClock = pygame.time.Clock()

pywindow = pygame.display.set_mode((500, 500))
pygame.display.set_caption('God of the Mad Realm')
WHITE = (255, 255, 255)

background = pygame.image.load("Background.jpg")
pywindow.blit(background, (0, 0))
pygame.display.flip()

rogueImg = pygame.image.load('Rogue.png')

roguex = 10
roguey = 10
pygame.key.set_repeat(10, 10)

while True: 
    for event in pygame.event.get():
        if event.type==QUIT:
            pygame.quit()
            sys.exit()

    keys_pressed = pygame.key.get_pressed()

    if keys_pressed[K_LEFT]:
        roguex -= 3

    if keys_pressed[K_RIGHT]:
        roguex += 3

    if keys_pressed[K_UP]:
        roguey -= 3

    if keys_pressed[K_DOWN]:
        roguey += 3

    pywindow.blit(rogueImg, (roguex, roguey))
    pygame.display.update()
    fpsClock.tick(FPS) 

问题的屏幕截图: screenshot of the problem

它只是给了我这个有趣的白色像素化背景...... 谢谢大家和任何帮助!

3 个答案:

答案 0 :(得分:0)

在你的主循环(while True循环)中,你只需要在流氓的形象之前blit背景图像。就在你做之前

pywindow.blit(rogueImg, (roguex, roguey))

你应该做

pywindow.blit(background, (0, 0))

问题在于,正如您的代码所示,背景将被绘制一次。当你将精灵放在背景上时,你需要重新绘制背景。

答案 1 :(得分:0)

您可以通过设置图像的颜色键来阻止图像的白色部分显示:

rogueImg = pygame.image.load('Rogue.png')
rogueImg.set_colorkey((255,255,255))#sets the colorkey to white

顺便说一下:很长一段时间我使用大图像时遇到了pygame的速度问题。

所以一般来说,最好在blitting之前转换图像:

background = pygame.image.load("Background.jpg")
background = background.convert()

我希望我的想法会对你有所帮助。

答案 2 :(得分:0)

我不认为你更新你的背景。把它放在while循环中。

pywindow.blit(background,(0,0))

(流氓之前。)

希望这有帮助!