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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > Action script 2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 07.08.2004, 02:16
Дед Анвирыч вне форума Посмотреть профиль Отправить личное сообщение для Дед Анвирыч Найти все сообщения от Дед Анвирыч
  № 1  
Дед Анвирыч
[+] за варез

Регистрация: Mar 2001
Адрес: Россия, Нижний Новгород
Сообщений: 80
Отправить сообщение для Дед Анвирыч с помощью ICQ
По умолчанию eval для функции

В переменной obj путь и имя мувика
В переменной method имя функции внутри мувика

Как вызвать obj.method() ?

Старый 07.08.2004, 15:31
начинающий вне форума Посмотреть профиль Найти все сообщения от начинающий
  № 2  
начинающий

Регистрация: Jul 2003
Адрес: Винница (или область)
Сообщений: 118
При помощи квадратных скобок НЕЛЬЗЯ обратится к мувикам «через один», например:
Код:
var path2MC = 'element.mc'
trace(this[path2MC])  // undefined
Следовательно, придётся реализовать свою функцию, которая возвратит Вам ссылку на мувик, путь к которому задан строчкой:
Код:
function Movie(path)
{
  var pathArray = path.split('.');
  var mc=this;
  for(var i=0; i<pathArray.length; i++)
    mc = mc[pathArray[i]]
  return mc
}
А как теперь пользоваться этой функцией? Тут есть два нюанса:
1) Если функция назначена самому клипу, то просто сделайте так:
Код:
Movie(path2MC).Yo = function(){	trace('Yo') }
...
Movie(path2MC).Yo();
2) Если функция определена в timeline глубоко вложенного клипа, то, конечно, же когда исполняется скрипт данного кадра, эта функция еще не доступна. Следует дождаться не просто загрузки вложенного клипа, а момента, когда выполнение дойдёт до создания данной функции. В этом случае Вам следует поступить так:
Код:
Movie(path2MC).onEnterFrame = function()
{
	this.Test()
	delete this.onEnterFrame
}
Для чистоты эксперимента следует отметить, что ежели у Вас timeline, в которой Вы ожидаете создания функции во вложенном клипе содержит несколько кадров, то в следующий раз не нужно дожидаться создания функции Test(). Можете внедрить в скрипт некоторые флажки, которые будут показывать Вам, что однажды уже Вы переждали и больше не надо(или просто проверить, определена ли функция Movie(path2MC).Test), ну а с другой стороны, можно и обойтись без ожидания вовсе, но только следует понимать и помнить, что метод Test() будет вызван лишь во время второго(и следующих) проходов по timeline. Ну а если же у Вас лишь один кадр, то ждать необходимо обязательно, иначе Test()не будет вызван даже единожды.
__________________
все там будем...

Старый 08.08.2004, 01:28
artfla$her вне форума Посмотреть профиль Отправить личное сообщение для artfla$her Найти все сообщения от artfla$her
  № 3  
artfla$her
 
Аватар для artfla$her

Регистрация: Apr 2004
Адрес: Петербург
Сообщений: 549
Отправить сообщение для artfla$her с помощью ICQ
Если я правильно понял:

a.b.x = function(){
trace("!");
}

path1 = "a.b";
func = "x";

path01 = path1.split(".")[0];
path02 = path1.split(".")[1];

_root[path01][path02][func]();

В примере path1 = obj, func = method. Дед Анвирыч это имел ввиду?
__________________
За двумя зайцами погонишься - от егеря по морде получишь

Старый 09.08.2004, 01:52
Дед Анвирыч вне форума Посмотреть профиль Отправить личное сообщение для Дед Анвирыч Найти все сообщения от Дед Анвирыч
  № 4  
Дед Анвирыч
[+] за варез

Регистрация: Mar 2001
Адрес: Россия, Нижний Новгород
Сообщений: 80
Отправить сообщение для Дед Анвирыч с помощью ICQ
Цитата:
Оригинал написал(а) artfla$her
Если я правильно понял:

_root[path01][path02][func]();

В примере path1 = obj, func = method. Дед Анвирыч это имел ввиду?
Да, именно. Большое всем спасибо

Старый 09.08.2004, 19:56
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 5  
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
имеем переменные типа -
statSTR,statDEX,statCON,statWIS,statINT,statCHA
имеем массив stats (таполнение- STR,DEX,CON и тд) .
есть функция.
Код:
function getStat(stat) {
  for (i=0; i<stats.length; i++) {
   if (stat == stats[i]) {
    stat2return = eval("stat"+stats[i]);
    //trace(eval("stat"+stats[i]));
  }
  var path = eval("stat"+stats[i]);
  trace(typeof (path));
 }
}
собственно как я понял eval тут не работает. но и пример с массивом тоже на прокатит.


Последний раз редактировалось Nirth; 09.08.2004 в 19:57.
Старый 10.08.2004, 12:25
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
2 Nirth : а чего не работает ?
Код:
function getStat(stat) {
  for (i=0; i<stats.length; i++) {
   if (stat == stats[i]) {
    return  eval("stat"+stats[i]);
	//return this["stat"+stats[i]]//тож работает
	break;
  }
  //var path = eval("stat"+stats[i]);
  var path = this["stat"+stats[i]];
  trace(typeof (path));
 }
}

statSTR=0;statDEX=1;statCON=2;
stats = ["STR","DEX","CON"] 
trace(getStat("DEX"));

Старый 10.08.2004, 17:10
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 7  
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
возвращает андефайнд.

Старый 10.08.2004, 17:22
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 8  
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
возвращает андефайнд.

Старый 10.08.2004, 17:32
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
странно
зы: если ты про свою функцию, то она вообще ничего не возвращает (т.е. undefined), а trace определяет тип несуществующего объекта (посмотри чему равна i) - опять undefined: все как написал


Последний раз редактировалось silin; 10.08.2004 в 17:34.
Старый 12.08.2004, 23:35
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 10  
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Код:
private var stat:String;
private var stat2return:Number;
private var modifier:String;
public var mod:Number;
private var stats:Array =["STR", "DEX", "CON", "WIS", "INT", "CHA"];
private var i:Number;
//getStat function
 function getStat(stat) {
  for (i=0; i<stats.length; i++) {
   if (stat == stats[i]) {
    trace(this["stat"+stats[i]]);
    var path = eval("stat"+stats[i]);
    trace(typeof (path));
 }
}
}
да нет переменные все есть.

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

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

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


 


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


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