2014-05-24 3 views
0

타일 맵이 2D 배열로 유지되는 2D 등각 투상 게임을 만들고 있습니다. javascript - 2D 배열 초기화 속도

enter image description here

게임 루프는 크기와 맵 배열의 내용을 시작하기 전에

초기화되어야하고 나는이 중 하나입니다 것으로 나타났습니다 : 여기에 16 * 16 맵이 너무 당신이 아이디어를 얻을 생겼는지 프로그램을로드 할 때 가장 큰 병목 현상. 지도가 5000 * 5000이면 상대적으로 고급 컴퓨터에서 약 7 초가 걸릴 수 있습니다 (그림은 꽤 느림).

자바 스크립트의 속도에 더 문제가 있습니까? 아니면 코드가 격렬하게 비효율적으로 수행하고 있습니까?

타일 내용을 가지고 배열과 같이 초기화 :

// Create Array to represent tile contents 
mapArray = new Array(mapWidth); 
for (var i = 0; i < mapWidth; i++) { 
    mapArray[i] = new Array(mapHeight); 
    for (var j = 0; j < mapHeight; j++) { 
     mapArray[i][j] = new Tile("water", 0, false); 
    } 
} 

그 배열 보류 아래의 타일 클래스 객체 :

// Tile class 
function Tile(type, height, mouseOver) { 
    // Add object properties like this 
    this.type = type; 
    this.height = height; 
    this.mouseOver = mouseOver; 
} 
+2

메모리에 5000 * 5000 = 25,000,000 개의 타일 오브젝트를로드하는 경우를 고려하십시오. 그게 많아! 현재 플레이어의 위치에서 로컬 인 객체를 초기화하는 것이 더 합리적 일 수 있습니다. 한 번에 가장 가까운 144x144 영역 만로드되는 MineCraft를 생각해보십시오. – mellamokb

+0

흠, 그건 생각을위한 음식입니다. 고맙습니다. 나는 게임 엔진으로하고 싶은 일이 궁극적으로 위에서 설명한 방법이 최선인지를 결정할 것이라고 생각합니다. 예를 들어, 미니 맵 개요 소프트를 구현하고 싶다면 전체 맵이 이미 초기화되어 있어야 볼 수 있습니다. – Suipaste

답변

1

하는 개별 이벤트를 등록하는 경우는 확실히 각 프로그램을 느리게 할 수있는 각 타일의 청취자. 컨테이너의 mouseover/mousemove 이벤트를 수신 한 다음 마우스의 (x, y) 좌표에서 타일을 파생하여 리스너 수를 줄이는 것을 고려하십시오.

+0

고마워, 변수 위에 마우스를 사용하지 않은 나는 이미 당신이 제안하는 방법을하고 있지만 그것은 또한 그것이 필요 이상으로 25,000,000 번 선언되고있는 변수라는 것을 의미한다고 생각한다! 나는 그것을 제거 할 것이다 ... – Suipaste