如何更改smalltalk中变形的位置?二维网格

如何更改smalltalk中变形的位置?二维网格,smalltalk,pharo,Smalltalk,Pharo,你好,我很难改变一些变形的位置。虽然可以通过以下方式将其从检查员处移开: self position: 50 @ 50 比如说。 我写了一个函数,它应该设置2d变形集合的位置。 Cell是simple switchmorph的一个子类。拥有这个函数的类是边界变形的一个子类 setCells | xPos yPos row col | xPos := 0. yPos := 0. row := 1. col := 1. cells := OrderedCollection new. cols ti

你好,我很难改变一些变形的位置。虽然可以通过以下方式将其从检查员处移开:

self position: 50 @ 50
比如说。 我写了一个函数,它应该设置2d变形集合的位置。 Cell是simple 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 ] ]
我没有得到一个错误,实际上所有的单元格都被添加了,但都在同一个位置。 当我试着把它们扔到这个世界上时,同样的事情发生了。都在同一地点

我希望有人能帮我。 干杯

解决方案:


您没有更新变量
xPos
row
yPos
col
。因此,与其

            xPos + cellSize.
            row + 1 ].

你应该说

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


好的,是的,就是这样,谢谢你杀了它。但由于某些原因,变形现在到处都是,不像xDok那样网格化。我忘了重置xPos,现在它工作了。再次感谢。我学到的教训不是+=。再次感谢:)解决方案已添加到question@TheFool:如果Leandro的答案帮助您解决了问题,请将其标记为已接受的答案。此外,我们通常不会在这里用解决方案更新问题,所以-它应该是一个问答网站,所以顶部应该有一个问题,下面应该有零个或多个答案。如果你真的相信你的解决方案会让其他人受益,请将其包含在原始问题下面,并清楚地将其标记为更新。对不起,我不知道如何更新。如果我试图推翻他的答案,什么也不会发生,因为我的代表太低了。而另一种选择似乎不可用。另外,我是新来的。我可能会弄错一些事情。我愿意改正。我如何标记他的答案?@TheFool:你只需要在向上/向下投票箭头下方标记(当然,只有在你提问时才有效)。不用担心,每个人在某一点上都是新开始的-我建议大家学习基础知识。提示:在评论中使用“@name”让你回复的人知道他们收到了新消息。
    row:=1.
    yPos + cellSize.
    col + 1].
            xPos := xPos + cellSize.
            row := row + 1].
    row := 1.
    yPos := yPos + cellSize.
    col := col + 1].