![]() |
|
||||||||||
|
|||||
|
[+2 24.06.08]
Регистрация: Mar 2008
Адрес: Dubai
Сообщений: 34
|
Доброго времени суток. У меня возникла задачка, не знаю с какого бока подойти. Допустим у меня есть массив содержащий имена клипов. Как мне сделать так чтоб во время выполнения программы клипы из этого массива могли слушать события. Т.е. грубо говоря у меня есть клипы по нажатию на которые происходят одни и те же события. И я не хочу на каждый клип писать mc1.onPress = function().....mcn.onPress = function(), а загнать эти клипы в массив и потом их от туда подставлять. Возможно ли такое? если да то подскажите в какую сторону копать, потому что я честно говоря даже не знаю по каким слоавам осуществлять поиск чтоб найти что то подобное.
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Здравствуйте 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 здесь указывает на клип на котором произведен щелчок мыши
}
Удачи.
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось Alex_beginner; 12.07.2008 в 20:03. |
|
|||||
|
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
Если я правильно понял, то тебе что то подобное нужно:
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])
}}}
|
|
|||||
|
[+2 24.06.08]
Регистрация: Mar 2008
Адрес: Dubai
Сообщений: 34
|
Спасибо за помощь. Мне скорее всего подходит вариант Alex_beginner. Скажите плз если у меня мои клипы вложены в один клип. то чтобы к этим клипам достучаться вашим способом мне нужно использовать свойство _proto_ чтоб выстроить цепочку, или меня не в ту степь понесло?
|
|
|||||
|
Регистрация: Jan 2008
Сообщений: 669
|
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Код 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);
}
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
To iNils: В состав задачи не входили аспекты и ньюансы. Поэтому, я оставил за собой право представить примерный базовый код. Ежели после тестов автор задачи сочтет, что в данном конкретном случае необходимы исключения как то, что требуется разделять одни клипы от других, я неприменно постараюсь представить модифицированный код, учитывающий новые представленные факты.
Kroli4eg! Можно сделать и в АС2! Сделайте свой класс потомком от MovieClip, допустим MyClass в котором переопределите обработчик требуемого события. Далее создавайте ваши клипы, те что должны иметь общий обработик события как экземпляры от MyClass, а те клипы у которых не должно быть общего обработчика как экземпляры от MovieClip, тогда Вы сможете избежать ситуации, любезно описанной iNils'ом.
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось Alex_beginner; 13.07.2008 в 14:32. |
|
|||||
|
[+2 24.06.08]
Регистрация: Mar 2008
Адрес: Dubai
Сообщений: 34
|
что то я честно говоря совсем запутался. Вы не могли бы на простеньком примере показать, на пальцах так сказать 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 здесь указывает на клип на котором произведен щелчок мыши
}
Последний раз редактировалось Kroli4eg; 13.07.2008 в 19:13. |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
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: для подобных вещей существует приват]
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось iNils; 13.07.2008 в 19:19. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|