<p>要移动对象,您不仅要更改<code>x,y</code>和更新屏幕(将缓冲区发送到将显示它的显卡),还要清理缓冲区,在缓冲区(<code>blit()</code>)的新位置绘制图像。你知道吗</p>
<p>此代码仅显示正在工作的<code>move_target</code>。我跳过了其余的代码。你知道吗</p>
<p>我保持在<code>target_rect</code>的位置,也就是<code>pygame.Rect</code>。您可以使用它来<code>blit(img,rect)</code>,但稍后您也可以使用它来检查冲突<code>rect.colliderect(other_rect)</code></p>
<pre><code>import pygame
# - constants - (UPPER_CASE_NAMES)
BLACK = (0, 0, 0)
SURFACE_WIDTH = 1054
SURFACE_HEIGHT = 562
# - functions - (lower_case_names)
def move_target(target_img, target_rect):
alive = True
clock = pygame.time.Clock()
while alive:
# - events -
for event in pygame.event.get():
if event.type == pygame.QUIT:
alive = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
alive = False
# - updates/changes -
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_LEFT]:
target_rect.x -= 5
if keys_pressed[pygame.K_RIGHT]:
target_rect.x += 5
if keys_pressed[pygame.K_UP]:
target_rect.y -= 5
if keys_pressed[pygame.K_DOWN]:
target_rect.y += 5
# - draws -
surface.fill(BLACK)
surface.blit(target_img, target_rect)
pygame.display.update()
# the same game's speed on all computers = 60 FPS
clock.tick(60)
# - main - (lower_case_names)
pygame.init()
pygame.display.set_caption('Robot Apocalypse')
surface = pygame.display.set_mode((SURFACE_WIDTH, SURFACE_HEIGHT))
target_img = pygame.image.load('target.png')
target_img = pygame.transform.scale(target_img, (40, 40))
target_rect = target_img.get_rect()
move_target(target_img, target_rect)
pygame.quit()
</code></pre>