2013-03-16 5 views
0

나는 이것을 영원히 궁금해했다. 같은 일이 어떻게 일어날 지 모르겠습니다.물건을 동기화하는 방법

별도의 스레드없이 자바로 동기화하는 방법을 알고 싶습니다. 예를 들어 실제 비디오 게임에서는 별도의 스레드를 사용하지 않고 동시에 상황을 파악할 수 있습니까?
게임에서 동시에 두 팔다리를 움직이는 방법은 무엇입니까?
어떻게 자바로 할 수 있습니까?

+0

지금까지 내가 당신이 할 수 없습니다 알다시피, 우리는 스레드를 왜 하나의 작업이 서로를 시작하기 전에 종료를 기다릴 필요가 있으므로 다른 물건, 순차적이기 때문에 즉, .. –

+0

나는 지금 당신의 forst 의견을 이해한다고 생각합니다. 그것은 의미가있다 –

+0

1) 화면에 사용되는 이미지와 다른 위치에 양팔을 그립니다. 2)'repaint()' –

답변

1

일반적으로 그렇지 않습니다. 비디오 게임에서 이러한 종류의 업데이트는 대개 한 번에 모두 수행 된 다음 한 번에 모두 단일 프레임에서 수행됩니다. 따라서 상태 업데이트 단계가 있고 렌더링 단계가 있습니다.

업데이트 단계에서 팔의 뼈와 같은 위치는 (키보드 나 마우스에서받은 입력에 따라) 움직일 것으로 예상되는 방식에 따라 업데이트 된 다음 전체 장면 새 위치로 다시 렌더링됩니다.

스레드가 없으면 모든 것이 정확히 동시에 (기술적으로) 발생하지 않습니다. 종종 프로그램은 무언가 (사용자 또는 네트워크 또는 100 밀리 초마다 꺼 지도록 설정 한 타이머)로부터의 입력을 기다리고 프로그램의 한 부분이이를 기다리고있는 동안 다른 부분은 운영.

이러한 종류의 상황은 일반적으로 이벤트로 인해 발생합니다. 접근 방법에 대한 안내는 Observer Pattern을 참조하십시오. 당신은 입력을 기다리는 무언가를 가지고있을 것이고 그 사건이 일어날 것을 "기다리는"어떤 수의 객체에 의해서도 "응답"되는 적절한 응답 이벤트를 발생시킬 것입니다.

이 이벤트에서 실행되는 코드를 작게 유지하려고하기 때문에 일반적으로이 이벤트는 동시에 발생하는 것처럼 보입니다. 이렇게 빨리 차이를 알 수 없습니다.

+0

매우 도움이되었습니다. 따라서 프로세서는 렌더링보다 훨씬 빠르므로 사용자는 아무 것도 알 수 없습니다. –

+0

@HarrisonBergeron 예. 글쎄요, 그것은 처리하려는 처리량에 달려 있습니다. 프로세서가 느려지거나 수행해야하는 경우에는 자주 그리지 않습니다. 그게 때때로 프레임 속도 드롭을 얻는 이유입니다 (다른 이유는 그래픽 카드가 처리하기에는 너무 많은 처리입니다. 보통 더 일반적이라고 생각합니다). – Jeff

+0

딱 맞는 말이 있습니다. :) –

0

표준 소프트웨어 아키텍처 : -

당신이 정말로하지만, 동시에 실행 일을하려면

, 당신은 단지 스레드를 사용 (D 그 재미를 많이 나 그래픽 카드 프로그래밍에 들어가) 할 필요 해요 게임 루프입니다. 그것은 다음과 같이 기본적으로 :

while the game is running 
    for each object in the game 
     check for interactions with other objects 
     update the objects position 
    draw the game state to a hidden surface 
    copy the hidden surface to the screen 
관련 문제