Pygame中Surface绘制线条blit后不显示问题求助
问题分析与解决
你的代码里,绘制线条时错误使用了屏幕坐标系,而非road Surface的本地坐标系,导致线条被画到了road的可视区域之外,所以无法显示。
road Surface的高度仅为100,但你计算的线条y坐标是(SCREEN_HEIGHT-road_height)/2+st_ratio*road_height,这个值约为203.75,远大于road的高度,线条直接超出了road的范围,自然看不到。
修改后的代码
import pygame as pg import numpy as np pg.init() # 定义屏幕宽高常量 SCREEN_WIDTH = 750 SCREEN_HEIGHT = 500 # 创建屏幕对象 screen = pg.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) screen.fill((40,158,80)) running = True while running: for event in pg.event.get(): if event.type == pg.QUIT: running = False # 道路Surface road_height = 100 road = pg.Surface((SCREEN_WIDTH+10,road_height)) road.fill((0,0,0)) road_topleft = [0,(SCREEN_HEIGHT-road_height)/2] # 侧边线参数 st_ratio = 0.0375 # 侧边线宽度与道路高度的比例 sl_width = int(np.rint(st_ratio*road_height)) # 改用road本地坐标系计算线条y位置 line_y = st_ratio * road_height # 基于road本地坐标绘制线条 pg.draw.line(road, (255,255,255), [0, line_y], [road.get_width(), line_y], sl_width) screen.blit(road, road_topleft) pg.display.flip() pg.quit()
关键修改点
- 将线条的y坐标改为
st_ratio * road_height,确保线条处于road Surface的可视范围内(基于road左上角的本地坐标) - 线条终点的x坐标改用
road.get_width(),适配road的实际宽度,避免超出范围
内容的提问来源于stack exchange,提问作者mcali
相关产品推荐
相关产品推荐

