![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2014
Сообщений: 15
|
Здравствуйте! Создаю водопад для игры.
Имеется мувик:drop_mov и код: _root.createEmptyMovieClip("watefall_mov", 1); _root.watefall_mov._x = 400; _root.watefall_mov._y = 10; i = 0; var Arr:Array = new Array(); function drop_fun():Void { if (i<=1000) { i++; Arr[i] = _root.watefall_mov.attachMovie("drop_mov", "drop_"+i, i); Arr[i]._x = 0; Arr[i]._y = 0; } } onEnterFrame = function ():Void { for (ii=0; ii<=i; ii++) { a = (i-ii)*0.1; Arr[ii]._y += 1*a+0.1; Arr[ii]._height += Arr[ii]._height*0.008; Arr[ii]._width += Arr[ii]._width*0.005; if (Arr[ii]._y>=700) { removeMovieClip(Arr[ii]); } } }; setInterval(drop_fun, 200); Нужно что бы при достижении каплей координаты по y>=700 не только удалялся этот экземпляр, но и в элемент массива, в котором лежал данный экземпляр присваивался очередной экземпляр и всё начиналось с начало. |
|
|||||
|
|
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Alexej, вам не обязательно хранить ссылки на капли в массиве.
Вам массив вообще не нужен. Если сделать управление падением капли на самой капле. То есть создаете ваши капли, не записываете их ни в какой массив. А каждой капле на onEnterFrame ставите код ее падения. _root.createEmptyMovieClip("watefall_mov", 1); _root.watefall_mov._x = 400; _root.watefall_mov._y = 10; var dropsCounter = 0; var totalDrops = 1000; function drop_fun():Void { if (dropsCounter<=totalDrops) { dropsCounter++; var newDrop = _root.watefall_mov.attachMovie("drop_mov", "drop_"+dropsCounter, dropsCounter); newDrop.someCoeff = (totalDrops-dropsCounter)*0.1; // тут подправить, видимо newDrop.onEnterFrame = dropOnEnterFrame; } else { clearInterval(createDropInterval) } } function dropOnEnterFrame():Void { this._y += this.someCoeff+0.1; this._height += this._height*0.008; this._width += this._width*0.005; if (this._y>=700) { delete this.onEnterFrame; removeMovieClip(this); } }; var createDropInterval = setInterval(drop_fun, 200); onEnterFrame = function ():Void { for (ii=0; ii<=i; ii++) { a = (i-ii)*0.1; Arr[ii]._y += 1*a+0.1; Arr[ii]._height += Arr[ii]._height*0.008; Arr[ii]._width += Arr[ii]._width*0.005; if (Arr[ii]._y>=700) { Arr[ii].deleteFlag = true; } } for(var k=0; k < Arr.length; k++){ if(Arr[k].deleteFlag){ Arr[k].removeMovieClip(); Arr.splice( k, 1 ); k--; } } }; P.S. В коде могу ошибаться, в браузере пишу.
__________________
hauts.ru |
|
|||||
|
Регистрация: Mar 2014
Сообщений: 15
|
Спасибо очень помогли!
Добавлено через 4 минуты Цитата:
Добавлено через 2 часа 0 минут Для общего пользования, если кому понадобится. Значениями переменных можно варьировать(Экспериментируйте) Создаёте мувик drop_mov(капля-круг с наложеным градиентом. К краям прозрачность приближается к нулю) _root.createEmptyMovieClip("watefall_mov", 1); _root.watefall_mov._x = 400; _root.watefall_mov._y = 10; concentrat = 200; //Скорость образования новых капель в мс limit = 60; //Лимитированое число капель на сцене acceleratDrop = 0.01; i = 0; var Arr:Array = new Array(); function drop_fun():Void { if (i == limit) { i = 0; } i++; Arr[i] = _root.watefall_mov.attachMovie("drop_mov", "drop_"+i, i); Arr[i]._x = 0; Arr[i]._y = 0; } onEnterFrame = function ():Void { for (ii=0; ii<=limit; ii++) { Arr[ii]._y += 0.5+Arr[ii]._y*acceleratDrop; Arr[ii]._height += Arr[ii]._height*0.008; Arr[ii]._width += Arr[ii]._width*0.005; if (Arr[ii]._y>=700) { removeMovieClip(Arr[ii]); } } }; setInterval(drop_fun, concentrat); |
|
|||||
|
Переписываем:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|