【问题标题】:What is the difference between a Morph in Morphic and a NSView in Cocoa?Morphic 中的 Morph 和 Cocoa 中的 NSView 有什么区别?
【发布时间】:2010-11-01 15:44:44
【问题描述】:

我想知道 Morphic 的特别之处。

【问题讨论】:

    标签: objective-c cocoa smalltalk pharo morphic


    【解决方案1】:

    Morphic 远不止 NSView 或任何其他 graphics 类,它们仅允许重新实现一组有限的功能。 Morphic 是一个极具延展性的 UI 构建工具包。 Morphic 背后的一些设计理念清楚地表明了这一意图:

    • 包含一个全面的二维坐标系层次结构。它们不限于笛卡尔或线性。有用的非线性坐标系包括极坐标、对数、双曲线和地理(类似地图)投影。
    • 将坐标系的处理与变形本身分开。变形应该只需要选择它的首选坐标系,而不是需要将它绘制的每个点都转换为自己的世界坐标。它的#drawOn: 方法及其子变形的位置在它自己的坐标系中表示。
    • 显示属性(如大小或分辨率)完全独立。没有像素的概念。 GUI 被认为具有更高的层次。所有的 GUI 都独立于像素分辨率。所有的渲染都是抗锯齿的。
    • 分离坐标系可以简化变形的移动、缩放和旋转。
    • 所有坐标都是浮点数。这有利于允许完全任意的比例,而不会出现明显的舍入误差。
    • Morph 层次结构不是形状的层次结构。变形没有边框或颜色的概念。没有子变形对齐的一般概念。一个特定的变形可以以任何对自己有意义的方式实现这些。
    • Morphic 事件处理非常灵活,允许您将事件发送到任意对象。该对象不需要子类 Morph。

    【讨论】:

      【解决方案2】:

      警告:Smalltalk 的实时动态环境是red pill。静态、冻结的语言对你来说永远不会一样 ;-)

      简而言之:Morphic 是一个虚拟世界,您可以在其中直接探索活动对象(就像现实世界一样)。你有没有看过 UI 和...

      • 想知道“哇,这真的很酷!他们是怎么做到的?”
      • kvetch “我希望他们改用 X!”

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

      如果你想大吃一惊,那就成为 Morphic 世界中的神:

      1. 启动一个Pharo图像,然后点击背景(实际上是“世界”)以调出世界菜单:

      2. 在菜单选项之一上调出“光环”(在我的 Mac 上按住 shift-alt-click):

      3. 将“拾取”光环(中上)拖放到世界某处:

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

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

      曾经有一个您总是使用的选项让供应商深埋了三层菜单?这个有用吗?!这是对 Morphic 等实时直接 GUI 环境强大功能的一瞥​​。

      如果您对此感兴趣,请阅读 John Maloney 和 Randall Smith 的论文Directness and Liveness in the Morphic User Interface Construction Environment

      【讨论】:

      • 感谢您的回答和链接。网上关于 Morphic 的内容并不多。我发现的那一点只是滔滔不绝地说明它是多么的棒,没有参考支持它(维基百科不少于)。
      • 尝试谷歌搜索“morphic self”。 Self 语言是 Morphic 被发明的地方(Squeak/Pharo/LievelyKernel 的 Morphic 是端口)。当我研究原作者的作品时,我才真正理解了这些原则(如果我现在明白了哈哈)。
      • Morphic 非常适合实时编码。这是一个映射,当代码改变时屏幕上的输出改变,如果屏幕上的变形改变了代码中的值。
      【解决方案3】:

      标题没有反映你的问题,所以我回答你的问题而不是标题。
      我在过去两天阅读了有关 Morphic 的文章,并以我认为 morphic 的特别之处作为总结。

      Morphic 非常适合 live coding。这是一个直接映射,这样当代码改变时,屏幕上的输出就会改变。和/或如果屏幕上的变形被改变(拖动),代码中的值也会改变。这在艺术表演中很酷!

      但 Morphic 的目标是更高的抽象。变形的属性从代码中抽象出来。对文件执行SoC 或对服务器端数据库执行fetch

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

      research 的目标甚至已经抽象了代码。可以通过 Morph 进行编码,以定义单击或拖动会发生什么。变形可以是拼图,如Scratch

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

      当应用启动 Javascript 文件(或首先是 Web Storage)时,将设置变形世界。用户与那个世界交互。新状态可以存储在 WebStorage 中并通过下载获得。

      您可以使用Lively Kernel 作为文件中的语言,或者将变形数据存储在一个对象或任何您认为最容易生成的文件中下载。

      那么这有什么特别之处呢?我不会重复接受的答案,但这是我的结论:

      • 您在 Morphic 屏幕上看到的一切都是 morph
      • 变形树被称为世界
      • 每个变形的坐标、维度和属性都从代码中抽象到树中。
      • 该研究旨在抽象出代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 1970-01-01
        • 2011-01-18
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多