PDA

Просмотр полной версии : Обращение одним кодом к клипам клип1, клип2, ... клип-N


Димчик
12.04.2010, 17:59
Доброго времени суток
зная Ваш авторитет в области программирования во Flash, хочу задать один вопрос. У меня всегда синтаксис хромал ((

В общем, вот какое дело. На главном поле главный герой, перемещается мышью. Кроме того, есть, допустим, 11 клипов, при соприкосновении с которыми перемещается в определенный кадр.
Все эти клипы назову hit1,hit2,...,hit11. А инстанс нэйм главного героя неважно (обращаемся ко всему из его клипа).
В чем проблема. Все работает отлично, т.е. и hitTest, и перемещение, и другие-другие задумки. Но хотелось бы, ввиду значительного сокращения программы, один раз написать код, и чтобы для всех клипов работал. Допустим, я пишу:


onClipEvent (enterFrame) {
if (this.hitTest(_root.hit1)) {
_root.gotoAndPlay('konec'); //konec - имя кадра.
}
this._x = _root._xmouse;
this._y = _root._ymouse;
}
Этот код идеально работает для соприкосновения героя и клипа hit1. НО! Т.к. есть hit2,hit3, ... , hit 11, то придется писать этот же код для каждого из них. Что не хотелось бы.

Попробовал написать так:


onClipEvent (load) {
i =1; i <= 11;
}

onClipEvent (enterFrame) {
if (this.hitTest(_root.['hit'+i])) {
_root.gotoAndPlay('konec'); //konec - имя кадра.
}
this._x = _root._xmouse;
this._y = _root._ymouse;
}
При проверке выводит, что он не знает, что за хрень после _root ( в if (this.hitTest(_root.['hit'+i])) )

Помогите, пожалуйста, как нужно написать. Заранее благодарен.

mooncar
12.04.2010, 18:11
По синтаксису правильно так:
_root['hit'+i]
Не пишите код на мувиках, кстати, это порочная практика.

Проверяйте hitTest в цикле.
Типа так (запись кода в кадре!):
this.onEnterFrame = function() {
for (i = 1; i <= 10; i++)
if (hero_mc.hitTest(_root['hit' + i])) {
trace('Соприкосновение'); //или ваш gotoAndPlay
}
}
//другие ваши действия, выполняющиеся с частотой fps
};

Димчик
12.04.2010, 18:30
mooncar

Огромное! Огромное Вам спасибо!!!!!!! :)