如何在smalltalk中更改变形的位置? 2D网格

时间:2018-01-19 20:19:47

标签: smalltalk pharo

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

self position: 50 @ 50
例如,

。 我写了一个函数,它应该设置2d变形集的位置。 Cell是简单switchmorph的子类。拥有此函数的类是带边变形的子类。

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 ]

1 个答案:

答案 0 :(得分:4)

您没有更新变量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].