我不知道发生了什么,几分钟前它可以工作,但现在不行了。每次都崩溃。
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()
我必须在一小时内解决这个问题。
我阅读了与此相关的其他答案,但似乎没有任何效果。
只是添加细节
只是添加细节 只是添加细节
只是添加细节
只是添加细节
只是添加细节
答案 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)