Форум 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)
-   -   for + onRelease = обработчик события нажатия на нефиксированное число кнопок? (http://www.flasher.ru/forum/showthread.php?t=118424)

Evgan 23.11.2008 16:44

for + onRelease = обработчик события нажатия на нефиксированное число кнопок?
 
приветствую.

у меня есть кнопки, число которых не постоянное (определяется исходя из значения _global.total-1).
при нажатии на одну из них должен выдоватся её номер.

пробывал такими образом:

Код:

for (var i:Number = 0; i<_global.total-1; i++) {
        this['boot'+i].onRelease = function():Void  {
            trace(i);
        };
}

в трее при нажатии на любую из кнопок выдаёт одно и тоже значение: а именно, последнее значение переменной i в цикле (_global.total-1);

подсабите советом кто знает решение данной задачи.

спасибо.

darksranger 23.11.2008 16:56

Код AS1/AS2:

for ( var i:int=0;i<=_global.total-1;i++) {
var boot:MovieClip = create.....
boot.a = i
boot.onRelease = sameFunction
 
function sameFunction():Void {
trace(a)
 
}
 
 
 
}

правда незнаю будет ли работать, начинаю уже забывать as2 и писал на коленке, но если не работает и не понятна суть, я могу накидать рабочий вариант

Evgan 23.11.2008 17:18

Цитата:

Сообщение от darksranger (Сообщение 779200)
Код AS1/AS2:

for ( var i:int=0;i<=_global.total-1;i++) {
var boot:MovieClip = create.....
boot.a = i
boot.onRelease = sameFunction
 
function sameFunction():Void {
trace(a)
 
}
 
 
 
}

правда незнаю будет ли работать, начинаю уже забывать as2 и писал на коленке, но если не работает и не понятна суть, я могу накидать рабочий вариант

к сожелению, сути не уловил+(

darksranger 23.11.2008 17:51

ну суть в том, что в цикле, создаем обьект, в этом обьекте создаем свойство, передаем в свойство нужное знаение и при обработке события, на нужном обьекте, читаем это значение, из созданного свойства :)

PS не пишите код в кадрах ... ( решил потому что используете _global )

Wolsh 23.11.2008 18:46

Вы взяли в руки коробок и десять камушков. Кладете камушек в коробок и говорите кнопке))))) - "когда тебя нажмут, скажешь сколько камушков в коробке". И что, по-вашему, будут говорить кнопки при нажатии??? Конечно, ДЕСЯТЬ.
Вариант 2 - Камушек в коробок, пишете на бумажке цифру, сколько там сейчас камушков, и суете кнопке в карман))). И говорите ей - "Когда тебя нажмут, скажи что написано на этой бумажке".

darksranger 23.11.2008 19:05

изящное объяснение ) у меня заумно, как то получилось :(

Evgan 23.11.2008 20:21

спасибо
теперь смысл понятен
осталось теперь разобраться как это осуществить

darksranger 23.11.2008 20:43

эм, а чем не угодил мой код ?

nOobCrafter 24.11.2008 17:46

Ммм люди, я извращенец похоже, НО у меня точно такая же ситуация но двумерный массив, эт что мне надо делать? О_о
Код AS1/AS2:

var Docs_Download_item_title:Array = new Array();
var Docs_Download_item_url:Array = new Array();
var Docs_header:Array = new Array();
var total_i:Array = new Array();
var total_j:Number;
var i:Number = 0;
var j:Number = 0;
var p:Number = 0;
var offset_j:Number = 0;              // вводим доп. переменную, для вычисления расстояния до след раздела
var xml:XML = new XML();
stop();
 
xml.onLoad = function(){
var nodes_j = this.firstChild.childNodes;
total_j = nodes_j.length;
 
for( j = 0; j < total_j; j++)
{
 Docs_header[j] = nodes_j[j].attributes.razdel;
 Docs_Download_item_title[j] = new Array();            // добавляем массиву размерность
 Docs_Download_item_url[j] = new Array();              // и тперь он из одномерного превращается в двумерный))))
 
 var nodes_i = this.firstChild.childNodes[j].childNodes;
 total_i = nodes_i.length;
 for( i = 0; i < total_i; i++)
 {
  Docs_Download_item_title[j][i] = nodes_i[i].attributes.title; // присваиваем значения двумерному массиву
  Docs_Download_item_url[j][i] = nodes_i[i].attributes.url;  //
 }
 create_item_list();    // тут значение total_i, принимает правильные значения, так что пока что построение возможно только в этом месте, потому и блокируем условие if ниже. Иначе total_i принимает значения только последнего абзаца для всех.
}
}
xml.load( "Docs_Download.xml" );
xml.ignoreWhite = true;
 
function create_item_list():Void
{
var Docs_list = Docs.Docs_Download_item_list.duplicateMovieClip("Docs_Download_item_list"+j, j);  //
  Docs_list._y = 0;
  Docs_list.Docs_header._y = 0;
  Docs_list.Docs_header._x = 0;
  Docs_list.Docs_header.text = Docs_header[j];                //
 
  for( i = 0; i < total_i; i++)
  {
  var Docs_Download_item = Docs_list.Docs_Download_fm_item.duplicateMovieClip("Docs_Download_fm_item"+i, i);
  Docs_Download_item._y = i * (Docs.Docs_Download_item_list.Docs_Download_fm_item._height + item_spacing) + 30;
  Docs_Download_item.Docs_Download_item_title.text = Docs_Download_item_title[j][i];
  Docs_Download_item.no = Docs_Download_item.no = Docs_Download_item_url[j][i];;    // вот тут полчается как вы описываете, определяем через св-во
  trace(Docs_Download_item.no)  // тут все шикарно определяется
  Docs_Download_item.Docs_Download_item_button.onRelease = function()
    {
  trace(Docs_Download_item.no)                // тут косяк, получаю только последнее значение из списка
    //getURL(Docs_Download_item_url[this._parent.no], '_self' );
    }
  } 
}


Wolsh 24.11.2008 18:50

Код AS1/AS2:

trace(this._parent.no)



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

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