Область действия для ActionScript 2.0 Event - PullRequest
0 голосов
/ 30 января 2012

Я использую Actionscript 2.0 для мобильного телефона и не могу разобраться в событиях.

Я создаю объект класса со всем моим кодом и использую группу функций (все как прямые дочерние элементы 1-го уровня класса). Есть одна функция, которая создает мувиклип с квадратом и устанавливает событие onPress в другую функцию с именем hit:

public function draw1Sqr(sName:String,pTL:Object,sSide:Number,rgb:Number){
    // create a movie clip for the Sqr
        var Sqr:MovieClip=this.canvas_mc.createEmptyMovieClip(sName,this.canvas_mc.getNextHighestDepth());
    // draw square
        Sqr.beginFill(rgb); 
        //etc  ...more lines        

    //setup properties (these are accessible in the event)
        Sqr.sSide=sSide;
        Sqr.sName=sName; 

    //setup event
        Sqr.onPress = hit; // this syntax seems to lead to 'this' within
                            // the handler function to be Sqr (movieclip)

        //Sqr.onPress = Delegate.create(this, hit); 
        //I've read a lot about Delegate but it seems to make things harder for me.
    }



Тогда в моем обработчике событий я просто не могу правильно настроить область видимости ...

public function hit(){
    for (var x in this){
        trace(x + " == " + this[x]);
    }
            //output results
                //onPress == [type Function]
                //sName == bSqr_7_4
                //sSide == 20

    trace(eval(this["._parent"])); //undefined
    trace(eval(this["._x"])); //undefined

}

По какой-то причине, хотя область видимости установлена ​​для вызывающего объекта (Sqr, Movieclip) и я могу получить доступ к определенным мной свойствам, я не могу использовать «нативные» свойства объекта Movieclip.

Любые предложения о том, как получить доступ к _x, _y и другим свойствам объекта Movieclip, который был нажат.

1 Ответ

0 голосов
/ 31 января 2012

Используйте метод доступа к массиву или точку доступа, но не оба.Например:

trace(this._parent); // OR
trace(this["_parent"]);

Что касается результатов вашей итерации, я вспоминаю, что AS2 был не в себе.Только динамические свойства IIRC возвращаются при зацикливании с for ... in. Это препятствует тому, чтобы Объекты (которые часто служат в качестве хеш-карт) включали свои собственные свойства, когда все, что вам нужно, это пары ключ / значение, которые вы сами задали.

Также - функция eval () может быть легко использована.Если вы абсолютно не должны выполнять строку AS2, которой у вас нет во время компиляции, я бы рекомендовал избегать ее.Удачного кодирования!

...