2012-12-28 5 views
0

다음은 길거리에서 시민을 생성하는 클래스입니다. 그들은 좌우로 걷고 어떤 방향으로 향할 것인지, 어떤 속도로 움직이는 지, 그리고 그들의 y 위치에 배정됩니다. 이전에 생성자에서 setUpCitizens() 함수를 사용했지만 수준과 수신기를 제거하는 데 문제가있어 ADDED_TO_STAGE 및 REMOVED_FROM_STAGE를 사용하고 싶습니다. I 클래스는 다음과 같이
errorsAS3에서 생성자 매개 변수를 클래스로 변수로 전달

호출 :

package 
{ 
import flash.display.*; 
import flash.events.*; 
import flash.utils.getTimer; 
import flash.utils.Timer; 

public class Citizen extends MovieClip 
{ 
    private var dx:Number;// speed and direction 
    private var lastTime:int;// animation time 

    public function Citizen(side:String, _speed:Number, yPos:Number) 
    { 
     var side = side; 
     var speed = _speed; 
     var yPos = yPos; 

     addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 

    private function onAddedToStage(event:Event):void 
    { 
     setUpCitizens(); 
     addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage); 
    } 

    private function onRemovedFromStage(event:Event):void 
    { 
     removeAllCitizens(); 
     this.removeEventListener(Event.ENTER_FRAME,moveCitizen); 
    } 

    private function setUpCitizens():void 
    { 
     if (side == "left") 
     { 
      this.x = -40;// start to the left 
      dx = _speed;// walk left to right 
      this.scaleX = 1;// reverse 
     } 
     else if (side == "right") 
     { 
      this.x = 5720;// start to the right 
      dx = - _speed;// walk right to left 
      this.scaleX = -1; 
     }// not reverse 

     this.y = yPos;// vertical position 
     this.gotoAndStop(Math.floor(Math.random()*9+1)); 
     // set up animation; 
     this.addEventListener(Event.ENTER_FRAME,moveCitizen); 
     lastTime = getTimer(); 
    } 

    private function removeAllCitizens():void 
    { 
     removeEventListener(Event.ENTER_FRAME,moveCitizen); 
     parent.removeChild(this); 
    } 

이 오류를 얻고있다

var c:Citizen = new Citizen(side,speed,yPos); 

이는 부모 클래스 객체 레벨 1에서 호출됩니다. 나는 또한 생성 된 모든 아이들을 참조하고 게임을 빠르게하기 위해 모두 제거하는 데 어려움을 겪고 있습니다 ...

어떤 제안을 주셔서 감사합니다?

답변

2

메서드 내에서 변수를 만들면 해당 메서드 안에 만 존재합니다. Citizen 생성자는 var 속도, var 크기 및 var yPos를 만듭니다. 그러나 해당 메서드가 끝나면 해당 변수는 손실됩니다. 클래스 속성 (예 : dx 및 lastTime)에 저장해야합니다. (citizenSpeed을 클래스 속성 수, 다음 시민 생성자에서, 즉, 그 변수에

public class Citizen extends MovieClip 
{ 
    private var dx:Number;// speed and direction 
    private var lastTime:int;// animation time 
    //added lines 
    private var citizenSpeed:Number; 
    private var citizenSide:String; 
    private var citizenYPos:Number; 

    public function Citizen(_side:String, _speed:Number, _yPos:Number) 
    { 
     citizenSide = _side; 
     citizenSpeed = _speed; 
     citizenYPos = _yPos; 

     addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 

... 

를 전달 된 매개 변수를 지정한 다음, setUpCitizens()에서, 단지 그 멤버 변수를 참조 : citizenSpeed ​​같은 추가 기타.).

setUpCitizens()는 해당 지점에서 범위를 벗어난 변수를 참조하는 코드가 포함되어 있기 때문에 발생하는 오류입니다.

희망 하시겠습니까?

b