Всього залишено коментарів: 25

seo
Листопад 6, 2010 о 11:04

цікаво й доступно до читача. Вчимо ActionScript 3

Рома
Листопад 28, 2010 о 00:35

спс.

symfony
Грудень 7, 2010 о 11:03

Ухти)
В грі можна використати)
Кидаєш гранату, а воно – баХ!

Микола
Грудень 14, 2010 о 14:11

Мабуть, трохи незакiнчений урок. Ми ж повиннi десь видалити непотрiбнi вже уламки зi сцени?

Ярослав Федорак
Грудень 15, 2010 о 10:22

Якщо ти про дітей (children) – то дійсно, після програвання анімації їх потрібно видаляти, щоб не перевантажувати пам’ять, якої завжди не вистачає. Про видалення дітей буде детально написано в окремому уроці.

roman
Липень 5, 2011 о 11:36

Як варіант, видалення уламків можна проводити так:
1 створюємо пустий кліп.
2 в цьому пустому кліпі динамічно розміщуємо задуману анімацію вибуху.
3. після того, як уламки вийшли за межі екрану, видаляємо наш кліп, що містить всі діти(chaild)
Так нормально?

Ярослав Федорак
Липень 5, 2011 о 11:39

Цілком.

R96
Липень 28, 2011 о 16:10

створюю анімацію з елементами math.random. через те що вони мають додаватись безперервно і вилітати за межі сцени їх з кожною секундою стає більше що призводить до перегрузки системи.
питання:
як перевірити чи вийшли уламки за межі сцени і тоді їх видалити? наперед спасибі

Ярослав Федорак
Липень 28, 2011 о 16:15

Перевірити, що вийшли за межі сцени можна за координатами. В циклі перевіряєш, чи знаходиться уламок в межах сцени. Якщо ні – видаляєш. Мабуть, напишу окрему статтю про видалення об’єктів, які більше не будуть використовуватися.

R96
Липень 28, 2011 о 16:50

якщо я правильно зрозумів то перевірку треба робити в тому ж циклі що й створення об”єктів так?
конструкція оператора if
if (part[i].x990 || part[i].y75){
removeChild(part[i]);
}
розміри сцени 990х75
нічого не виходить видалення не відбувається(

R96
Липень 28, 2011 о 16:51

if (part[i].x990 || part[i].y75){
removeChild(part[i]);
}*

R96
Липень 28, 2011 о 16:52

знаки більше, не відобразились в постах вище. сорі за флуд

Ярослав Федорак
Липень 28, 2011 о 16:58

Ні, не в тому ж циклі. Вам потрібно створити подію Enterframe (виконується кожен кадр) і в ній перевіряти. Бо цикл в наведеному коді виконується тільки один раз – коли ви тиснете на кнопку.

Крім того вихід за сцену відбувається з обох сторін, тому, якщо координата 0 < X > 990 – тоді частинка знаходиться за сценою. Так само – 0 < Y > 75 – значить частинка теж за межами сцени.

Окрім власне видалення об’єктів варто присвоювати їм значення null, щоб не зберігалися в пам’яті.

І якщо ви використовуєте приклад із цієї статті, то більшість частинок ніколи не вийдуть за рамки сцени. Вони просто стануть невидимими (але знаходитимуться на сцені)

R96
Липень 28, 2011 о 17:09

на рахунок виходу з всіх сторін це так, просто зараз працюю хоча б над одною і те не виходить..
проблема в тому що створення нових екземплярів відбувається на кліком миші а якраз ентерфреймом (потрібно щоб вони безперервно добавлялись)
ось код
var part: Array = [];

stage.addEventListener (Event.ENTER_FRAME, explode);

function explode (e:Event):void
{

for (var i:int=0; i990){
removeChild(part[i]);
}
}
}
спасибі що копаєтесь у моїй тупизні чи не досконалості)

R96
Липень 28, 2011 о 17:12

змінило весь коментар (обрізало), тому там все не так як насправді.. ок буду сам трудитись дякую за хелп)

Aleot
Вересень 22, 2011 о 09:34

У меня возникла проблема:

выдает ошибку в строчке part[i] = new movingPart;

пишет мол Call to a possibly undefined method movingPart.

заранее признателен за помощь.

Ярослав Федорак
Вересень 22, 2011 о 09:56

Ви праві, в код закралася помилка. Потрібно не
part[i] = new movingPart;
а
part[i] = new movingPart();

Aleot
Вересень 22, 2011 о 10:07

Ничего не выходит. Выдает ту же самую ошибку..((
Может из за того что у меня CS3, или не имеет значения?

Ярослав Федорак
Вересень 22, 2011 о 10:12

Ні, це не має значення. Головне, щоб ви правильно вибрали мову при створенні проекту (AS3, а не AS2).

Схоже, що ваш код не бачить кліпу movingPart. Перевірте, чи частинка є в бібліотеці, чи проставлена галочка Export for ActionScript і чи правильно написане ім’я класу movingPart.

Aleot
Вересень 22, 2011 о 10:20

Да все проставлено правильно и язык тоже выбран правильно..
Почему то не видит символ из библиотеки..
Но если его поместить на сцену, за приделы рабочей области, начинает работать, хотя не так как хотелось бы ( после клика анимация не останавливается и повторяется в том месте непрерывно).

Ярослав Федорак
Вересень 22, 2011 о 10:27

щоб анімація зупинялася потрібно в саму шкалу часу кліпу в кінці (коли частинку вже не видно) вставити одну стрічку: stop();
В третьому пункті про це написано. При тесті анімації вона повинна програтися один раз і зупинитися.

А чому у вас не “підхоплюється” символ із бібліотеки – мені важко сказати. Потрібно бачити сам файл і код.

Aleot
Вересень 22, 2011 о 10:40

В любом случае спасибо за помощь.
Благодаря вам много чего полезного узнал.

roman
Вересень 22, 2011 о 13:55

На рахунок видалення уламків, щоб неперевантажувалась память. Можна не контролювати вихід уламків за межі екрану, а просто прибирати їх через певний час після початку вибуху (по події таймеру, який знищує всі уламки і сам себе).

Ярослав Федорак
Вересень 22, 2011 о 14:16

Найпростіше – повісити слухач події на кліп уламка і коли той закінчив програвання – просто видаляти його.

Si7Ro
Лютий 10, 2012 о 00:55

Если у кого бьет ошибку part[i] = new movingPart();
пробуйте так part[i] = new movingpart();

1Пінгбеки & Трекбеки
Поділіться своєю думкою