Rebol / View:如何将图像分配给已创建的布局?

时间:2010-11-01 22:45:54

标签: rebol

使用Rebol / View 2.7.7,我正在尝试基于Nick的Rebol教程创建一个卡片游戏:http://re-bol.com/rebol.html#section-10.18。我想要做的是读取Nick创建的二进制文件中的卡片,丢弃一些数据,然后用它来布局一个卡片组,4行3列,未使用2个中心卡位置。

这是我的代码:

protect-system

random/seed now

do %cards.r  ;--include the binary card data

the-tableau: [
 size 320x480 backdrop 0.170.0
 style tabstyle image 80x100 teal
 style holdplace box 80x100 coal
 across
 at 30x20 tc1: tabstyle
 tc2: tabstyle 
 tc3: tabstyle return
 at 30x130 tc4: tabstyle
 tc100: holdplace
 tc5: tabstyle return
 at 30x240 tc6: tabstyle
 tc200: holdplace
 tc7: tabstyle return
 at 30x350 tc8: tabstyle
 tc9: tabstyle
 tc10: tabstyle
]

lc: copy []
lc: [tc1 tc2 tc3 tc4 tc5 tc6 tc7 tc8 tc9 tc10]
deck-cards: copy []  ; The deck holds all of the cards from the binary file
deck-cards-num: copy []
deck-cards-color: copy []
lay: layout the-tableau
foreach [card label num color pos] cards [

 dimg: load to-binary decompress (card)
 append deck-cards dimg ;feel movestyle
 throw-away-label: label
 append deck-cards-num num
 append deck-cards-color color
 throw-away-pos: pos
]

random-card: does [pick deck-cards random length? deck-cards]
foreach c lc [set-face get c deck-cards]

view lay

do-events

但这根本不显示卡片。我甚至不确定它是否正确阅读?问题在哪里?

3 个答案:

答案 0 :(得分:0)

如果事件循环未启动,您只需要'do-events。

View / new不会启动事件循环..但View会

我不是解决你的实际问题:(

答案 1 :(得分:0)

实际上你最后没有在for循环中使用随机卡功能......: - )

foreach c lc [get c set-face get c random-card ]

您注意到您不确定数据是否已正确加载...

这是一个简单的方法来找出...只需打印/探测TYPE?那个数据

dimg: load to-binary decompress (card)
probe type? dimg

在这种情况下,它会打印图像!在控制台......所以是的...那是有效的。 : - )

作为一个额外的细节,我注意到你没有随机补偿卡片数据中的“背面”图像(最后),因此随机卡功能应该像这样修复:< / p>

random-card: does [pick deck-cards random (length? deck-cards) - 1] ; - 1 since we don't want the back face to be picked.

答案 2 :(得分:0)

要使事件说明清楚,我在这里添加了一个小答案,所以我可以添加一些内联代码....

这是一个你希望使用你的事件的例子。

view/new lay ; display the interface right now. (with no cards)

random-card: does [pick deck-cards random (length? deck-cards) - 1] ; - 1 since we don't want the back face to be picked.

; deal cards with a half second delay.
foreach c lc [f: get c set-face get c random-card wait 0.5]


do-events

这里,在所有视图窗口关闭后,“DO-EVENTS”之后放置的任何代码都将被执行。

可以是tmp文件清理,退出时保存,“保存更改”对话框等。

附加说明:

在构建图形代码时,将它放在应用程序的最开始是一个好习惯:

print " " 

它将打开控制台,然后任何视图窗口都会显示在它前面。

准备好分享时,只需注释该行并删除代码中的所有打印语句。

这对3件事很有用:

1)当你的应用程序在你的窗口打开后跟踪(打印/探测/等)某些东西时,它总是会弹出你的应用程序,这通常非常烦人。

2)如果您的应用程序正确退出,这也会产生更有用的副作用,因为当所有等待都正确终止时,控制台也会退出。

在原始示例中,如果添加上面的打印,那么您将看到控制台永远不会关闭,因此这意味着应用程序仍在运行,没有更多的应用程序窗口监听事件。

3)它还具有以下优点:您可以通过关闭控制台窗口直接终止图形应用程序。这样可以有效地关闭所有窗口并立即等待,并快捷键出您可能拥有的“应用程序退出”代码(事件后的代码)。