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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:15:07