smalltalk - 我怎样才能改变smalltalk中变形的位置?二维网格

标签 smalltalk pharo

您好,我无法更改某些变形的位置。虽然可以通过以下方式将它们从 Inspector 中移出:

self position: 50 @ 50

例如。 我写了一个函数,它应该设置 2d 变形集合的位置。 Cell 是简单 switchmorph 的子类。拥有此功能的类是 bordered morph 的子类。

setCells
| xPos yPos row col |
xPos := 0.
yPos := 0.
row := 1.
col := 1.
cells := OrderedCollection new.
cols timesRepeat: [ cells add: OrderedCollection new ].
cells do: [ :each | rows timesRepeat: [ each add: (Cell new size: cellSize) ] ].
rows
    timesRepeat: [ cols
            timesRepeat: [ ((cells at: row) at: col) position: xPos @ yPos.
                xPos + cellSize.
                row + 1 ].
        row:=1.
        yPos + cellSize.
        col + 1 ].
cells do: [ :x | x do: [ :y | self addMorph: y ] ]

我没有收到错误,实际上所有单元格都已添加,但都在同一位置。 当我试图将它们转换到世界上时,同样的事情发生了。都在同一个地方。

我希望有人能帮我解决这个问题。 干杯

解决方法:
the solution

calculatePositions
| row col xPos yPos |
row := 1.
col := 1.
xPos := 0.
yPos := 0.
rows
    timesRepeat: [ cols
            timesRepeat: [ ((cells at: row) at: col) position: xPos @ yPos.
                xPos := xPos + cellSize.
                row := row + 1 ].
        row := 1.
        xPos := 0.
        yPos := yPos + cellSize.
        col := col + 1 ]

最佳答案

您没有更新变量 xPosrowyPoscol。所以,而不是

            xPos + cellSize.
            row + 1 ].

    row:=1.
    yPos + cellSize.
    col + 1].

你应该说

            xPos := xPos + cellSize.
            row := row + 1].

    row := 1.
    yPos := yPos + cellSize.
    col := col + 1].

关于smalltalk - 我怎样才能改变smalltalk中变形的位置?二维网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348925/

相关文章:

oop - 在测试用例中添加特征时获取 'ObsoleteTrait'

objective-c - Objective-c 中的 Smalltalk block ?

smalltalk - 如何在 Dolphin Smalltalk 中创建 SUnit 测试?

smalltalk - 鲜为人知的 Smalltalk 二进制消息及其含义?

smalltalk - 如何在 Roassal 3 中格式化图表?

error-handling - 在 Smalltalk/Pharo 中创建以 block 作为参数的键值消息

smalltalk - Pharo Smalltalk - 如何检查消息是否符合在另一个对象的类中定义的协议(protocol)?

smalltalk - Windows 上 Smalltalk (Pharo) 中的标准输入

smalltalk - Smalltalk的任何Web性能测试工具?

objective-c - ScriptingBridge - 它是如何工作的 "Behind the Scenes"