Morphic中的Morph和Cocoa中的NSView有什么区别?

9

我想了解使Morphic特殊的事情。

3个回答

7

Morphic不仅仅是NSView或其他仅允许重新实现有限功能的图形类。Morphic是一个非常具有可塑性的UI构建工具箱。Morphic背后的一些设计思想使这个意图很明显:

  • 包括全面的2D坐标系层次结构。它们不受笛卡尔或线性的限制。有用的非线性坐标系统包括极坐标、对数坐标、双曲线和地理(地图样式)投影。
  • 将坐标系的处理与morph本身分离。一个morph只需要选择其首选坐标系,而不需要自己将它绘制的每个点转换为世界坐标。它的#drawOn:方法和其子morph的位置是以其自己的坐标系表示的。
  • 完全独立于显示属性,如大小或分辨率。没有像素的概念。GUI在更高的层次上进行思考。所有GUI都与像素分辨率无关。所有渲染都是抗锯齿的。
  • 分离坐标系有助于移动、缩放和旋转morphs。
  • 所有坐标都是浮点数。这可以允许完全任意的比例,而不会出现显著的舍入误差。
  • Morph层次结构不是形状的层次结构。Morphs没有边框或颜色的概念。没有通用的子morph对齐概念。一个特定的morph可以以任何对它自己有意义的方式实现这些内容。
  • Morphic事件处理是灵活的,允许您将事件发送给任意对象。该对象不需要是Morph的子类。

6

警告:Smalltalk的动态环境是一颗red pill。静态、冰封的语言将永远不会再给你带来相同的体验;-)

简而言之:Morphic是一个虚拟世界,在这里你可以直接探索活动对象(就像现实世界一样)。你是否曾看过一个用户界面并...

  • 想着“哇,真酷!他们是如何做到的?”
  • 发牢骚说“我希望他们改为做X!”

在任何其他环境中,这些想法都会导致痛苦和沮丧,但在Morphic中不是这样。

如果您想要激起灵感,在Morphic世界成为一个神:

  1. 启动Pharo镜像,然后单击背景(实际上是“世界”),以打开世界菜单:

    alt text

  2. 在其中一个菜单选项上带出“halos”(在我的Mac上为shift-alt-click): alt text

  3. 拖动“Pick Up”halo(顶部中间),并将其放置在世界的某个位置: alt text

  4. 享受您的菜单项目,现在它可以在任何您想要的地方使用: alt text

说真的,点击它并观看浏览器的打开!

是否曾经有过一个选项,您总是使用,但供应商却将其埋藏在三级菜单深处?这可能有用吗?这是直接GUI环境(如Morphic)的强大力量的一瞥。

如果您感到好奇,请阅读约翰·马洛尼和兰德尔·史密斯的论文《Morphic用户界面构建环境中的直接性和活力》


感谢您的回答和链接。关于Morphic,网上并没有太多的信息。我所找到的只是一些热情洋溢的评价,但却没有任何支持它的参考资料(甚至是维基百科)。 - Stephen
1
尝试在谷歌上搜索“形态自身”。Self语言是Morphic的发明地(Squeak/Pharo/LivelyKernel's Morphic是其端口)。我只有在学习原始作者的作品时才真正理解了这些原则(如果我现在能够理解的话哈哈)。 - Sean DeNigris
Morphic非常适合实时编码。这是一种映射,使得当代码改变时屏幕上的输出也会改变,如果屏幕上的形态发生改变,则代码中的值也会改变。 - user985399

0

标题与您的问题不符,所以我回答您的问题而不是标题。
我最近两天阅读了有关Morphic的资料,并得出了我认为使Morphic特殊的东西。

Morphic非常适合实时编码。这是一种直接映射,当代码更改时,屏幕上的输出也会更改。如果在屏幕上更改(拖动)morphs,则代码中的值也会更改。这在艺术表演中很酷!

但是,Morphic的目标是比这更高的抽象层次。morphs的属性从代码中抽象出来。将其SoC到文件或获取服务器端数据库。

我想WebStorage和JavaScript文件是存储交互式更改的Morph属性的活力状态的好选择。您看 - 编程是通过每个Morph完成的。然后,代码只需要处理来自单击和拖动的事件。

研究的目标甚至将代码抽象化了。编码可以通过Morph来定义点击或拖动时发生的事情。Morphs可以像Scratch中的拼图一样组合起来。

程序必须备份到某个文件中。我不认为在云上进行编码是安全的。因此,JS文件是唯一的选择(如果不设置服务器的话),因为数据文件不允许本地使用,甚至不能与Web应用程序位于同一文件夹中。同源策略意味着相同的服务器-而不是相同的文件夹。

当应用程序启动JavaScript文件(或Web Storage)时,它将设置Morphs的世界。用户与该世界交互。新状态可以存储在WebStorage中,并通过下载进行备份。

您可以使用Lively Kernel作为文件中的语言,或将形态数据存储在对象中,或者您发现最简单的方式是生成要下载的文件。
那么这有什么特别之处吗?我不会重复接受的答案,但这是我的结论:
  • 您在 Morphic 屏幕上看到的所有内容都是 morph
  • Morphs 的树被称为 world
  • 每个morph的坐标、尺寸和属性都从代码中抽象出来并存储在树中。
  • 研究目的是将代码过度抽象化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接