AS3 мимолетные параметры конструктора как переменные в классе

Ниже класс, чтобы произвести граждан на улице. Они идут и левые и правые и назначены то, с какой стороной они будут сталкиваться, какую скорость они перемещают и их y положение. Я ранее использовал функцию setUpCitizens() в конструкторе, но я хотел использовать ADDED_TO_STAGE и REMOVED_FROM_STAGE, потому что я испытываю затруднения при удалении уровня и слушателей.

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);
    }

I am getting this error:
errors

Я называю класс как это:

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

Это называют от Level1 объекта родительского класса. Я также испытываю затруднения при попытке сослаться на всех произведенных детей и удалить их всех, чтобы, надо надеяться, ускорить игру...

Спасибо за какие-либо предложения?

0
добавлено
Просмотры: 1
de

1 ответы

Когда вы создаете переменные в методе, они только существуют в том методе. Ваш конструктор Гражданина создает скорость вара, размер вара и вар yPos, но как только тот метод заканчивается, те переменные потеряны. Необходимо сохранить их в свойствах класса (как дуплекс и lastTime). Добавьте что-то как citizenSpeed:Number к свойствам класса, и затем в вашем конструкторе Гражданина, назначьте переданный параметр на ту переменную, т.е.

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.

2
добавлено