Среда, 25 Декабря 2024, 04:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Урок "уничтожение стены"
apoptomДата: Пятница, 29 Октября 2010, 17:16 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
В этом уроке я расскажу вам о уничтожении стены. В этом примере используется как бы вид сверху, но вы можете использовать этот эффект в любом виде и жанре. Суть вопроса - при стрельбе в стену образовывается большая выбоина, если много стрелять можно уничтожить всю стену. Для начала работы нам нудно создать мувик "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-ой версии.

Скриншоты:

Прикрепления: 6408840.png (11.5 Kb) · 1609798.png (24.0 Kb) · 6778021.png (24.5 Kb) · 1739212.png (24.7 Kb)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг