2014-09-16 2 views
0

세계가 섹터의 2 차원 그리드로 나뉘어 진 Haxe/OpenFL에서 대규모 멀티 플레이어 온라인 2D 게임을 개발 중이며, 따라서 각 섹터는 하나의 객체로 작동합니다. 서버에서이 부문의 객체 또는 (플레이어가 현재 그들인지 여부에 따라) 메모리에 존재하지 않을 수 있으며, 나는 좌표 자신의 XY를 통해이 분야의 개체에 액세스해야합니다. 이론적으로는 주어진 시간에 수천 개의 개체가있을 수 있습니다.Haxe - 런타임에 많은 양의 객체를 저장하는 가장 좋은 방법

제 질문은 은 () 가장 빠르고 효율적인 방법으로 이러한 개체를 저장하고 액세스하는 것입니다. xy의 2 차원 배열을 색인으로 사용하려고 시도했지만 구현이 매우 느립니다.

+0

x 및 y에 대한 상한선은 무엇입니까? 배열을 너무 길게 만들지 않으면 (x * (max-y) + y)를 좌표로 사용하여 2 차원 배열을 1 차원 배열로 풀 수 있습니다. – Brian

+0

현재 배열 크기의 한계가 2^32-1이라는 것을 알고있는 한 현재의 섹터 양은 2^36입니다. 그래서 아마 세계의 크기를 제한 할 것입니다. (어쨌든 약간의 과잉 크기가 있습니다.) 그리고 여러분의 솔루션을 시도하십시오. 고맙습니다. – wildfireheart

+0

좋지 않습니다. 나는 어딘가에 2^27 최대 배열 길이 (초기화되지 않은 배열)를 가지고 있었고 응용 프로그램은 성능에 큰 영향을 미친 1.51GB의 RAM을 사용했습니다. 나는 OS X 64 C++ 타겟을위한 Haxe/OpenFL 코드를 컴파일 중이다. – wildfireheart

답변

2

서버 측에서는 섹터를 저장하기 위해 해시 맵 데이터 구조를 사용할 수 있습니다. 키가 x_y가됩니다. 서버를 시작할 때 모든 섹터를 초기화 한 후 메모리를 확인하십시오. 비용이 두 배 많이 들면 일부 주요 섹터를 초기화 할 수 있습니다 처음에는 다른 섹터에 실제로 액세스했을 때만 초기화해야합니다.

+0

현재 사용되는 섹터 개체 만 초기화 될 때 HashMap에서 작업하는 것 같습니다. StringMap도 작동하지만,이 상황에서 사용자 정의 키를 사용하여 HashMap을 사용하는 것이 좋습니다. 고맙습니다. – wildfireheart

관련 문제