2014-04-23 1 views
2

최근 Java 원숭이 (3)의 멀티 스레딩을 최근에 wiki’s tutorial을 통해 시도해 보았습니다. 프로토 타입 임상 시험을 테스트하고 싶었 기 때문에 '큐브 (Cube)'라이브러리 (hub.jmonkeyengine.org/wiki/doku.php/jme3:contributions:cubes)를 사용하여 일부 큐브를 생성 한 프로그램을 만든 다음이를 직렬화합니다 일부 바이트 데이터 (서버가 플레이어 근처의 맵 청크에 대해 수행하는 작업)입니다. 위키의 네트워킹 자습서 (hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:networking)에서 언급했듯이 서버에서 보낸 청크를 모방하는 것이 목적입니다. 별도의 스레드에서 발생합니다.).멀티 스레딩 (jME3)을 사용하여 게임 상태 가져 오기

각 청크에는 노드를 저장할 노드가 있고 청크는 청크의 업데이트를 보낸 경우 청크가 교체되거나 플레이어가 새 영역으로 이동 한 경우 청크가 교체됩니다). 코드는 here입니다. 하지만 문제는 바이트에서 읽을 수 있기 전에 빈 청크를 다시 만들어야한다는 것입니다. 응용 프로그램 설정을 수집해야합니다. 이것뿐만 아니라, 나는 (함수가하는) 별도의 스레드 내에서 게임 장면을 수정할 수 없다. 아래의 코드는 93 행 이상입니다.

//... 
//(In Update Loop) 
if (future.isDone()) { 
    //Binds the temporary data to the clone object 
    blockTerrainClone = (BlockTerrainControl) future.get(); 
    future = null; 
//... 

Callable<BlockTerrainControl> serverInput = new Callable<BlockTerrainControl>() { 
    public BlockTerrainControl call() { 
     /*Creates a temporary data storage object, then assigns the data. 
     I can't mutate the current BlockTerrainControl which is being rendered, 
     as this is a seperate thread.*/ 
     BlockTerrainControl data = new BlockTerrainControl(CubesTestAssets.getSettings(app), new Vector3f()); 
     CubesSerializer.readFromBytes(data, serializedBlockTerrain); 

     //Returns the data 
     return data; 
    } 
}; 

(아래쪽) 멀티 스레딩 위키 문서의 일부 장면을 수정하고 게임 상태에 액세스 할 수 있지만 많은 세부 사항으로하는 방법을 포함 않습니다. 누구든지 해당 섹션을 확장하고 별도의 스레드 (또는이 경우에는 한 스레드에서 다른 스레드로 데이터 전송)에서 블록을 서버에서 클라이언트로 전송할 수있는 방법을 설명 할 수 있습니까?

질문에 아무것도 입력하지 않은 경우 추가해 드리겠습니다. 읽어 주셔서 감사합니다.

답변

0

언급했듯이 주 스레드 외부에서 장면 그래프를 조작 할 수 없습니다. 나는 같은 문제에 직면하고 내 솔루션은 스레드에서 노드를 생성하고 조작, 일을 연결하고

  • 이었다 개봉 준비, 준비

  • 에 스레드의 상태를 설정 등등
  • 는 한편 : 스레드가 준비되면, 스레드에서 노드를 얻고 장면 그래프

에 첨부 그렇다면 ... 돌이 체크