Форум 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=113900)

Kroli4eg 12.07.2008 19:40

Массив имен клипов
 
Доброго времени суток. У меня возникла задачка, не знаю с какого бока подойти. Допустим у меня есть массив содержащий имена клипов. Как мне сделать так чтоб во время выполнения программы клипы из этого массива могли слушать события. Т.е. грубо говоря у меня есть клипы по нажатию на которые происходят одни и те же события. И я не хочу на каждый клип писать mc1.onPress = function().....mcn.onPress = function(), а загнать эти клипы в массив и потом их от туда подставлять. Возможно ли такое? если да то подскажите в какую сторону копать, потому что я честно говоря даже не знаю по каким слоавам осуществлять поиск чтоб найти что то подобное.

Alex_beginner 12.07.2008 19:53

Вложений: 1
Здравствуйте Kroli4eg!

Если я правильно понял чего Вы хотите, то Вы сможете добиться цели с помощью этого (синтаксис АС1):

Код:

for (var i:Number = 1;i<=20;i++)
{
        this.attachMovie("Symbol 1",i,this.getNextHighestDepth());
        this[i]._x=random(300);
        this[i]._y=random(300);
}


MovieClip.prototype.onPress = function():Void
{
        trace(this._name);//this здесь указывает на клип на котором произведен щелчок мыши
}

Кстати имена клипов в примере - числа от 1 до 20. Не пугайтесь.

Удачи.

NoCD 13.07.2008 13:23

Вложений: 1
Если я правильно понял, то тебе что то подобное нужно:

Код:

      button_index=5 // количество будущих кнопок
      mas=new Array()
      mas=["Петя",10,01,"Bася","Hello"]
for(i=0;i< button_index;i++)
{          attachMovie("button","button_onPress"+i,i)
              _root["button_onPress"+i]._x=100
              _root["button_onPress"+i]._y=50*i+100
}
_root.onMouseDown = function() {

for(j=0;j< button_index;j++)
{
if(_root["button_onPress"+j].hitTest(_xmouse,_ymouse)) { //проверяем
        trace("Содержание массива с индексом "+j+" = "+mas[j])
}}}


Kroli4eg 13.07.2008 13:53

Спасибо за помощь. Мне скорее всего подходит вариант Alex_beginner. Скажите плз если у меня мои клипы вложены в один клип. то чтобы к этим клипам достучаться вашим способом мне нужно использовать свойство _proto_ чтоб выстроить цепочку, или меня не в ту степь понесло?

Kuruki 13.07.2008 14:02

Код:

this.clip[i]._x=random(300);
clip - в него вложены ваши клипы

iNils 13.07.2008 14:06

Код Alex_beginner плох тем, что теперь абсолютно все мувиклипы будут кнопками. Поэтому надо сделать так:
Код в исходнике замените на
Код:

for (var i:Number = 0; i <= 20; i++) {
        var mc:MovieClip = this.attachMovie ("Symbol 1", i, this.getNextHighestDepth ());
        mc._x = random (300);
        mc._y = random (300);
}

А внутри клипа, который будте аттачится, напишите
Код:

#initclip
function Clip () {
}
Clip.prototype = new MovieClip ();
Object.registerClass ("Symbol 1", Clip);
Clip.prototype.onPress = function ():Void  {
        trace (this._name);
        //this здесь указывает на клип на котором произведен щелчок мыши
};
#endinitclip


Alex_beginner 13.07.2008 14:14

To iNils: В состав задачи не входили аспекты и ньюансы. Поэтому, я оставил за собой право представить примерный базовый код. Ежели после тестов автор задачи сочтет, что в данном конкретном случае необходимы исключения как то, что требуется разделять одни клипы от других, я неприменно постараюсь представить модифицированный код, учитывающий новые представленные факты.

Kroli4eg!


Можно сделать и в АС2!

Сделайте свой класс потомком от MovieClip, допустим MyClass в котором переопределите обработчик требуемого события. Далее создавайте ваши клипы, те что должны иметь общий обработик события как экземпляры от MyClass, а те клипы у которых не должно быть общего обработчика как экземпляры от MovieClip, тогда Вы сможете избежать ситуации, любезно описанной iNils'ом.

Kroli4eg 13.07.2008 17:54

что то я честно говоря совсем запутался. Вы не могли бы на простеньком примере показать, на пальцах так сказать 0:-) Мне обязательно создавать клипы, если нет то как их превязать к MyClass?
вот как я это понял, но что то я в этом коде напартачил, не работает :-(
Код:

function new_clip():Void {} //sozdaem klass k kotoromu budut otnositsa muviki
new_clip.prototype.__proto__ = MovieClip.prototype;
new_clip.prototype.constructor = MovieClip; // delaem podklassom MovieClip
var arr=[]; // sobstvenno massiv s imenami muvikov
arr[0] = "palm_d";
arr[1] = "palm_j";
for (i = 0; i < arr.length; i++)
{
        this.bigmap[arr[i]].__proto__ = new_clip.prototype;// delau moy klip klassa new_clip
          this.bigmap[arr[i]].constructor = new_clip;
}
new_clip.prototype.onPress = function():Void
{
        trace(this._name);//this здесь указывает на клип на котором произведен щелчок мыши
}

в итоге onPress не срабатывает

iNils 13.07.2008 18:19

Цитата:

Сообщение от Alex_beginner (Сообщение 751786)
В состав задачи не входили аспекты и ньюансы.

Голова существует не только для того чтобы видеть, ну и думать.

Alex_beginner 13.07.2008 18:29

Вложений: 1
Kroli4eg!

По Вашей просьбе прилагаю наглядный примерчик.

В примере, зеленые клипики - обычные клипы, без обработчика onPress, синие с обработчиком onPress. По нажатию синих клипов в панели Output выводятся их имена (опять же цифры).

Порядок создание примера:

1. Создаю класс MyClass (см. в папке вложения) - подкласс MovieClip.
2. В нем переопределяю обработчик onPress
3. Сохраняю класс в папке AS_Class. Не забываю прописать путь к классу в "предпочтениях".
4. Создаю клип-символ (например кружок). В свойствах символа на вкладке Linkage Properties (свойства связывания) активизирую галочку Export for ActionScript При этом станет доступной строка AS 2.0 Class. В нее
нужно ввести имя класса, с которым должен быть связан символ. В нашем случае это MyClass.
5. Далее создаю аналогичный клип-символ не связывая его с каким-либо классом
6. Аттачу те и другие по 11 штук каждого вида, располагая их рандомно на площади 300х300 пикселей.
7. Вот собственно и все.

[iNils: для подобных вещей существует приват]


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

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