Интерактив часть 3

В коде есть два неприятных момента.

  • проверка на пересечение травинок и ножниц происходит всегда, даже когда курсор мыши не наведен на ролик.
  • и еще один, проверяются на пересечение срезанные травинки. Конечный вариант кода с пояснениями ниже.
code frame 1
1  Stage.scaleMode = «noScale»;
2  Stage.align = «LT»;
3  //импорт классов для программной анимации
4  import com.greensock.*;
5  import com.greensock.easing.*;
6  //массив для хранения клипов травинок
7  var aMc:Array=new Array();
8  //переменная, true — значит курсор мыши наведен на ролик, false — нет
9  var mouse:Boolean=false;
10  //запишем в массив первую травинку
11  aMc.push(mcGrass.mc0);
12  //открываем цикл
13  for(var i=1; i<15; i++){
14  //дублируем клип mcGrass.mc0
15  mcGrass.mc0.duplicateMovieClip(«mc»+i, i);
16  //ставим дубликат по оси x
17  mcGrass[«mc»+i]._x=i*mcGrass.mc0._widthrandom(8);
18  //случайное значение высоты травинки в пределах от 60% до 100%
19  mcGrass[«mc»+i]._yscale=60+random(40);
20  //записываем дубликат в массив
21  aMc.push(mcGrass[«mc»+i]);
22  }
23  //событие наведения на клип mcEvent
24  mcEvent.onRollOver=function(){
25  //прикрепим клип mc к курсору мыши
26  mc.startDrag(true);
27  //спрячем стандарный курсор мыши
28  Mouse.hide();
29  //обозначим, что пользователь навел на баннер
30  mouse=true;
31  }
32  //событие выхода курсора за пределы клипа mcEvent
33  mcEvent.onRollOut=function(){
34  //поставим клип ножниц в начальное положение
35  mc._x=100;
36  mc._y=130;
37  //прекратим следование клипа mc за курсором мыши
38  mc.stopDrag();
39  //покажем курсор мыши
40  Mouse.show();
41  //обозначим, что пользователь увел курсор с баннера
42  mouse=false;
43  }
44
45  onEnterFrame=function(){
46  //чтобы не делать лишних проверок, наведены ли ножницы на травинки,
47  //и не нагружать ЦП, проверим, наведен ли курсор мыши на баннер
48 if(mouse==true){
49  //перебор всех травинок
50  for(i=0; i<aMc.length; i++){
51  //проверка на пересечение травинки с точкой координат
52  //курсора мыши
53  if(aMc[i].hitTest(_root._xmouse, _root._ymouse, true)){
54  //анимируем верхнюю часть травинки
55  TweenNano.to(aMc[i].mc, 1, {_x:«-10» ,_y:«+40»,
_rotation:50-random(100), _alpha:0, ease: Back.easeIn});
56  //удаляем i-ый элемент массива, чтоб не проверять
57  //его больше
58  aMc.splice(i, 1);
59  }
60  }
61  }
62  }

Конечный результат:

Автор: Юрий Гусак.