我正在研究Phratch(Smalltalk中的Scratch 2.0)并修改了InputEventSensor>> processEvent方法来存储最后按下的键,其方式与修饰键的存储方式类似,以便它们{{1阻止工作。
所以我现在有一个自定义的InputEventSensor类:
if <key> pressed
keyPressed
processEvent
和keyPressed
新方法属于clearKeystate
类别,这很好,所以这些方法会保存到Phratch Monticello软件包中。但是*Phratch
呢,应该转移到processEvent
类别?那么实例变量呢?
答案 0 :(得分:4)
有几件事情发生了:)。
首先,将现有方法移动到项目包中就是我们所说的覆盖。也就是说,当您将包加载到图像中时,现有的方法定义将被您的定义覆盖。我不建议只在非常必要时才进行覆盖。实际上,最好的方法应该是创建钩子,将它们集成到Pharo的代码库中,然后在给定的钩子中插入你的项目:)。
在使用实例变量扩展类时,我认为Monticello并不真正处理它。可能的解决方案是在metacello配置中添加预加载操作,将实例变量添加到给定的类。这样,inst var就安装在方法之前。
第三个也是最后一个,知道某个键是否仍被按下的实际好方法是收听KeyDown和KeyUp事件。给出KeyUp事件时释放密钥。但是,keyDown和keyUp事件现在还没有在Pharo上正常工作(在所有平台中,用于标识密钥的密钥代码会产生特定于操作系统的值,并且有些密钥尚未得到很好的处理)。但是,我相信在即将推出的Pharo 3.0版本中会有所改善。
当然,如果你想更好地提出这些要点,你可以做出贡献:)。