fix bug
This commit is contained in:
@@ -1,6 +1,29 @@
|
||||
from typing import List
|
||||
|
||||
|
||||
def _wrap_text_by_pixels(font, text: str, max_width_px: int) -> List[str]:
|
||||
"""
|
||||
按像素宽度对单行文本进行硬换行,适配中英文混排(逐字符测量)。
|
||||
"""
|
||||
if not text:
|
||||
return [""]
|
||||
lines: List[str] = []
|
||||
current = ""
|
||||
for ch in str(text):
|
||||
test = current + ch
|
||||
w, _ = font.size(test)
|
||||
if w <= max_width_px:
|
||||
current = test
|
||||
else:
|
||||
if current:
|
||||
lines.append(current)
|
||||
# 新行从当前字符开始
|
||||
current = ch
|
||||
if current:
|
||||
lines.append(current)
|
||||
return lines
|
||||
|
||||
|
||||
def draw_sidebar(pygame_mod, screen, colors, font, events: List[object],
|
||||
world_map, tile_size: int, margin: int, sidebar_width: int):
|
||||
sidebar_x = world_map.width * tile_size + margin * 2
|
||||
@@ -23,15 +46,18 @@ def draw_sidebar(pygame_mod, screen, colors, font, events: List[object],
|
||||
(sidebar_x + sidebar_width - 10, line_y), 1)
|
||||
|
||||
event_y = line_y + 15
|
||||
max_events = (screen.get_height() - event_y - margin) // 20
|
||||
recent_events = events[-max_events:] if len(events) > max_events else events
|
||||
for event in reversed(recent_events):
|
||||
# 预留左右边距各10px
|
||||
usable_width = sidebar_width - 20
|
||||
# 从最新事件开始,逐条向下渲染,超出底部则停止
|
||||
for event in reversed(events):
|
||||
event_text = str(event)
|
||||
if len(event_text) > 35:
|
||||
event_text = event_text[:32] + "..."
|
||||
event_surf = font.render(event_text, True, colors["event_text"])
|
||||
screen.blit(event_surf, (title_x, event_y))
|
||||
event_y += 20
|
||||
wrapped_lines = _wrap_text_by_pixels(font, event_text, usable_width)
|
||||
for line in wrapped_lines:
|
||||
event_surf = font.render(line, True, colors["event_text"])
|
||||
screen.blit(event_surf, (title_x, event_y))
|
||||
event_y += event_surf.get_height() + 2
|
||||
if event_y > screen.get_height() - margin:
|
||||
break
|
||||
if event_y > screen.get_height() - margin:
|
||||
break
|
||||
|
||||
|
||||
Reference in New Issue
Block a user