Просмотр полной версии : Массив имен клипов
Kroli4eg
12.07.2008, 19:40
Доброго времени суток. У меня возникла задачка, не знаю с какого бока подойти. Допустим у меня есть массив содержащий имена клипов. Как мне сделать так чтоб во время выполнения программы клипы из этого массива могли слушать события. Т.е. грубо говоря у меня есть клипы по нажатию на которые происходят одни и те же события. И я не хочу на каждый клип писать mc1.onPress = function().....mcn.onPress = function(), а загнать эти клипы в массив и потом их от туда подставлять. Возможно ли такое? если да то подскажите в какую сторону копать, потому что я честно говоря даже не знаю по каким слоавам осуществлять поиск чтоб найти что то подобное.
Alex_beginner
12.07.2008, 19:53
Здравствуйте 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. Не пугайтесь.
Удачи.
Если я правильно понял, то тебе что то подобное нужно:
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_ чтоб выстроить цепочку, или меня не в ту степь понесло?
this.clip[i]._x=random(300);
clip - в него вложены ваши клипы
Код 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 не срабатывает
В состав задачи не входили аспекты и ньюансы.Голова существует не только для того чтобы видеть, ну и думать.
Alex_beginner
13.07.2008, 18:29
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: для подобных вещей существует приват]
Kroli4eg
13.07.2008, 19:05
чегото не получается у меня класс подключить. Пишет:
The name of this class, 'MyClass', conflicts with the name of another class that was loaded, 'MyClass'.
Нельзя ли сделать то же самое в одном кадре и без подключаемых модулей?
Alex_beginner
13.07.2008, 19:12
Увы, класс в АС2 можно создать только в отдельно созданном as-файле.
Сообщение об ошибке вероятно обусловлено отсутствием прописанных путей к классу во вкладке предпочтения. Зайдите на вкладку "предпочтения", находящееся на вкладке Edit (редактирование). Там щелкните на ActionScript (колонка слева), далее ActionScript параметры. Там щелкните на изображении прицела и в обзоре найдете папку AS_Class с классом MyClass (в архиве примера лежит).
Еще одно, посмотрите чтобы в поисковом пространстве не оказалось два класса с именем MyClass. Если найдете два класса с одинаковыми именами второй (не мой) нужно будет убрать.
Либо сделайте так как сказал iNils (см. его код)
Kroli4eg
13.07.2008, 19:28
Увы, класс в АС2 можно создать только в отдельно созданном as-файле.
Сообщение об ошибке вероятно обусловлено отсутствием прописанных путей к классу во вкладке предпочтения. Зайдите на вкладку "предпочтения", находящееся на вкладке Edit (редактирование). Там щелкните на ActionScript (колонка слева), далее ActionScript параметры. Там щелкните на изображении прицела и в обзоре найдете папку AS_Class с классом MyClass (в архиве примера лежит).
Еще одно, посмотрите чтобы в поисковом пространстве не оказалось два класса с именем MyClass. Если найдете два класса с одинаковыми именами второй (не мой) нужно будет убрать.
Либо сделайте так как сказал iNils (см. его код)
Вы наверное не поверите, но заработал написанный мной выше код. Я вашу идею понял по своему и как оказалось это по своему тоже работает. Спасибо огромное за помощь!!! Теперь можно идти домой с чуством выполненного долга :-)
По поводу вашего примера оказалось дублирование классов.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.