1

我正在研究 Phratch(Smalltalk 中的 Scratch 2.0)并修改了 InputEventSensor>>processEvent 方法以存储最后按下的键,其方式与存储修饰键的方式类似,以便它们if <key> pressed阻止工作。

所以我现在有一个自定义的 InputEventSensor 类:

  • 新的实例变量keyPressed
  • 修改方法processEvent
  • 新方法keyPressedclearKeystate

新方法属于一个*Phratch很好的类别,因此它们被保存到 Phratch Monticello 包中。但是processEvent,应该将其移至*Phratch类别吗?实例变量呢?

4

1 回答 1

4

有几件事正在发生:)。

首先,将现有方法移动到项目的包中就是我们所说的覆盖。也就是说,当您将包加载到图像中时,现有方法定义将被您的定义覆盖。我不建议仅在极其必要时进行覆盖。实际上,最好的方法应该是创建钩子,将它们集成到 Pharo 的代码库中,然后将您的项目插入给定的钩子中:)。

在使用实例变量扩展类时,我认为蒙蒂塞洛并没有真正处理这个问题。一种可能的解决方案是在 metacello 配置中添加预加载操作,将实例变量添加到给定的类。这样, inst var 在方法之前安装。

第三也是最后一点,了解某个键是否仍被按下的实际好方法是监听 KeyDown 和 KeyUp 事件。给出 KeyUp 事件时释放一个键。但是,keyDown 和 keyUp 事件现在在 Pharo 上不能正常工作(在所有平台上,识别键的键码会产生操作系统特定的值,并且有些键还没有得到很好的处理)。但是,我相信这在即将到来的 3.0 版本的 Pharo 中会变得更好。

当然,如果你想让这几点变得更好,你可以做出贡献:)。

于 2013-05-12T12:04:19.543 回答