Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Область видимости переменной (http://www.flasher.ru/forum/showthread.php?t=138526)

ab1e 09.04.2010 20:06

Область видимости переменной
 
Всем привет!
Есть вот такой код:

Код AS1/AS2:

var RegionsCount = 70;
var Regions:Array = new Array();
 
for (i=1; i<=RegionsCount; i++) {
        Regions[i] = "Region #"+i;       
}
 
for (i=1; i<= RegionsCount ; i++)
{
  _root.logo_mc.rusmap['region'+i].onRollOver = function () {
 
          _root.lefttoptext.text = _root.Regions[i];
  }
}

в целом всё работает, но в строке

Код AS1/AS2:

_root.lefttoptext.text = _root.Regions[i];

не видно переменную i
пробовал делать _root.i - не помогает.

mooncar 09.04.2010 20:34

Код AS1/AS2:

var RegionsCount = 70;
var Regions:Array = new Array();
 
for (i = 1; i <= RegionsCount; i++) {
        Regions[i] = 'Region #' + i;
        _root.logo_mc.rusmap['region' + i].num = i; //запомним номер внутри мувика
        _root.logo_mc.rusmap['region' + i].onRollOver  = regionRollOver; //назначим функцию-обработчик
}
 
function regionRollOver () {
        var k:Number = this.num; //извлечем номер
        _root.lefttoptext.text = _root.Regions[k];
}

Просто в вашем варианте в конце работы цикла i примет значение 71 (именно так), и именно это значение и будет использоваться для всех обработчиков.

AzagThoth 09.04.2010 20:39

Код AS1/AS2:

var RegionsCount = 70;
var Regions:Array = new Array();
 
for (i=1; i<=RegionsCount; i++) {
        Regions[i] = "Region #"+i;       
}
 
for (i=1; i<= RegionsCount ; i++)
{
  _root.logo_mc.rusmap['region'+i].onRollOver = function (i:Number):Void {
 
          _root.lefttoptext.text = _root.Regions[i];
  }
}

Так попробуйте. Не проверял. Но в теории должно работать.

mooncar 09.04.2010 20:43

Цитата:

Сообщение от AzagThoth (Сообщение 899292)
Так попробуйте. Не проверял. Но в теории должно работать.

Ни по теории, ни как не должно.
Функция-обработчик onRollOver не имеет аргументов, кроме ссылки на сам объект, событие которого обрабатывается (т.е. this) и на саму себя.

AzagThoth 09.04.2010 21:21

Да, Вы правы. Что то я потупил :) Сейчас проверил - действительно моё предложение сущий бред.
Код AS1/AS2:

i=10;
clip.onRollOver=function(i):Void{
        trace(i);
}

В отпут при наведении - undefined
А вот так:
Код AS1/AS2:

clip.i=10;
clip.onRollOver=function():Void{
        trace(this.i);
}

Всё как надо. Спасибо что указали на то, что НЕЛЬЗЯ передавать этой функции аргументы!


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

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