2013-05-11 4 views
1

Phratch (스몰 토크의 Scratch 2.0)에서 수정 자 키 저장 방법과 비슷한 방식으로 마지막으로 누른 키를 저장하도록 InputEventSensor >> processEvent 메소드를 수정했습니다. 그래서 그들은 if <key> pressed 블록 작업을합니다.기존 커널 메소드의 수정 사항을 Monticello에 저장

  • 새로운 인스턴스 변수 keyPressed
  • 수정 방법 processEvent
  • 새로운 방법 keyPressed

새로운 방법 clearKeystate이 분류에 속하는 :

그래서 지금은 사용자 정의 InputEventSensor 클래스가 *Phratch은 괜찮므로 Phratch Monticello 패키지에 저장됩니다. 하지만 processEvent*Phratch 카테고리로 이동해야하나요? 인스턴스 변수는 어떻습니까?

+0

BTW, InputEventSensor 클래스를 변경하지 않으려 고 많은 시간을 보냈지만 이벤트 처리가 제대로 작동하지 못했습니다. 나는 원래의 Scratch + Squeak 소스 코드를 보았고이 라인들을 따라 뭔가를 한 것을 볼 수 있었기 때문에 나는 그들의 접근법을 복사했다. –

답변

4

여러 가지가 있습니다. :).

먼저 기존 방법을 프로젝트의 패키지로 옮기는 방법을 재정의 (override)라고합니다. 즉, 이미지에 패키지를로드하면 기존 메서드 정의가 정의에 의해 무시됩니다. 나는 극도로 필요한 경우에만 재정의를 할 수있는 충고를하지 않았다. 실제로 가장 좋은 방법은 후크를 만들고 Pharo의 코드베이스에 통합 한 다음 주어진 훅에서 프로젝트를 연결하는 것입니다. :)

인스턴스 변수가있는 클래스를 확장 할 때, 저는 Monticello가 실제로 이것을 처리한다고 생각하지 않습니다. 가능한 해결책은 metacello 구성에 사전로드 작업을 추가하고 인스턴스 변수를 지정된 클래스에 추가하는 것입니다. 이렇게하면 inst var가 메소드 앞에 설치됩니다.

키를 누른 상태인지 알기위한 가장 좋은 방법은 KeyDown 및 KeyUp 이벤트를 수신하는 것입니다. KeyUp 이벤트가 제공되면 키가 해제됩니다. 그러나 keyDown 및 keyUp 이벤트는 현재 Pharo에서 제대로 작동하지 않습니다 (모든 플랫폼에서 키를 식별하는 키 코드는 OS 특정 값을 산출하며 아직 잘 처리되지 않은 키가 있습니다). 그러나 앞으로 출시 될 Pharo 3.0 버전이 더 좋아질 것이라고 확신합니다.

물론이 점을 더 좋게 만들고 싶다면 기여할 수 있습니다. :).

+0

조언에 대해 guillepolito에게 감사드립니다. 저는 아직도 스몰 토크를 배우고 있으며 일을 제대로 수행하는 방법에 대해 듣는 것에 감사드립니다. 그래서 나는 Phratch에서 이것을하는 더 좋은 방법을 조사 할 것입니다. –