<p>添加到@hippozipos答案中。使用<code>class</code>的一大好处是不需要使用<code>global</code>变量。您只需将它们设置为属性</p>
<p>您还试图在游戏循环中退出。
如果<code>running</code>是<code>False</code>,它将退出游戏循环并自行退出</p>
<p>也不需要在循环外填充,因为它每帧都被填充</p>
<p>我提供了一个如何实现这一目标的最简单的工作示例</p>
<pre><code>import pygame
from PIL import ImageGrab
class Player():
def __init__(self, img, x, y, window):
self.fist = img
self.pos = (x - 80, y + 40)
self.win = window
def move(self, movespeed, pressed):
# here we maintain the players position with self.pos
# this allows you to have multiple instances
# with different positions
x, y = self.pos
if pressed[pygame.K_a]:
x -= movespeed
elif pressed[pygame.K_d]:
x += movespeed
elif pressed[pygame.K_w]:
y -= movespeed
elif pressed[pygame.K_s]:
y += movespeed
self.pos = (x, y)
def display(self):
self.win.blit(self.fist, self.pos)
pygame.init()
screenshot = ImageGrab.grab()
WIDTH, HEIGHT = screenshot.size
RESOLUTION = (WIDTH, HEIGHT)
BACKGROUND_COLOR = (79, 205, 109)
MOVESPEED = 5
window = pygame.display.set_mode(RESOLUTION, flags=pygame.RESIZABLE, depth=32)
pygame.display.set_caption("The Connection")
clock = pygame.time.Clock()
# this is whatever your image is
img = pygame.image.load('fist.png')
x = int(WIDTH / 2 - 470)
y = int(HEIGHT / 2 - 400)
main_player = Player(img=img, x=x, y=y, window=window)
running = True
while running:
pressed = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
main_player.move(movespeed=MOVESPEED, pressed=pressed)
window.fill(BACKGROUND_COLOR)
main_player.display()
pygame.display.flip()
clock.tick(60)
</code></pre>