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 のコードベースに統合してから、プロジェクトを所定のフックにプラグインするのが最善の方法です:)。

インスタンス変数を使用してクラスを拡張することに関して、Monticello が実際にそれを処理しているとは思いません。考えられる解決策は、metacello 構成にプリロード アクションを追加し、インスタンス変数を特定のクラスに追加することです。そうすれば、メソッドの前に inst var がインストールされます。

最後に、キーがまだ押されているかどうかを知る良い方法は、KeyDown イベントと KeyUp イベントをリッスンすることです。KeyUp イベントが発生すると、キーが解放されます。ただし、現在、keyDown および keyUp イベントは Pharo で適切に機能していません (すべてのプラットフォームで、キーを識別するキーコードは OS 固有の値を生成し、まだ適切に処理されていないキーがいくつかあります)。しかし、Pharo の次期バージョン 3.0 ではこれが改善されると確信しています。

もちろん、この点のいずれかを改善したい場合は、貢献できます:)。

于 2013-05-12T12:04:19.543 に答える