2013-11-24 3 views
0

그래서이 슈퍼 클래스 그리드 클래스와 GrassTile1, GrassTile2 등의 그리드 클래스 서브 클래스가 있습니다. 서브 클래스의 모든 인스턴스는 배열에 저장됩니다. 하위 클래스의 인스턴스를 배열을 참조하는 수퍼 클래스로 변환하는 방법은 무엇입니까?하위 클래스의 인스턴스를 수퍼 클래스로 캐스팅하는 방법은 무엇입니까?

private var backgroundGrid = []; //the array which the grids are stored in, in the main class. 



public class Grid extends MovieClip 
{ 

    protected var node :PathfindNode; //the variable I wish to access, from an instance of subclass. 

    public function Grid(){ 
     node = new PathfindNode(); 
    } 


} 



public class GrassTile1 extends Grid { //every subclass of Grid will extends Grid 


    public function GrassTile1() { 
     // constructor code 
    } 
} 

function getBackgroundGrid(i:int,j:int):Grid{ //in the main class 
     return Grid(backgroundGrid[i][j]); // this line gives me an error 
    } 

형식 오류 : 오류 # 1034 : 유형 강제 변환 실패 : 그리드에 2905d5f1 @ GrassTile1을 변환 할 수 없습니다.

backgroundGrid [i] [j] .node에 접근 해 보았습니다. 다른 생각으로는 생각하고 실패했습니다. 어떤 아이디어?

+0

간단한 .fla를 설정하고 내가 말한 내용에 기반하여 파일을 설정 했으므로 오류가 없습니다. – prototypical

+0

업데이트 된 답변보기 일어나는 일이 실제로 일어나기를 기대하기 위해 생성자에 흔적을 던지면 좋을 것입니다. 나는 슈퍼를 부를 필요가 없었고, 그것은 나를 위해 잘 작동합니다. – prototypical

답변

0

봅니다 :

return backgroundGrid[i][j] as Grid; 

개인적으로, Grid 사용하는 나쁜 클래스 이름처럼 보인다. 나는 Tile이보다 의미가 있다고 생각한다. 논리적으로 그리드를 이해할 때 GrassTile1은 그리드가 아니다. 그리드에는 타일 모음이 포함될 수 있으므로 타일의 클래스 이름으로 사용하려면 논리적으로 들리지 않습니다.

실제로 getBackgroundGrid 메소드를 호출하는 행은 어디에 있습니까? 그 방법과는 달리 거기에 캐스팅 해보십시오. 나는 그것이 문제를 해결할 것이라고 믿는다.

오류를 발생시키는 행을 확인할 수 없으므로 return 문이라고 가정합니다. 그러나 getBackgroundGrid를 호출하는 다른쪽에있을 수 있습니다.

업데이트 : 설명하는 내용을 사용하여 .fla를 시도했지만 정상적으로 작동하지만 오류가 발생하지 않습니다. 그래서 나는 우리가 여기서 뭔가를 놓치고 있다고 생각하고 있으며 아마도 그 수업의 정의가 사용되지 않을 수도 있습니다. 생성자에 추적을 넣어 실제로 예상되는 것을 확인할 수 있습니까?

+0

시도해 보았지만 문제가 해결되지 않았습니다. 그런데, 그리드 (backgroundGrid [i] [j])를 돌려 보내지 않고 backgroundGrid [i] [j]를 그리드로 반환하는 것은 아닌가? 도와 줘서 고마워. 나는 모든 하위 클래스가 생성자의 super()를 호출하고 하위 클래스와 수퍼 클래스를 같은 파일에 배치하여이 문제를 해결했습니다. –

+0

실제 코드가있는 배열에 무엇이 있는지 우리에게 알려주지 않고 여기에 우리에게 미리보기를 주므로 여기서 우리가 평가할 수없는 것들이 있다는 것을 두려워합니다. GrassTile1이라는 라이브러리에 인스턴스가 있습니까? 그렇다면 클래스를 자동 생성합니다. 클래스가 올바르게 구현되지 않으면 Grid가 예상대로 확장되지 않을 수 있습니다. – prototypical

+0

http://stackoverflow.com/questions/14268329/as3-cast-or-as - 저는 'as'를 사용하는 경향이 있으며, 차이가 나는지 궁금했습니다. 우리가 성취하려고 노력하는 측면에서 차이가 없어야합니다. – prototypical