2013-06-19 5 views
1

여기에도 비슷한 질문이 있지만 적절한 세부 정보를 찾지 못했습니다. 도움이되는 것은 분명히 문제에 대한 설명이며, 나중에 검색하는 사람도 신청할 수있는 기본 예일 수 있습니다. (당신이 나를 위해 그것을 쓰는 것을 요구하지 않고, 나는 단지 도움이되는 예제를 찾는다.) 나는 포럼에 게시하는 것을 걱정하고있는 사람을 화나게하고 싶지 않다 ...AS3 : 배열에서 영화 클립 만들기 및 액세스

나는 스크린을 만드는 것에 대한 대안이 궁금하다. 배열에서 생성 된 타일 기반. 나는 화면에 놓여진 영화 클립에 직접 접근하려고 애쓰는 문제를 겪고 있으며, 그들을 참조 할 수있는 방법을 찾기 위해 추적하려고 노력하지 않고있다.

어쨌든 배열과 같은 기본적인 것을 취해 영화 클립에 연결 한 다음 한 번 영화 클립에 액세스하는 방법. 그래서 저는이 작업을 해왔고 다양한 온라인 리소스를 사용했기 때문에 많은 것을 익숙하게 보일 것입니다. 단지 훨씬 더 복잡합니다.

여기에 동영상 클립이 표시되도록 배열이 필요합니다. (적어도 여기서는 불필요한 부분이 하나 있는데, 내가 잘못 생각한 것 같습니다. 나중에 작동하지 않습니다.) 꽤 부피가 커요.

둘 다 동일한 주 클래스 파일에 있습니다.

function makeWorld (anyMap, tileW, tileH) {     
var worldWidth = anyMap[0].length; 
var worldHeight = anyMap.length; 
var MAP = this.addChild(new mapHolder()); 

    function tiler(MAP, i, j, tileW, tileH, tile) 
    { 
    MAP.addChild(tile); 
    tile.x = (j * tileW); 
    tile.y = (i * tileH);            
    }            

for (var i = 0; i < worldWidth; ++i) { 
    for (var j = 0; j < worldHeight; ++j) { 
     var curTile:int = anyMap[i][j]; 
     if (curTile == 101) { 
      var tile1 = new tileGround(); 
      tiler (MAP, i, j, tileW, tileH, tile1); 

... 

     else { 
      var tile3 = new empty(); 
      tiler (MAP, i, j, tileW, tileH, tile3); 
     } 
}}} 

그런 다음 문제가있는 부분을 참조하려고합니다. 나는 이것을 무엇이라고 부를지 모르겠다 .MAP.tileGround by, 나는 많은 것을 시도했다. 매우 고급스럽지 않을 때는 이름으로 언급하는 것이 좋지 않으므로 이런 종류의 일도 피하고 싶었습니다.

addEventListener (Event.ENTER_FRAME, hits); 
function hits (event:Event) { 
    var tileCatchG:MovieClip = this.MAP.tileGround; 

    if(tileCatchG.hitTestPoint(this.MAP.Char.x + leftBumpPoint.x, this.MAP.Char.y + leftBumpPoint.y, true)){ 
     leftBumping = true; 
    } else { 
     leftBumping = false; 
    } 

... 

} 

고마워요!

+0

새로운 SO 포스터에 대한 작업을 완료 했으므로이 위치를 편집하십시오. 어떤 파일에 코드의 각 비트가 들어 있는지를 포함 시키려면 [SomeFile.as]를 앞에 붙이면됩니다. 그래서 우리는 무엇이 무엇인지 (또는 이것이 하나의 메인 클래스 파일에있는 것만으로도 수용 가능한 응답이 될 수 있는지) 알 수 있습니다. 나는 더 많은 코드도 요구할 수있다. – shaunhusain

+0

예, 현재 모든 클래스가 있습니다. 나를 고쳐 줘서 고마워. – Kate

답변

1

두 번째 작업을 살펴볼 때지도를 나타내는 2 인덱스 배열에 대한 참조가 있어야합니다.

당신은 당신이 그 (것)들을 배열 그들 모두를 참조하는 다음

var tile1 = new tileGround(); 
tileArray.push(tile1); 

로 밀어 만드는 그런

public var tileArray:Array = []; 

같은 파일의 맨 위에 일반 (단일 인덱스) 배열을 만들 수 있습니다 간단한 루프 만 실행하면됩니다.

for each(var tile:MovieClip in tileArray) 
{ 
    //Do stuff 
    if(tile instanceof tileGround) 
    { 
     //Do stuff specific to tileGround 
    } 
} 
+0

답장을 보내 주셔서 대단히 감사합니다. 전에 푸시를보고 있었으므로 매우 도움이되었습니다. 제가 그 영화 클립 중 하나를 특별히 갖고 싶다면 어떻게해야할까요? tileGround 타입 이죠? 내가 시도 할 때 정적 변수를 참조하는 중 오류가 발생하거나 실행되지만 용어가 정의되지 않은 및 속성이 없습니다 알려줍니다. 미안하다. – Kate

+0

정적 변수 오류에 관해 언급하고있는 내용이 확실하지 않습니다. 타일 ​​바닥 유형과 관련하여 다른 타일 유형을 다른 배열 (아마도 좋은 아이디어)로 푸시하거나 루프에서 if 유형을 확인하여 해당 타일 유형을 확인할 수 있습니다. 게시하는 데 문제가있는 줄을 알 수있는 경우에만 사람들이 도움을 줄 수있는 http://www.adobe.com/devnet/flash/articles/flash_as3_debugging.html 디버깅을 읽어보십시오.디버깅을 배우면 오류가 발생한 행을 정확하게 찾아 낼 수 있습니다. 그러면 해당 행을 게시 할 수 있습니다. – shaunhusain

+0

오, 나는 그것이 말하려는 것이 영화 클립인지에 상관없이'var tileCatchG : MovieClip = x;'(어떤 x 이건간에) 오류가 있다는 것을 알고있다. 나는 아직도 그 이름을 잘못주고있다. 그것은 내가하기 위해 무엇을하려고하는지 알지 못합니다. – Kate