我试图在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
,而是返回带有字符串的向量。
我希望这就是代码无法正常工作的原因 - 虽然还没有测试过。
您对"自己的数据"的意图是什么?