2012-11-25 1 views
1

프로젝트 용으로 Flash에서 2D 플랫폼을 만들고 있습니다. 모든 것이 순조롭게 진행됩니다! 과제가 2 레벨을 사용한다고 알기 전까지는 항해가 쉬웠습니다. 레벨을 완료 한 유일한 방법은이 프로젝트가 배열을 사용하는 동안 클래스로 추가하는 것입니다.AS3에서 2D 플랫폼의 새로운 레벨을 생성하는 문제

URLLoader를 사용하여 .txt 파일의 레벨을 플롭하기 시작했지만, 다음 예제 코드에서는 2+가 아닌 한 레벨에서만이를 수행하는 방법을 보여줍니다. 이 충분하지 않은 경우

여기에 내가지도를 위해 사용하고 코드입니다, 좀 더를 제공 할 수 있습니다 :

public function init() 
    { 
     trace("init"); 

     map = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
       [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0], 
       [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0], 
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
       [0, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 0], 
       [0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0], 
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
       [0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0]] 

       container = new Sprite(); 
       addChild(container); 
       tileArray = [Tile0, Tile1, Tile2]; 
       buildMap(); 
       createPlayer(); 
       createWinSpace(); 
       ArrowKeyInput.init(stage); 
       addEventListener(Event.ENTER_FRAME, update); 
    } 
    private function buildMap():void 
    { 
     trace("BUILD"); 
     tileMap = []; 
     for (var i:int = 0; i < map.length; i++) 
     { 
      var row:Array = map[i]; 
      var tileRow:Array = []; 
      tileMap.push(tileRow); 
      for (var j:int = 0; j < row.length; j++) 
      { 
       var tileNum:int = row[j]; 
       var className:Class = tileArray[tileNum]; 
       var tile:MovieClip = new className(); 
       tile.width = tile.height = TILE_SIZE; 
       tile.x = TILE_SIZE * j; 
       tile.y = TILE_SIZE * i; 
       container.addChild(tile); 
       tileRow.push(tile); 
      } 
     } 
    } 

나는 이것에 얻을 수있는 피드백의 모든 종류를 주셔서 감사합니다.

+0

그래서 두 개 이상의 레벨을로드해야합니까? 다른 데이터로드/맵 다시 작성/모든 항목 다시 만들기/저장할 내용 (수준 번호, 변경된 통계, 점수) 저장. – alxx

+0

한 수준에서 다음 수준으로 형식에 차이가 없어야합니다. 각 레벨에 대한 맵 배열을 만들고 어느 레벨에 있는지, 점수에 대한 수정 기호 (있는 경우) 등을 추적하는 것도 가능합니다.하지만 레벨 변경을 허용하도록 설정해야합니다. 승리 조건은 모든 레벨에서 승리해야합니다. 레벨을 완료하는 간단한 점검은 마지막 레벨이 아닌지,로드 및 다음 레벨로 이동합니다. – Gone3d

답변

0

정확하게 이해한다면 buildMap 함수로 여러 맵을 작성할 수있는 방법을 궁금하게 생각할 것입니다.

이 문제에 대해 이해해야 할 중요한 점은 맵 배열은 buildMap 함수가 레벨을 작성하는 데 데이터로 사용하는 것입니다. 따라서 맵 배열에있는 것이 무엇이든간에 레벨의 각 위치에 대해 어떤 타일이 사용되는지 정의합니다. 여러 수준을하려는 경우, 당신은 각각 그것의 자신의 배열을 갖는 등 여러 맵을 정의 할 수 있습니다 :

map_1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0], 
      [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
      [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 0], 
      [0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0]]; 

    map_2 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0], 
      [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
      [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 0], 
      [0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0], 
      [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], 
      [0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0]]; 

사람들은지도의 정의는 당신은 당신이 원하는만큼 가질 수 있습니다. 방금 두 번째지도의 데이터를 복사했지만 그 정의에 새 레벨을 만들면됩니다. 이제

, 당신은 buildMap() 함수를 호출하기 전에, 단지 어느 수준 당신이 구축하고자하는 맵의 값을 설정 :

map = map_1; 
buildMap(); 

또는

이제
map = map_2; 
buildMap(); 

, 당신은 다른 일이 map_1로 시작한 다음 map_2를 작성하려는 경우 map_1을 작성하는 데 사용한 타일을 제거해야합니다.

코드에서 알 수 있듯이, 모두 컨테이너 스프라이트에 추가됩니다. 그래서 당신은 무엇을 할 수 있는지가() 함수 buildMap의 시작 부분에 이런 식으로 뭔가를 추가하여 모든 타일을 제거 할 수 있습니다 :

while (container.numChildren > 0) 
{ 
    container.removeChildAt(0); 
} 

새로운 수준을로드 할 때 다시 설정해야합니다 다른 변수가 대부분의 경우, 하지만 이것은 당신이 관리 할 수있는 한 가지 방법의 예일 뿐이었고, 당신이 작성한 코드를 보면 알 수있는 것만 큼은 아닙니다.