呈现标签不起作用,除非屏幕函数计算它



我试图在on-render屏幕功能上render!一个简单的标签,但它不起作用。我得到的只是一个空白屏幕。

我花了一些时间,但我终于发现当我返回标签以外的其他东西时会发生这种情况。例如,这适用于:

(defscreen main-screen
  :on-show
  (fn [screen entities]
    (update! screen :renderer (stage))
    [])
  :on-render
  (fn [screen _]
    (clear!)
    (render! screen [(label "Hello, world!" (color :white))])))

这不会(更改的只是on-render上的最后一行):

(defscreen main-screen
  :on-show
  (fn [screen entities]
    (update! screen :renderer (stage))
    [])
  :on-render
  (fn [screen _]
    (clear!)
    (render! screen [(label "Hello, world!" (color :white))])
    ["I just wanna pass my own data here, ugh.."]))

为了进行测试,我用texture替换了label它确实有效。

这是什么原因造成的? 这似乎很武断(无论如何,我在第一个示例中评估的标签被完全忽略了!那么为什么我必须通过它呢?我不明白发生了什么)。

附言在这种情况下,在每一帧上创建标签是有意的,我知道我可以从我在on-show中制作的标签中设置它,但我试图变得更加动态。我还尝试在render!之后放置一个Thread/sleep,以确保在渲染和清除之间有一个可见的时间窗口。

是一个完全的初学者,我想知道为什么除了如何解决它之外,上述方法不起作用?

查看play-clj的defscreen-doc,特别是:

所有函数都采用屏幕映射和实体向量作为参数,并且 返回末尾的实体列表以及任何所需的更改。如果 函数返回 nil,实体列表不会更改。

你既不返回nil也不返回(可选更改的)entities,而是返回带有字符串的向量。

我希望这就是代码无法正常工作的原因 - 虽然还没有测试过。

您对"自己的数据"的意图是什么?

最新更新