Pygame中的blit问题

时间:2017-01-02 09:04:51

标签: python pygame

我正在尝试在Pygame中制作一个简单的平台游戏,并创建了我想要关卡的基本轮廓。但是,为了移动角色,我需要不断用颜色填充屏幕,颜色与地图重叠。我该怎么办?

我的代码:

import pygame
from pygame import *
import sys

WIN_WIDTH = 680 
WIN_HEIGHT = 500 


DISPLAY = (WIN_WIDTH, WIN_HEIGHT) #variable for screen display
DEPTH = 32 #standard
FLAGS = 0 #standard
RED = (0, 0, 255)

class Hero():
    def __init__(self, x, y):
        self.x = x
        self.y = y


    def appearance(self):
        return pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png')

    def move_right(self):
        self.x += 10
        return self.x


    def move_left(self):
        self.x -= 10
        return self.x





player = Hero(56, 420)
player_img = player.appearance()

x = 0
y = 0

platformx = 0
platformy = 0
WHITE = (255, 255, 255)
pygame.init()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
screen.fill(WHITE)
pygame.display.set_caption("Rum Islands")
timer = pygame.time.Clock()


level = [
        "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", #45 x 25
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "P                    PPPPPPPPPPP           P",
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "P    PPPPPPPP                              P",
        "P                                          P",
        "P                          PPPPPPP         P",
        "P                 PPPPPP                   P",
        "P                                          P",
        "P         PPPPPPP                          P",
        "P                                          P",
        "P                     PPPPPP               P",
        "P                                          P",
        "P   PPPPPPPPPPP                            P",
        "P                                          P",
        "P                 PPPPPPPPPPP              P",
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]






pygame.key.set_repeat(10,10)

while True:

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

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:
                x = player.move_left()


            elif event.key == pygame.K_RIGHT:
                x = player.move_right()

    screen.fill(WHITE)            
    for row in level:
        for col in row:
            if col == "P":
                pygame.draw.rect(screen, RED, (platformx, platformy, 40, 20))
            platformx += 15
        platformy += 20
        platformx = 0   



    screen.blit(player_img, (x, y))
    pygame.display.update()

1 个答案:

答案 0 :(得分:2)

修改后的代码。

您的问题是platformy,因为您再也没有将其设置为零。

import pygame

# --- constants ---

WIN_WIDTH = 680 
WIN_HEIGHT = 500 

DISPLAY = (WIN_WIDTH, WIN_HEIGHT) #variable for screen display
DEPTH = 32 #standard
FLAGS = 0 #standard

RED = (0, 0, 255)
WHITE = (255, 255, 255)

# --- classes ---

class Hero():

    def __init__(self, x, y):
        self.image = pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png')
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

    def move_right(self):
        self.rect.x += 10

    def move_left(self):
        self.rect.x -= 10

    def draw(self, screen):
        screen.blit(self.image, self.rect)

# --- main ---

level = [
        "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", #45 x 25
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "P                    PPPPPPPPPPP           P",
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "P    PPPPPPPP                              P",
        "P                                          P",
        "P                          PPPPPPP         P",
        "P                 PPPPPP                   P",
        "P                                          P",
        "P         PPPPPPP                          P",
        "P                                          P",
        "P                     PPPPPP               P",
        "P                                          P",
        "P   PPPPPPPPPPP                            P",
        "P                                          P",
        "P                 PPPPPPPPPPP              P",
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "P                                          P",
        "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",
]

# - init -

pygame.init()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)

pygame.display.set_caption("Rum Islands")
pygame.key.set_repeat(10,10)

# - objects -

player = Hero(56, 420)

# - mainloop -

timer = pygame.time.Clock()

while True:

    # - events -

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

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:
                player.move_left()

            elif event.key == pygame.K_RIGHT:
                player.move_right()

    # - updates -

    # - draws -

    screen.fill(WHITE)

    platform_x = 0
    platform_y = 0

    for row in level:
        for col in row:
            if col == "P":
                pygame.draw.rect(screen, RED, (platform_x, platform_y, 40, 20))
            platform_x += 15
        platform_y += 20
        platform_x = 0

    player.draw(screen)
    pygame.display.update()

    timer.tick(25)