2017-05-11 12 views
5

많은 언어에서 당신은 다음과 같은 일을 할 수 있습니다.이죠 스몰 토크 : 게임 루프

스퀵 스몰 스몰 토크에서 어떻게합니까?

wiki.squeak.org에 설명 된대로 키보드 입력을 읽고 이에 응답 할 수 있습니다. 내가

1 to: 10 do: [ :i | game updateAndDraw ] 

같은 것을 실행하려고한다면 모든 이벤트는 오직 루프가 실행 된 후 을 처리됩니다.

+0

Morphic에서 구현 된 게임의 예를 확인할 수 있습니다. 물론 그 중 몇 개를 찾을 수 있습니다. 일반적인 단순한 방법은 키보드 이벤트 (모델을 변경)를 처리하고 #updateAndDraw가 해당 하위 모프를 모델의 현재 상태 (위치의 위치)에 따라 다시 그려주는 단일 Morph를 게임에 적용하는 것입니다. 배우, 가시적 인 상태 표시 등) –

+0

게임을 입력하지 않고도 계속 업데이트해야합니다. 당신은 당신의 접근 방식에서 그것을 어떻게 할 것입니까? – Higemaru

답변

5

Morphic은 이미 메인 루프를 제공합니다.

uiProcess := [ 
    [ world doOneCycle. Processor yield ] repeat. 
] newProcess ... 

을 그리고 당신은 doOneCycle 파고 경우는

  • (선택적으로) 지연이 화면 (interCyclePause:)
  • 검사
  • 프로세스 이벤트
  • 의 크기를 조절 않는 것을 발견 할 것이다 : 그것은 MorphicProject class>>spawnNewProcess에 있어요
  • 프로세스 step 메서드
  • re-displa ys the world

마우스/키보드 이벤트 처리기를 추가하고 애니메이션의 단계 방법을 추가하고 다시 표시 할 방법을 그리는 코드는이 단계에 연결되어야합니다. 이 모든 것은 당신의 게임 모프 (morph)에있는 메소드이어야합니다. 시스템 전체에서 예제를 찾을 수 있습니다.

+0

유망 해 보입니다. 감사합니다! – Higemaru

+0

하나의 예를 들어 주시겠습니까? 그것은 무엇이 어디서 그리고 어떤 클래스가 하위 클래스로 갈 것인지 명확하지 않습니다. – Higemaru

0

동작을 통해 고정 된 횟수만큼 수행 할 수

10 timesRepeat: [game updateAndDraw] 

while 의미론 사용하려면, 반면 시맨틱을 이용한 영구 루프를 생성하기

i := 5 
[i > 0] whileTrue: [ 
    i printNl. 
    i := i - 1. 
] 

[true] whileTrue: [something do] 
+0

이 질문은 내 질문에 전혀 영향을 미치지 않습니까? – Higemaru

+0

죄송 합니다만, 귀하의 문제를 정확하게 이해하지 못했을 수 있습니다. –

0

너을 사용하여 Morphic 이벤트 루프를 이용할 수 있어야합니다..