Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.04.2007, 18:31
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 21  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Kikasso, так у нас же область видимости тогда не меняется. Как были внутри кнопки, так в ней и остались.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.04.2007, 19:23
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 22  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Цитата:
Сообщение от iNils
Это то, ради чего вы это все затеяли?
Да. И в первом сообщении я довольно подробно это объяснил.

Kikasso
У вас this получается Button.

Старый 27.04.2007, 19:38
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 23  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от WindWalker
Да. И в первом сообщении я довольно подробно это объяснил.
Не может я чего то не понял. А так вы изобрели велосипед, только колеса у вас квадратные.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.04.2007, 20:00
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 24  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Нет, мой велосипед выглядит вот так:
Код:
static function delegate(obj: Object, func: Function):Function {
       var f = function() {
            var target = arguments.callee.target;
            var func = arguments.callee.func;
            return func.apply(target, arguments.concat(arguments.callee.args));
        };
        f.target = obj;
        f.func = func;
        f.args = arguments.slice(2);
        return f;
}
На нём и катался последние два-три года.

А класс Call - это чистая магия

Старый 27.04.2007, 20:06
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 25  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
WindWalker, есть один такой здоровый минус. Когда я пользуюсь в FlashDevelop своим Delegate, там у меня работает автокомплит. И здесь его не будет.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.04.2007, 20:30
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 26  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Зачем нам колдовать с областью видимости? Мы можем передать ее параметром, а уж что за функция будет "на приеме", другое дело:
Код:
function onMenuReleased(){
	var arr = arguments;
return ( function(){ trace("hello from " + this._name); trace( "arguments: " + arr); } );
}
btnMenu1.onRelease = onMenuReleased(1);
btnMenu2.onRelease = onMenuReleased(2);
btnMenu3.onRelease = onMenuReleased(this, 3, 4);
И наконец, почему бы новичкам не научиться писать нормально?
Код:
function onMenuReleased(){
	trace("hello from " + this);
	trace( arguments.length ?  ("arguments: " + arguments.join(", ") ) : "no arguments" );
}
btnMenu1.onRelease = onMenuReleased;
btnMenu2.onRelease = function(){ onMenuReleased(2); }
btnMenu3.onRelease = function(){ onMenuReleased(this, 3, 4); }
btnMenu4.onRelease = function(){ onMenuReleased(); }

Старый 27.04.2007, 21:37
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 27  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Область видимости не должна меняться.

Старый 28.04.2007, 00:43
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 28  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Цитата:
Сообщение от Kikasso
И наконец, почему бы новичкам не научиться писать нормально?
Код:
function onMenuReleased(){
	trace("hello from " + this);
	trace( arguments.length ?  ("arguments: " + arguments.join(", ") ) : "no arguments" );
}
btnMenu1.onRelease = onMenuReleased;
btnMenu2.onRelease = function(){ onMenuReleased(2); }
btnMenu3.onRelease = function(){ onMenuReleased(this, 3, 4); }
btnMenu4.onRelease = function(){ onMenuReleased(); }
Тут крайне неоднозначно будет с видимостями.

Сделал я 4 кнопочки, поместил этот код в кадр.
Затем запустил и поочередно щёлкнул по каждой кнопке.
И вот что я получил:
Код:
hello from _level0.btnMenu1
no arguments
hello from _level0
arguments: 2
hello from _level0
arguments: _level0.btnMenu3, 3, 4
hello from _level0
no arguments
Что вполне логично.
В первом случае onMenuReleased вызвалось от имени кнопки.
Во всех остальных случаях неявно подставился _root.

Затем я объединил все кнопки в один мувик и привязал к этому мувику вот такой вот класс:

Код:
class Menu extends MovieClip {
  var btnMenu1:Button;
  var btnMenu2:Button;
  var btnMenu3:Button;
  var btnMenu4:Button;

  function onMenuReleased(){
    trace("hello from " + this);
    trace( arguments.length ?  ("arguments: " + arguments.join(", ") ) : "no arguments" );
  }

  function Menu() {
    btnMenu1.onRelease = onMenuReleased;
    btnMenu2.onRelease = function(){ onMenuReleased(2); }
    btnMenu3.onRelease = function(){ onMenuReleased(this, 3, 4); }
    btnMenu4.onRelease = function(){ onMenuReleased(); }
  }
}
Т.е. практически тоже самое.
Однако теперь работает только первая кнопка (и опять же this будет кнопка, а не наш класс).
Во всех остальных случаях он не может найти onMenuReleased.


Вот как раз из-за таких проблем с областью видимости и придумали класс mx.utils.Delegate, который каждый переделывает на свой лад.

Старый 28.04.2007, 00:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 29  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Не надо объявлять методов в методах, от этого только проблемы возникнут. А в Delegate лучше не смотреть, работает и работает. Это костыль в AS2, без него никуда, увы.

Старый 28.04.2007, 01:55
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 30  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от WindWalker
Во всех остальных случаях он не может найти onMenuReleased
Конечно, он не может его найти. this в этот момент вообще не пойми что, btnOnRelease тоже как таковой нет, а вы создаете метод с ее участием.
Если объявлять эту btnOnrelease в конструкторе, это сработает, но без ссылки на самого себя не обойтись.
Только такой изврат извратович:
Код:
class Menu extends MovieClip {
  var btnMenu1:Button;
  var btnMenu2:Button;
  var btnMenu3:Button;
  var btnMenu4:Button;
  function onMenuReleased():Void{
  	trace("hello from " + this);
    trace( arguments.length ?  ("arguments: " + arguments.join(", ") ) : "no arguments" );
  }
  function Menu() {
  	var viz:Menu = this;
    btnMenu1.onRelease = onMenuReleased;
    btnMenu2.onRelease = function(){ viz.onMenuReleased(2); }
    btnMenu3.onRelease = function(){ viz.onMenuReleased(this, 3, 4); }
    btnMenu4.onRelease = function(){ viz.onMenuReleased(); }
  }
}
Жуть.
__etc прав, не надо мудрить.
А если без классов, в кадре - проблем нет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.