为什么我不能在人物图像闪亮时blit背景图像?

时间:2013-03-06 16:05:09

标签: python image screen pygame blit

我正在尝试为我的游戏显示背景图像,但是当我快照它时,它只在屏幕上以黑色背景显示我的主要可玩角色。任何人都可以帮我解决这个问题。

以下是代码:

import sys, pygame, os
pygame.init()

size = width, height = 320, 240
xREVERSEspeed = [-2, 0]
xspeed = [2, 0]

screen = pygame.display.set_mode(size)
pygame.display.set_caption("Game")
os.environ['SDL_VIDEO_WINDOW_POS'] = 'center'

ball = pygame.image.load("turret.png").convert_alpha()
background = pygame.image.load("scoreframe.png").convert()
ballrect = ball.get_rect(center=(160, 231))
BACKGROUNDrect = background.get_rect()
clock = pygame.time.Clock()

while True:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()    
        if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                        print "I've pressed the LEFT arrow button."
                        ballrect = ballrect.move(xspeed)
                        print ballrect
                if event.key == pygame.K_RIGHT:
                        print "I've pressed the RIGHT arrow button."
                        ballrect = ballrect.move(xREVERSEspeed)
                        print ballrect

    screen.blit(ball, ballrect, background, BACKGROUNDrect)
    pygame.display.flip()

2 个答案:

答案 0 :(得分:1)

首先,你的缩进是错误的,但我认为这是一个错字。你的事件部分与你的游戏在循环时处于同一级别,它应该在里面。 bl bl也是昙花一现。 我也看到你正在使用错误的blitting函数。来自pygame文档:

Surface.blit(source, dest, area=None, special_flags = 0): return Rect

将表面source点击到由Surface指定的目的地的dest上,可选地area是一个矩形,用于定义源表面的地下被搞砸了。 你必须分别对角色和背景图像进行blit。所以你应该这样做:

screen.blit(background,(0,0))
screen.blit(ball,ballrect)

答案 1 :(得分:1)

我不知道你粘贴在这里时是否搞砸了,但你的“if event.type”不是“1:”中的

无论如何试试这个:

while 1:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()


    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            print "I've pressed the LEFT arrow button."
            ballrect = ballrect.move(xspeed)
            print ballrect
        if event.key == pygame.K_RIGHT:
            print "I've pressed the RIGHT arrow button."
            ballrect = ballrect.move(xREVERSEspeed)
            print ballrect
    screen.blit(background,(BACKGROUNDrect))
    screen.blit(ball,(ballrect))
    pygame.display.flip()