为何pygame中draw.line的start_pos参数无效?代码报TypeError
Pygame网格绘制报错:TypeError: invalid start_pos argument 解决方法
错误根源
pygame.draw.line() 要求起始点和结束点必须是**(x, y)格式的二元组**,你现在传的是单个数值,Pygame无法识别成有效坐标,直接触发了类型错误。
另外你的代码还有两个小问题:
- 循环逻辑绕,用
while写得太复杂,容易出错 - 结束点的计算完全不对,
vl_var * i * screen.get_width()会算出远超屏幕范围的数值,根本画不出正确的线
修正后的完整代码
def grid(vl): screen_width = screen.get_width() screen_height = screen.get_height() grid_spacing = screen_width / vl # 计算网格间距 # 画竖线:x坐标固定,y从屏幕顶到底 for i in range(1, vl): x = grid_spacing * i pygame.draw.line(screen, (94, 94, 94), (x, 0), (x, screen_height)) # 画横线:y坐标固定,x从屏幕左到右 for i in range(1, vl): y = grid_spacing * i pygame.draw.line(screen, (94, 94, 94), (0, y), (screen_width, y))
核心改动点
- 把坐标参数改成
(x, y)二元组,完全符合Pygame的函数参数要求 - 用
for循环替代冗余的while逻辑,直接遍历网格线的索引,简洁明了 - 分别处理竖线和横线,确保网格覆盖整个屏幕区域
- 提前缓存屏幕宽高,避免重复调用API,小幅提升性能
内容的提问来源于stack exchange,提问作者Mika Zirklewski
相关产品推荐
相关产品推荐

