2011-03-01 4 views
1

내가 달성하고자하는 것은 Windows에서 확인을 요청하는 메시지 상자가하는 것과 비슷합니다. 메시지 상자가 표시되면 사용자가 "예"또는 "아니요"를 클릭 할 때까지 코드 상자가 차단됩니다. 같은 작업을하고 싶지만 메시지 상자는 충분히 유연하지 않습니다.계속 진행할 때까지 코드 실행을 일시 중지 하시겠습니까? 스레드를 사용하지 않고도 가능합니까?

저는 간단한 게임을 개발하고 있으므로 언어 ​​별 솔루션 (하나의 프로그래밍 언어에서만 작동하는 솔루션)을 피하려고합니다. 이 방법을 사용하면 iphone, windows, mac ... 등의 다양한 플랫폼으로 게임을 이식 할 수 있습니다. 코드 디자인을 많이 변경하지 않고도 가능합니다.

내가 배열이 의사 코드 예제를주고 가정하기 :
{
... 코드가 표시하는 메시지에 대한

을 (; 난 < 5 전 ++ 전 = 0 INT) - 상자와 유사한 UI 구성 요소. ==> 코드는 사용자가 UI 구성 요소에서 "예"또는 "아니오"를 선택할 때까지 기다려야합니다.
가}

나는 다음과 같은 솔루션을 시도 :

부울 userClickedYesOrNo = 거짓; {
...
코드 메시지 박스 모양 UI 구성 요소를 표시하기위한
는 (; I < 5 내가 ++ I = 0 INT).
==> 코드 실행이
동안 (userClickedYesOrNo ==는 false) {사용자가 UI에서 예/아니오를 클릭 할 때
// 다음 userClickedYesOrNo가된다 진정한
}
}

차단되지

불행하게도 Windows에서 while 루프를 사용하면 UI가 멈추고 사용자는 상호 작용할 기회를 얻지 못합니다.

답변

1

스레드를 사용하지 않지만 대화 형 방식으로 동작하려는 대부분의 코드는 이벤트를 기반으로합니다.

예를 들어, Java SWT 응용 프로그램의 표준 'display loop'은 모든 그래픽 구성 요소를 설정 한 다음 무한 루프로 들어갑니다. 마찬가지로 웹 페이지의 JavaScript에는 스레드가 하나뿐이므로 진행중인 백그라운드 처리와 함께 상호 작용을 처리하기 위해 timer events 등의 핸들러를 등록해야합니다.

코드는 주 루프 내부에서 보류중인 작업이 있는지 확인하고, 보류중인 작업이 있으면 해당 작업이 실행됩니다.

게임에서 0.5 초마다 게임 상태를 업데이트하고 타이머에 의해 트리거되는 '업데이트'작업을 통해 게임을 할 수 있습니다. 대화 상자가 나타나면 '일시 중지'라는 플래그를 설정하여 작업을 수행하는 대신 업데이트 이벤트가 반환되도록 할 수 있습니다. 이렇게하면 디스플레이 루프에서 GUI 이벤트를 계속 처리 할 수 ​​있으며 단추를 클릭하면 일시 중지 플래그를 제거하여 게임을 계속할 수 있습니다.

관련 문제