Pygame 黑屏崩溃

时间:2021-04-10 11:51:40

标签: python pygame

我不知道发生了什么,几分钟前它可以工作,但现在不行了。每次都崩溃。

import pygame, sys

WIDTH, HEIGHT = 800, 700
pygame.init()
win = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Qix")
clock = pygame.time.Clock()


# Player Class
class Player:
    def __init__(self, x, y):
        self.x = int(x)
        self.y = int(y)
        self.rect = pygame.Rect(self.x, self.y, 32, 32)
        self.color = (250, 120, 60)
        self.velX = 0
        self.velY = 0
        self.left_pressed = False
        self.right_pressed = False
        self.up_pressed = False
        self.down_pressed = False
        self.speed = 4
        self.enterPush = False
        while self.enterPush is True:
            if self.left_pressed and not self.right_pressed:
                self.velX = -self.speed
            if self.right_pressed and not self.left_pressed:
                self.velX = self.speed

            self.x += self.velX
            self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)


    def draw(self, win):
        pygame.draw.rect(win, self.color, self.rect)


    def push(self):
        if self.rect.x>760 or self.rect.y>560:

            self.enterPush = True


    def update(self):
        self.velX = 0
        self.velY = 0
        while self.enterPush is False:
            if self.left_pressed and not self.right_pressed:
                self.velX = -self.speed
            if self.right_pressed and not self.left_pressed:
                self.velX = self.speed
            if self.up_pressed and not self.down_pressed :
                self.velY = -self.speed
            if self.down_pressed and not self.up_pressed :
                self.velY = self.speed

            self.x += self.velX
            self.y += self.velY

            self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)




player = Player(WIDTH / 2, HEIGHT / 2)


while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.left_pressed = True
            if event.key == pygame.K_RIGHT:
                player.right_pressed = True
            if event.key == pygame.K_UP:
                player.up_pressed = True
            if event.key == pygame.K_DOWN:
                player.down_pressed = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                player.left_pressed = False
            if event.key == pygame.K_RIGHT:
                player.right_pressed = False
            if event.key == pygame.K_UP:
                player.up_pressed = False
            if event.key == pygame.K_DOWN:
                player.down_pressed = False


    win.fill((12, 24, 36))
    player.draw(win)
    player.update()
    pygame.display.flip()
    clock.tick(60)
    pygame.display.update()

我必须在一小时内解决这个问题。 我阅读了与此相关的其他答案,但似乎没有任何效果。
只是添加细节 只是添加细节 只是添加细节 只是添加细节 只是添加细节 只是添加细节

1 个答案:

答案 0 :(得分:1)

给你,修复代码:

import pygame

WIDTH, HEIGHT = 800, 700
pygame.init()
win = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Qix")
clock = pygame.time.Clock()


# Player Class
class Player:
    def __init__(self, x, y):
        self.x = int(x)
        self.y = int(y)
        self.rect = pygame.Rect(self.x, self.y, 32, 32)
        self.color = (250, 120, 60)
        self.velX = 0
        self.velY = 0
        self.left_pressed = False
        self.right_pressed = False
        self.up_pressed = False
        self.down_pressed = False
        self.speed = 4
        self.enterPush = False
        while self.enterPush is True:
            if self.left_pressed and not self.right_pressed:
                self.velX = -self.speed
            if self.right_pressed and not self.left_pressed:
                self.velX = self.speed

            self.x += self.velX
            self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)

    def draw(self, win):
        pygame.draw.rect(win, self.color, self.rect)

    def push(self):
        if self.rect.x>760 or self.rect.y>560:

            self.enterPush = True

    def update(self):
        self.velX = 0
        self.velY = 0
        # while self.enterPush is False:
        if self.left_pressed and not self.right_pressed:
            self.velX = -self.speed
        if self.right_pressed and not self.left_pressed:
            self.velX = self.speed
        if self.up_pressed and not self.down_pressed :
            self.velY = -self.speed
        if self.down_pressed and not self.up_pressed :
            self.velY = self.speed

        self.x += self.velX
        self.y += self.velY

        self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)


player = Player(WIDTH / 2, HEIGHT / 2)

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.left_pressed = True
            if event.key == pygame.K_RIGHT:
                player.right_pressed = True
            if event.key == pygame.K_UP:
                player.up_pressed = True
            if event.key == pygame.K_DOWN:
                player.down_pressed = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                player.left_pressed = False
            if event.key == pygame.K_RIGHT:
                player.right_pressed = False
            if event.key == pygame.K_UP:
                player.up_pressed = False
            if event.key == pygame.K_DOWN:
                player.down_pressed = False

    win.fill((12, 24, 36))
    player.draw(win)
    player.update()
    # pygame.display.flip()
    clock.tick(60)
    pygame.display.update()

首先是关于格式(根据 PEP 8 的建议):类方法定义之间的 1 个换行符,像我编辑的代码一样导入(虽然这是可以接受的:from module import class, func, etc)。

我也没有看到 .flip().update() 的意义,因为它们基本上是一样的。

关于您的问题:

while self.enterPush is False:
            if self.left_pressed and not self.right_pressed:
                self.velX = -self.speed
            if self.right_pressed and not self.left_pressed:
                self.velX = self.speed
            if self.up_pressed and not self.down_pressed :
                self.velY = -self.speed
            if self.down_pressed and not self.up_pressed :
                self.velY = self.speed

            self.x += self.velX
            self.y += self.velY

            self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)

这是你的问题:while 循环

解决方案:不使用它:

def update(self):
        self.velX = 0
        self.velY = 0
        # while self.enterPush is False:
        if self.left_pressed and not self.right_pressed:
            self.velX = -self.speed
        if self.right_pressed and not self.left_pressed:
            self.velX = self.speed
        if self.up_pressed and not self.down_pressed :
            self.velY = -self.speed
        if self.down_pressed and not self.up_pressed :
            self.velY = self.speed

        self.x += self.velX
        self.y += self.velY

        self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
相关问题