В этом уроке я расскажу вам о уничтожении стены. В этом примере используется как бы вид сверху, но вы можете использовать этот эффект в любом виде и жанре. Суть вопроса - при стрельбе в стену образовывается большая выбоина, если много стрелять можно уничтожить всю стену. Для начала работы нам нудно создать мувик "hero" а в нем 16 мувиков p1, p2, p3 .... p15, p16. На скрине №1 показано как они расположены. Скрин №1:
Далее рисуем стену в которую будем стрелять и называем ее "stena". Далее спецэффект взрыва "vz". Создаем мувик "w" с координатами (0,0), а в нем создаем белую выбоину с именем "white". Все с подготовкой закончено кидаем в рут этот код:
Code
hero_speed=6
w_n=0
onEnterFrame=function(){
//движение
livo=0
pravo=0
niz=0
verh=0
if(Key.isDown(65)){//лево
livo=1
}
if(Key.isDown(68)){//право
pravo=1
}
if(Key.isDown(83)){//вниз
niz=1
}
if(Key.isDown(87)){//вверх
verh=1
}
if((livo==1)and(pravo==0)and(niz==0)and(verh==0)){
hero._x-=hero_speed
}
if((livo==0)and(pravo==1)and(niz==0)and(verh ==0)){
hero._x+=hero_speed
}
if((livo==0)and(pravo==0)and(niz==1)and(verh==0)){
hero._y+=hero_speed
}
if((livo==0)and(pravo==0)and(niz ==0)and(verh==1)){
hero._y-=hero_speed
}
if((livo==1)and(pravo==0)and(niz==1)and(verh==0)){
hero._x-=hero_speed/Math.sqrt(2)
hero._y+=hero_speed/Math.sqrt(2)
}
if((livo==1)and(pravo==0)and(niz==0)and(verh==1)){
hero._x-=hero_speed/Math.sqrt(2)
hero._y-=hero_speed/Math.sqrt(2)
}
if((livo==0)and(pravo==1)and(niz==1)and(verh==0)){
hero._x+=hero_speed/Math.sqrt(2)
hero._y+=hero_speed/Math.sqrt(2)
}
if((livo==0)and(pravo==1)and(niz==0)and(verh==1)){
hero._x+=hero_speed/Math.sqrt(2)
hero._y-=hero_speed/Math.sqrt(2)
}
//end движение
hero._rotation=Math.atan2(_ymouse-hero._y,_xmouse-hero._x)/Math.PI*180+90
//hit stena
for(i=1;i<17;i++){
if((stena.hitTest(hero["p"+i]._x+hero._x,hero["p"+i]._y+hero._y,true))
and(w.hitTest(hero["p"+i]._x+hero._x,hero["p"+i]._y+hero._y,true)==false)){
ugol=Math.atan2(hero["p"+i]._y,hero["p"+i]._x)
for(i2=1;i2<30;i2++){
hero._x-=0.3*Math.cos(ugol)
hero._y-=0.3*Math.sin(ugol)
if((stena.hitTest(hero["p"+i]._x+hero._x,hero["p"+i]._y+hero._y,true)==false)
or(w.hitTest(hero["p"+i]._x+hero._x,hero["p"+i]._y+hero._y,true))){
i2=31
}
}
}
}
//end hit stena
//strelba
but.onPress=function(){
w.white._x=hero._x
w.white._y=hero._y
for(i=1;i<300;i++){
w.white._x+=2*Math.cos(Math.atan2(_ymouse-hero._y,_xmouse-hero._x))
w.white._y+=2*Math.sin(Math.atan2(_ymouse-hero._y,_xmouse-he ro._x))
w.white._rotation=Math.random()*360
if((stena.hitTest(w.white._x,w.white._y,true))and(w.hitTest(w.white._x,w.white._y,true)==f alse)){
i=301
vz._x=w.white._x
vz._y=w.white._y
vz.gotoAndPlay(2)
}
}
w_n++
w.white.duplicateMovieClip("white"+w_n, w_n)
}
//end strelba
}//end enterFrame
Для плавности движений можно поставить частоту 30 фпс.
Скачать:
[swf]
[exe]
[fla]
Flash файлы сохранены в 9-ой версии.
Скриншоты: