我正在尝试在Smalltalk中创建Dominion游戏,但我无法按照我想要的方式获得GUI的布局。
目前,我将其作为代码来构建 GUI:
open: game
| builder content |
builder := UITheme builder.
content := builder
newColumn:
{(builder
newListFor: game
list: #supplyStrings
selected: nil
changeSelected: nil
getEnabled: nil
help: 'Supply') .
(builder newRow: (game players collect: [ :p | self morphForPlayer: p usingBuilder: builder ]))}.
gui := (content openInWindowLabeled: 'DominionGame') extent: 1024 @ 768
(原谅糟糕的Smalltalk风格,我已经使用Smalltalk一个星期了)。
我得到了我想要的基本想法:一个窗口,顶部部分对所有玩家通用,底部为每个玩家分成几个部分。
我遇到的问题是顶部太大,占据了大约一半的窗口,我不知道如何解决这个问题。
我尝试将"vssize: #shrinkWrap"添加到 #supplyStrings 列表的构建器中,但这使其太小,迫使内容使用滚动条;我尝试将"范围:1024@200"添加到该变形中,但没有看到任何效果。
所以我有两个问题:
1) 如何对使用 UITheme 构建器构建的对象进行更精细的布局控制?2)我在哪里可以找到有关如何使用Pharo进行UI设计的文档? 我很想RTFM,如果我知道TFM对R的位置!
您可以在Pharo中构建不同抽象级别的UI。有魅力,你可以用演示文稿、窗格和端口来描述 UI。它对于构建专用模型浏览器最有用。对于构建游戏来说,它似乎不是最合适的。然后是Spec,旨在重用可组合的小部件。这可能很合适。今年夏天有一个GSoC项目来构建一个Spec UIPainter,所以你可以很好地了解如何布局UI。PolyMorph基本上是Morphic上的一个抽象层,提供不同的皮肤(UIThemes)。下面是形态。直接在Morpic中构建的一个优点是有一个很好的游戏构建示例:Laser Game(需要稍微更改才能在Pharo中使用)。