You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame修改player.position移动精灵出现复制切半问题求解

问题原因

出现精灵复制、切半的显示异常,是两个核心Pygame绘制逻辑编写错误导致的:

  • 缺少每帧清屏操作。Pygame的窗口不会自动擦除上一帧绘制的内容,每次将移动后的精灵绘制到新位置时,旧位置的精灵图案会一直残留在窗口上,多层图案叠加就会出现“精灵被复制”的残影效果。
  • 屏幕刷新函数位置错误。pygame.display.update()被写在了主循环和绘制函数外部,程序启动时仅会执行一次屏幕刷新,后续主循环里的绘制内容不会被完整同步到窗口上,就会出现精灵显示不全、被切半的问题。

异常显示效果参考:
玩家精灵出现复制、切半的异常截图

修复方案

玩家类代码不需要做任何修改,只需要调整主文件的绘制逻辑即可:

  1. 在绘制函数的最开头添加窗口填充代码,每帧绘制前用背景色覆盖整个窗口,清除上一帧的残留内容。
  2. 将pygame.display.update()移动到绘制函数的最末尾,保证每帧所有游戏元素绘制完成后,再统一把结果刷新到屏幕上。

修正后的主文件代码如下:

import pygame
import player
import os

WIDTH, HEIGHT = 750, 750
# 可自行修改背景色数值,此处用草绿色作为高尔夫球场示例色
BG_COLOR = (34, 139, 34)

WINDOW = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("GOLF")

# 初始化玩家对象
player = player.PlayerClass()

def draw_window ():
    # 每帧绘制前先清屏
    WINDOW.fill(BG_COLOR)
    # 绘制玩家精灵
    WINDOW.blit(player.texture, player.position)
    # 所有内容绘制完成后统一刷新屏幕
    pygame.display.update()

def LeftClick ():
    player.position.x += 10

def main ():    
    run = True
    FPS = 60
    clock = pygame.time.Clock()

    while run:
        clock.tick(FPS)
        draw_window()
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    LeftClick()
main()

修改完成后运行,点击左键移动玩家精灵时就不会再出现残影、切半的显示问题。


内容的提问来源于stack exchange,提问作者NaniNoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:09:20