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

Pygame实现方块右移时出现多余下移方块的渲染异常问题

Pygame方块渲染与移动异常修复

问题现象

使用Pygame开发时预期实现生成3个方块并控制其向右移动的功能,核心逻辑可正常运行,但存在两处异常:

  • 代码仅编写了3个方块的生成逻辑,实际运行时额外渲染出2个方块
  • 2个额外方块未编写向下移动控制逻辑,运行时会自动向下移动,与预期效果不符

问题复现代码如下:

import pygame
import random
import time
enemyCoordList = []
pygame.init()
rand = random.Random()
screen = pygame.display.set_mode((1000, 600))
px = 30
py = 30

def enemy(x, y, sizex=30, sizey=30, health=0, speed=6,):
    enemyCoordList.append(x)
    enemyCoordList.append(y)

def drawEnemy():
    for l in range(len(enemyCoordList)-1):
        pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(enemyCoordList[l], enemyCoordList[l+1], 50, 50))

enemy(30, 30)
enemy(50, 50)
enemy(100,100)
print(enemyCoordList)
run = True
while run:
    time.sleep(0.05)
    screen.fill((9, 68, 43))
    drawEnemy()
    for i in range(len(enemyCoordList)):
        if i % 2 != 0:
            continue
        enemyCoordList[i] += 1
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
pygame.quit()

根因分析

两处异常本质是同一个逻辑错误引发的连锁问题:

  1. 多渲染方块的原因:drawEnemy函数的坐标配对逻辑错误。当前逻辑遍历坐标列表时,会将所有相邻的两个值都配对为方块的(x,y)坐标。3个方块的坐标存入扁平列表后总长度为6,range(len(enemyCoordList)-1)会生成0-4共5个索引值,最终绘制5个方块,比预期多2个。
  2. 额外方块自动下移的原因:移动逻辑仅对列表中索引为偶数的x坐标做每帧+1的右移操作,错误配对生成的方块,会把前一个方块持续增长的x坐标当成自身的y坐标,视觉上就呈现出自动向下移动的效果。

修复方法

修正drawEnemy函数的遍历逻辑,按步长2遍历坐标列表,每两个连续值为一组读取对应方块的x、y坐标即可。优化后的drawEnemy代码如下:

def drawEnemy():
    # 步长设为2,每两个坐标为一组,对应一个方块的x、y
    for l in range(0, len(enemyCoordList), 2):
        pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(enemyCoordList[l], enemyCoordList[l+1], 50, 50))

优化建议:后续开发中尽量不要用扁平列表交错存储x、y坐标,可以将每个敌人的属性存储为元组/字典/对象,例如enemyList.append({"x":x, "y":y}),从根源上避免索引配对错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:06:33