在球拍中将文本显示为图像时换行

时间:2019-04-01 22:14:21

标签: scheme racket

说我有一些长文本

(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 个答案:

答案 0 :(得分:2)

您需要自己动手,但这并不难。

#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可以进一步改进,但在这种情况下效果很好。