Молния, красивый эффект


Создаем новый документ, в качестве фона выбираем черный цвет и смотрим код.


this.onEnterFrame = function(){
cursGen._x = _xmouse;
cursGen._y = _ymouse;
}

//общее описание алгоритма - цикл отрисовки рандомно
//ломаной линии из единичных отрезков между двумя точками,
//вложенный в цикл, вычисляющий эти точки как рандомно
//(в зависимости от отклонения при изгибе) отстоящие от конца
//каждого следующего отрезка (длиной, равной длине_луча_"старт-финиш"/
количество_изгибов), откладываемого на луче "старт-финиш".
//Также есть вероятность ветвления, пропорциональная
//номеру изгиба.

var mouseListener:Object = new Object();
Mouse.addListener(mouseListener);
this.createEmptyMovieClip("cursGen",this.getNextHighestDepth());
cursGen.lineStyle(6,0xFFFFFF,75);
cursGen.moveTo(0,0);
cursGen.lineTo(0,1);
//var cursor:MovieClip = cursGen;

Mouse.hide();

mouseListener.onMouseDown = function(){
line(0,0,_xmouse, _ymouse,7,4,15,50);
}

mouseListener.onMouseUp = function(){
//очистка поля и массива клипов
for(lnCnt=0;lnCnt
=curve_dy){
  steps = Math.floor(curve_dx/pix);
 }else{
  steps = Math.floor(curve_dy/pix);
 }

//цикл отрисовки изгиба единичными отрезками
  for(i=1;i<=steps;i++){

    newX =remX + (i/steps)*curve_dx + (random(10)-5);
    newY =remY + (i/steps)*curve_dy + (random(10)-5);
//перемещаем перо в эту точку
//если это первый отрезок первого изгиба - его стартовые
//координаты - это точка старта
   if(a==1&&i==1){
    li.moveTo(startX,startY);
    newX =(i/steps)*curve_dx + (random(10)-5)+startX;
    newY =(i/steps)*curve_dy + (random(10)-5)+startY;
    remX=newX;
    remY=newY;
   }
   li.lineStyle(width_,0xFFFFFF,100);
   li.lineTo(newX, newY);
//если данный изгиб дорисован - обновляем стартовые координаты
   if(i==steps){
    remX=newX;
    remY=newY;
   }
  }
//если счетчик изгибов достиг некоторого значения, то есть
//вероятность ответвления
  if(random(a)+1.5*a> curveQuant){
   width_ *= 0.9;
   _line(remX ,remY ,dx ,dy ,pix ,width_*0.5,curveQuant ,curveDelta);
  }
}
var glowFilter = new flash.filters.GlowFilter();
var glowFilter1 = new flash.filters.GlowFilter();
var _filters:Array = li.filters;
_filters.push(glowFilter);
_filters.push(glowFilter1);
li.filters=_filters;

var pxFil:Array = new Array;
pxFil = li.filters;

pxFil[0].color = 0xffffff;
pxFil[0].strength = 3;
pxFil[0].alpha =0.65;
pxFil[0].blurY = 8;
pxFil[0].blurX = 8;
pxFil[1].color = 0xffffff;
pxFil[1].strength = 2;
pxFil[1].alpha =0.8;
pxFil[1].blurY = 20;
pxFil[1].blurX = 20;
li.filters = pxFil;
}

//полностью аналогична предыдущей, но не дает ответвлений

function _line(startX_:Number,startY_:Number,dx_:Number,dy_:Number,
pix_:Number,width__:Number,curveQuant_:Number,curveDelta_:Number){
l= getNextLine();
remX_ = 0;
remY_ = 0;

for(a_=1;a_=curve_dy_){
  steps_ = Math.floor(curve_dx_/pix_);
 }else{
  steps_ = Math.floor(curve_dy_/pix_);
 }

  for(i_=1;i_<=steps_;i_++){

    newX_ =remX_ + (i_/steps_)*curve_dx_ + (random(10)-5);
    newY_ =remY_ + (i_/steps_)*curve_dy_ + (random(10)-5);
   if(a_==1&&i_==1){
    l.moveTo(startX_,startY_);
    newX_ =remX_ + (i_/steps_)*curve_dx_ + (random(10)-5)+startX_;
    newY_ =remY_ + (i_/steps_)*curve_dy_ + (random(10)-5)+startY_;
    remX_=newX_;
    remY_=newY_;
   }
   l.lineStyle(width__,0xFFFFFF,100);
   l.lineTo(newX_, newY_);
   if(i_==steps_){
    remX_=newX_;
    remY_=newY_;
   }

  }
}
var _glowFilter = new flash.filters.GlowFilter();
var _glowFilter1 = new flash.filters.GlowFilter();
var __filters:Array = l.filters;
__filters.push(_glowFilter);
__filters.push(_glowFilter1);
l.filters=__filters;

var _pxFil:Array = new Array;
_pxFil = l.filters;

_pxFil[0].color = 0xffffff;
_pxFil[0].strength = 3;
_pxFil[0].alpha =0.65;
_pxFil[0].blurY = 8;
_pxFil[0].blurX = 8;
_pxFil[1].color = 0xffffff;
_pxFil[1].strength = 2;
_pxFil[1].alpha =0.8;
_pxFil[1].blurY = 20;
_pxFil[1].blurX = 20;
l.filters = _pxFil;

}

Совет новичкам: ctrl+c, ctrl+v :lol:
Или скачать исходник >>

--- Новости в блогосфере ---

  1. Блог Английский просто рассказывает чему нужно учиться и как не переусердствовать
  2. На лирическом блоге опечаленные мысли о любви
  3. На международной блогопанораме английский для блогеров - english teacher
  4. Блог о мировом кризисе размещает видеоматериалы объявлений о нем
  5. Новости о Flash, Flex, AIR от Дениса Иванова
This entry was posted in Кодинг and tagged , , . Bookmark the permalink.

4 Responses to Молния, красивый эффект

  1. Abro cadbury Abro cadbury says:

    Как сделать чтобы:
    -молнии работали без нажатия мышкой?
    -молнии меняли цвет?
    -молний было несколько?
    ————————————————–
    Мне нужно нарисовать плазменный шар( по типу http://shop.key.ru/photo/items/42320.jpg)
    ————————————————-
    Заранее благодарен за помощь :roll:

  2. cleverbrain SaGod says:

    Abro cadbury, я так понимаю, вам нужен шар с появляющимися внутри него молниями. Так? Вообще можно и без ActionScript обойтись,(если уж не получается этот код под себя переделать): нарисовать шар, ломаные кривые и анимировать циклически появление молний. Если такой вариант не устраивает, то сделаю урок, в котором опишу способ с применением ActionScript.

  3. Виолетта Виолетта says:

    Ух ты! :grin: Мне очень понравилось! Сейчас себе такую же сделаю! Ну очень здорово=))) Жалко я ничего в программировании флэша не понимаю…

  4. cleverbrain SaGod says:

    Виолетта, скоро будет статья по обзору книг для обучения ActionScript во Flash, ждите :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.
сделано dimoning.ru