Обтекание текста при отображении текста в виде изображения в ракетке - PullRequest
2 голосов
/ 02 апреля 2019

Скажите, у меня есть длинный текст

(define EXTREMELY-LONG-TEXT "foo foo ...(like 25 times)... foo")

и мне нужно нарисовать его на фоне, ограниченном по оси x, но не по оси y. Есть ли в любом случае, чтобы ограничить направление текста X и по умолчанию расширить его вниз? Или я должен определить свою собственную функцию для выполнения этой задачи?

В настоящее время у меня есть текстовая приключенческая игра с изменяющейся длиной текста, и я хочу иметь возможность определять постоянную x для игры, в которой будет выполняться, вместо того, чтобы определять большой фон для рисования, например

(define BG (empty-scene 500 100))
(overlay/align "center" "top" (text EXTREMELY-LONG-TEXT 16 "black") BG)

1 Ответ

2 голосов
/ 02 апреля 2019

Вы должны сделать это самостоятельно, но это не должно быть сложно.

#lang racket

(require 2htdp/image)

(define TEXT-SIZE 16)
(define WIDTH 500)
(define limit (exact-floor (* 2.4 (/ WIDTH TEXT-SIZE))))

(define EXTREMELY-LONG-TEXT (string-append* (make-list 25 "foo ")))

(define (fit-string s)  
  (string-append*
   (map list->string
        (add-between (sequence->list (in-slice limit (string->list s)))
                     '(#\newline)))))

(define BG (empty-scene WIDTH 100))
(overlay/align
 "center" "top"
 (text (fit-string EXTREMELY-LONG-TEXT) TEXT-SIZE "black") BG)

Формула 2.4 * WIDTH / TEXT-SIZE может быть улучшена и в дальнейшем, но в этом случае она работает достаточно хорошо.

...