请考虑这个简单的 rebol2 代码来说明我的问题:
REBOL []
a: make face [
offset: 0x0
color: yellow
size: 20x20
]
b: make face [
offset: 0x0
color: red
size: 60x60
pane: reduce [
make a [offset: 0x0]
make a [offset: 10x10]
make a [offset: 10x20]
]
]
view layout [
box 200x200 white with [
pane: reduce [
make b [offset: 0x30] ;; one 'instance' of b
]
]
]
这里的要点是布局(或面)能够在其 Pane 块内以这样的方式显示一堆面,即可以多次创建同一个面(在这种情况下为
b
)。显示的代码运行良好,唯一的实例(让我这样称呼它)b
按原样显示。但是现在假设我更改了代码,所以我有 2 个
b
的实例。 :view layout [
box 200x200 white with [
pane: reduce [
make b [offset: 0x30]
make b [offset: 0x10]
]
]
]
此时我收到错误
** Script Error: Face object reused (in more than one pane): none
** Where: view
** Near: show scr-face
if new [do-events]
从我在这里推测的消息中,脸
b
不知何故被重用并弄乱了我正在努力实现的目标。我已经对此进行了大量研究,并且在某些时候我发现可以通过克隆(使用 make
)要传递给 pane
的脸来绕过它。 ;这就是我认为我正在做的事情,但根本没有成功。鉴于这种情况,我的问题是:我该如何解决这个问题? rebol2 可以提供这种“面部实例化”,还是最好在 rebol2 之外尝试其他东西(也许是 rebol3)?
任何帮助将不胜感激。
最佳答案
Rebol2 绝对可以做到这一点。
当您第二次 MAKE b 时,您使用的是 a 的相同实例。那就是问题所在。
您可以编写一个函数来创建必要的面并将它们附加到一个块中并返回。
不要忘记每次都创建一个(第一张脸)。
此外,检查文档中的迭代面。
在这里,我添加了一个示例:
REBOL []
make-pane: func [ofst [pair! block!] /local a b faces] [
a: make face [
offset: 0x0
color: yellow
size: 20x20
]
faces: copy []
either block? ofst [
foreach o ofst [
append faces make a [offset: o]
]
] [
append faces make a [offset: ofst]
]
b: make face [
offset: 0x0
color: red
size: 60x60
pane: faces
]
]
view layout [
box 200x200 white with [
pane: make-pane [5x30 0x10 20x5]
]
]
您可以更改函数以获得更多参数来更改颜色和其他方面。
关于rebol - VID 布局 Pane 支持多个人脸创建 [rebol2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933559/