如何在 Squeak 的 Morph 上使用 Pen 进行交互绘制?

How to draw interactively with Pen on a Morph in Squeak?

它无法让 Pen 在 Morph 中正常工作。

我看到了下面的代码片段,但我不明白如何在移动笔后更新 Morph 的视图。我试图在各种 (sm, pen, (sm owner)) 对象中发送 "changed" 但它没有解决它。

在下面的代码片段中,如果我调整 window 的大小,则会绘制线条。或者,如果我把 "openInWindow" 作为最后一行。

sm := SketchMorph new.
sm clearExtent: 600@600 fillColor: (Color yellow) darker darker.
sm position: 100@100.
sm openInWindow. 
pen := sm penOnMyForm.
pen defaultNib: 4; color: (Color red).
pen up.
pen goto: 10@10. 
pen down.
pen goto: 100@100.

方法找到了,但是逻辑不明白

把这个加在最后。

sm layoutChanged.
pen goto: 150@100.
sm layoutChanged.
" ... and so on "

如果我查看 "layoutChanged" 定义并尝试自己发送这些方法,我会看到规则是 "generateRotatedForm" 的命令...嗯...为什么?

如果有 Morphic 专家愿意对此有所说明,我将不胜感激。

再见 尼古拉

您应该发送给 SketchMorph 而不是 #layoutChanged 的消息是

sm revealPenStrokes

这是 - 双关语 - 非常明显的意图;不是吗?

我是怎么找到它的

使用 Nicola 提供的提示,我调试了 sm layoutChanged 试图理解它显示该行的原因。我之前试过sm changed,但没有成功,所以我知道线索一定在generateRotatedForm。由于此方法重新定义了 ivar rotatedForm,因此我查找了所有更改它的方法,因为我怀疑问题出在某些未被 changed 无效的缓存中。很快,选择器 revealPenStrokes 从修改 rotatedForm.

的相当短的方法列表中获胜