2017-12-01 5 views
0

저는 영어 원어민이 아니지만 가능한 한 명확하고 이해하기 쉽도록 최선을 다할 것입니다.ObjectContainer를 통해 객체의 메서드에 액세스 할 수없는 이유는 무엇입니까?

내 프로그래밍 클래스에서, 애니메이션 (cc) (플래시)을 사용하여 타일 기반 게임 (예 : zelda)을 만들어야합니다. 지도에서 음악의 리듬에 따라 바뀌는 타일로 댄스 플로어를 만들고 싶습니다. 이 타일은 두 개의 프레임, 하나의 흰색과 하나의 빨간색으로 무비 클립입니다.

private function createGrid(): void { 

     grid = new MovieClip(); 
     addChild(grid); 
     for (var r: int = 0; r < nbRow; r++) { 
      for (var c: int = 0; c < nbCol; c++) { 
       var t: Tiles = new Tiles(); 
       t.x = t.width * c; 
       t.y = t.height * r; 
       grid.addChild(t); 
      } 
     } 

     grid.x = 15; //center the grid on x 
     grid.y = 35; //center the grid on y 
} 

이것은 타일 클래스입니다 :

은 타일을 생성하는 방법이다

package { 
import flash.display.MovieClip; 
import flash.events.*; 

public class Tiles extends MovieClip { 
    private var rand:int; 

    public function Tiles() { 
     // constructor code 
     getTiles(); 
    } 
    public function getTiles():void { 
     random(); 
     setColor(); 
    } 
    private function random() : void{ 
     rand = Math.floor(Math.random()*100)+1; 
    } 

    private function setColor() : void{ 
     if(rand<=30){ 
      gotoAndStop(8); //red frame 
     }else{ 
      gotoAndStop(7); //white frame 
     } 
    } 
} 

}

createGrid()지도가 게재되는 즉시 타일을 배치 무비 클립에있는 모든 타일을 무대에 저장하고 격자. 지금, 나는 타일이 스트리밍 음악의 비트에 빨간색과 흰색 사이에 무작위로 변경 (그리고 30 % 빨간 타일의 비율이 70 % 흰색 타일 유지) 나는 내가 leftpeek 속성을 필요로 알고

var s: Sound = new Sound(); 
var sc: SoundChannel; 

s.load(new URLRequest("GameSong_mixdown.mp3")); 
sc = s.play(0, 1000); 

을 할 지금, 그 달성하지만 내의 SoundChannel, 나는이 기능을 트리거 버튼으로 내 테스트를 수행합니다

private function setTiles(e: Event): void { 
     // loop through all child element of a movieclip 
     for (var i: int = 0; i < grid.numChildren; i++) { 
      grid.getChildAt(i).getTiles();   
     } 
    } 

을 지금 문제는 다음과 같습니다 내 타일 방법을 액세서 드릴 수 없습니다. 그리드에서 getChildAt (i) 추적을 수행하고 콘솔의 모든 타일을 보았습니다. 그래서, 나는 모든 타일이 그리드에 저장된다는 것을 알고 있습니다. 하지만, 왜 그런지 모르겠다. grid.getChildAt (i) .getTiles(); 작동하지 않습니다 (및 타일의 모든 다른 방법). 오류 메시지 : 정적 유형이 flash.display 인 참조를 통해 가능한 u 정의 된 메서드 getTiles를 호출합니다. DisplayObject

누군가 내가 뭘 잘못하고 있는지 알고 있습니까?

PS : 나는 코드를 명확하게하는 프랑스어에서 영어에 내 모든 클래스 이름, VAR 이름 등을 번역했다.

답변

0

당신의 실수가 getChildAt (...)이 방법도 동적 의 반환 형식으로 DisplayObject을 가지고 있다는 것입니다() (당신이 임의의 속성에 액세스 할 수 없습니다)도 아니다 DisplayObject.getTiles이 방법.

private function setTiles(e:Event):void 
{ 
    // loop through all child element of a movieclip 
    for (var i: int = 0; i < grid.numChildren; i++) 
    { 
     // Cast display objects to Tiles class. 
     var aTiles:Tiles = grid.getChildAt(i) as Tiles; 

     // Call the method. 
     aTiles.getTiles();   
    } 
} 
+0

고마워 :

는 당신이 필요로하는이 객체가 타일의 사실 클래스 프로그램을 알리는 것입니다! 이제 효과가있다. –

관련 문제