2011-08-02 2 views
1

Sprite를 확장하는 클래스를 만들려고하고 일부 개인 속성을 첨부하고 getters 및 setter를 사용하여 해당 속성을 읽고 쓸 수있게하려고합니다. 간단하지만 컴파일러가 "정적 유형 flash.display : Sprite로 참조를 통해 정의되지 않은 속성 속도에 액세스 할 수 있습니다."라는 오류가 발생합니다. MovieClip 객체를 확장하도록 클래스를 설정하면 작동합니다. 누군가 나에게이 논리를 설명 할 수 있습니까? Sprite로 getter와 setter를 사용할 수없는 이유는 무엇입니까? 스프라이트는 무비 클립 동적 아니기 때문에,Sprite에서 getter/setter 메서드를 사용할 때 오류가 발생합니다.

package { 

    import flash.display.Sprite; 

    public class Vehicle extends Sprite{ 

     private var _speed:uint = 3; 


     public function get speed():uint { 
      return _speed; 
     } 

     public function set speed(value:uint):void { 
      _speed = value; 
     } 


     public function Vehicle() { 
      super(); 
     } 

    } 

} 
+3

를 입력하는을 Sprite 유형 또는 Vehicle 유형의 차량 인스턴스? 전자의 경우, 소품을 가져 오거나 설정하기 전에 차량으로 캐스팅해야합니다. – Nolsto

+0

Sprite와 함께 get/set을 사용할 수 있지만 다른 곳에서는 문제가있을 것입니다. Vehicle을 인스턴스화하는 코드와 접근자를 사용하는 코드를 게시하십시오. – shanethehat

+0

나는 이렇게했다 : var vehicle : Sprite = new Vehicle(); addChild (차량); –

답변

2

당신과 같은 차량의 인스턴스를 선언해야합니다 여기

은 샘플 코드입니다.

그래서,이 일을, 작동하지 않습니다

var vehicle:Sprite = new Vehicle; 
vehicle.speed = 5; 

이 작동합니다 :

var vehicle:Vehicle= new Vehicle; 
vehicle.speed = 5; 

var vehicle:Sprite = new Vehicle; 
Vehicle(vehicle).speed = 5; //We cast the vehicle instance to Vehicle type. 

을 또한, 우리는 as 연산자를 사용하여 캐스트 할 수 있습니다 : 당신이

var vehicle:Sprite = new Vehicle; 
(vehicle as Vehicle).speed = 5; //We cast the vehicle instance to Vehicle type. 
+0

생성자 함수를 호출하는 것을 잊지 마십시오. new Vehicle(); –

+0

@ 마크 놀 : 저는 두 번째 경우와 혼동을 일으킬 수도 있습니다. 차량 인스턴스를 캐스팅했습니다. – goliatone

+1

@golia, Mark는 괄호를 사용하지 않기로 선택했을 수도 있습니다. . 매개 변수가 없을 때 매개 변수를 생략하면 * 작동 *하지만 Adobe의 권장 코드 표준을 화나게 만들고 혼동을 생략 할 수 있다는 사실을 모르는 사람들도 있습니다. –

관련 문제