Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать указатель на функцию внутрь класса 
V
    Опции темы
artfabrique
  Дата 14.11.2006, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: 1
Всего: 2



Итак.
У меня есть класс:
Код

class KeyEvent {
    private var mKeysIsDown:Array;
    private var mCommands:Array;
    private var mOnce:Boolean;
    private var mAlready:Boolean;
    
    public function test(): Boolean{
        for ( var i = 0; i < mKeysIsDown.length; ++i ){
            if ( !Key.isDown( mKeysIsDown[i] ) )
            return false;
        }
        
        return true;
    }
    
    public function onKeyDown(): Void{
        var  flag:Boolean = test();
        if ( flag ){
            if ( !( mOnce && mAlready )){
                trace(mCommands);
                for ( var i = 0; i < mCommands.length; ++i ){
                    trace(mCommands[i]);
                    trace(eval("_root."+mCommands[i]+"()"));
                    _root.eval(mCommands[i]);
                }
            }
            mAlready = true;
        }
        else
            mAlready = false;
    }

    public function onKeyUp(): Void{
        mAlready = false;
    }

    public function KeyEvent( keysIsDown:Array, once:Boolean, commands:Array ){
        mKeysIsDown    = keysIsDown;
        Key.addListener( this );
        mCommands        = commands;
        mAlready        = false;
        mOnce            = once;
    }
}


я заздаю его экземпляп и определяю парк функций:
Код

function hui(){
    trace( "HUI!!!" );
}
function anotherHui(){
    trace( "Big HUI - Круто!!!" );
}

MyEvent = new KeyEvent( new Array( ""+Key.RIGHT, ""+Key.SHIFT ), true, new Array( hui,anotherHui  ) );


При инициализвции отправляю классу массив (последним парамтом) в котором должны быть указатели на функции в _root
а потом если нажата определенная клавиша то выполняю каждую из вункций переданных как массив указателей.

Класс работает если передавать не массив а просто указатель на одну функцию.. а массив не пашет почемуто, хотя в трэйме пишет что мол 2 элемента [type Function],[type Function]
Но при этом не выполняет их... в дебагере ставил брякпоинты. он точно даже не заходит в функции.
У меня появилась мысль что он пытается их запустить не в руте а в контексте данного класса...
Как быть, может кто знает???????????? smile



Это сообщение отредактировал(а) artfabrique - 14.11.2006, 03:31
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
artfabrique
Дата 14.11.2006, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: 1
Всего: 2



УРАААА!!! сделал.
Итак! Класс:
Код

// @remarks: Simple implements of Event. 
class KeyEvent {
    private var mKeysIsDown:Array;
    private var mCommands:Array;
    private var mOnce:Boolean;
    private var mAlready:Boolean;
    
    public function test(): Boolean{
        for ( var i = 0; i < mKeysIsDown.length; ++i ){
            if ( !Key.isDown( mKeysIsDown[i] ) )
            return false;
        }
        
        return true;
    }
    
    public function onKeyDown(): Void{
        var  flag:Boolean = test();
        if ( flag ){
            if ( !( mOnce && mAlready )){
                trace(mCommands);
                for ( var i:Number = 0; i < mCommands.length; ++i ){
                    trace("--->"+mCommands[i]);
                    mCommands[i].call();
                }
            }
            mAlready = true;
        }
        else
            mAlready = false;
    }

    public function onKeyUp(): Void{
        mAlready = false;
    }

    public function KeyEvent( keysIsDown:Array, once:Boolean, commands:Array ){
        mKeysIsDown    = keysIsDown;
        Key.addListener( this );
        mCommands        = commands;
        mAlready        = false;
        mOnce            = once;
    }
}


а сами функции нада было так написать:
Код

var hui = function () {
    trace("HUI!!!");
};
var anotherHui = function () {
    trace("Big HUI - Круто!!!");
};
MyEvent = new KeyEvent(new Array(""+Key.RIGHT, ""+Key.SHIFT), true, new Array(hui, anotherHui));

--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Flash"
AlDev
SoWa
  • Если вы хотите предложить кому-либо работу, то пишите или в личку, или оставляйте сообщения в специально предназначеном для этого форуме "Объявления о найме специалистов"
  • Один вопрос - одна тема. Не надо переходов от одного вопроса к другому.
  • Если вы хотите показать какой-нибудь ваш мульт, причём показать, а не предоставить исходник, то вам сюда
  • Вопросы по разработке интернет-приложений на Flex и вопросы по MXML пишите в раздел Flex
  • Смотрим в будущее. ActionScript 3 обсуждается в форуме ActionScript 3
  • Новости из мира Flash.
  • New! [code=ascript][/code] - подсветка ActionScript + wikipedia help

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, AlDev, SoWa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 1,2 | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.