Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.07.2012, 04:07
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 1  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
По умолчанию Как сделать частицы летящими словно их колышет ветер?

Я сделал движущиеся частицы, чтобы этот код работал, достаточно в библиотеке создать клип с именем flake

Как вы видите, у меня с моими частицами несколько проблем.
Во первых, я хотел их сделать как-бы вылетающими справа, из-за экрана, и летящими влево. Со временем с помощью рандома и числа я сделаю еще и их исчезновение.
Тут проблема в том, что я не знаю, как определить ширину экрана пользователя, или ширину экрана swf в данный момент. А если это все будет бэкграундом сайта - там тоже - как определить правый край?
Поэтому на данный момент в плане координат появления частиц все криво. Прямые грубые числа которые никуда не подходят кроме как для теста.

Я хотел сделать движение как-бы каждой частицы в разную точку на оси _y.
Получился бы эффект словно их колыхает ветер (хотя на самом деле просто разные точки в немножечко разные _y летят). Я пробовал просто изменить скорость плюса к this._y, но получалась свистопляска вместо красивого полета
Я буду рад любым идеям или даже намекам.

Тут можно посмотреть swf как он есть по коду ниже: http://www.swfcabin.com/open/1342215422

Код AS1/AS2:
this.onEnterFrame = function()
{
	var mspeed:Number = new Number();
	var ran:Number = new Number();
	var toy:Number = new Number();
	//tox = random(500);
	mspeed = random(6);
	ran = random(20);
	if (mspeed==0) {
		mspeed=1;
	}
	if (ran==1) {
		mspeed=20;
	} 
	toy = -200+random(800);
	n = this.getNextHighestDepth();
	flak = attachMovie("flake", "flake" + n, n);
	flak._x = 700;
	flak._y = random(1700);
	flak._alpha = random(100);
	flak._xscale = random(60);
	flak._yscale = flak._xscale;
	//tox:Number = new Number();
 
	//flak.filters = [blur];
	flak.onEnterFrame = function()
	{
		this._x-=mspeed;
 
		this._y+=(mspeed/1.2);
 
	};
};

Старый 14.07.2012, 13:26
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Получить ширину текущего размера окна флешки можно так:
Код AS1/AS2:
Stage.width
У вас для каждой снежинки отдельно создается onEnterFrame, это не есть гуд. Управляйте всеми снежинками из одного onEnterFrame, перебирая к примеру все снежинки на экране циклом. Ссылки на снежинки лучше всего хранить в массиве, для достижения наибольшей производительности.

С ветром посложнее, для настоящего труЪ ветра нужно через некоторые интервалы времени генерировать рандомные направление и скорость, Это может быть тупо 2 числа: скорость и угол. Далее все снежинки двигать по этим показателям, добавляя для каждой отдельно - своё небольшое смещение, для реалистичности.

Может быть вам пригодиться этот код:
Код AS1/AS2:
_root.myClip._x += speed*Math.cos(_root.myClip._rotation*(Math.PI/180));
_root.myClip._y += speed*Math.sin(_root.myClip._rotation*(Math.PI/180));
Этот код двигает _root.myClip в направлений его ротации, со скоростью speed
__________________
Дети не должны знать о своих родителях

Старый 14.07.2012, 20:02
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 3  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Насчет массива не совсем понял. В цикле ведь тогда придется каждый раз перебирать клипы и каждый раз делать + к движению?
onEnterFrame вроде бы задает каждому клипу свой код, который они бесконечно выполняют (до условия и т.д.). А с массивом придется создавать кучу переменных для каждого мувика, чтобы в цикле соблюдать отдельное движение для каждого клипа-элемента массива.
Я могу все не так понимать, кстати.

Для тру ветра согласен, попробую сделать с этим что-то.
Кстати, у меня во флешке клипы иногда просто исчезают. С чем это может быть связано? Возможно, глубина другого клипа используется...

Спасибо за две строки кода, очень помогут!

Старый 14.07.2012, 21:27
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 4  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Получение незанятой глубины клипа:

Код AS1/AS2:
там_где_оно_все_лежит.getNextHighestDepth();
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 14.07.2012, 21:36
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 5  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Ага, с глубиной уже есть эта строчка.

Сделал с помощью двух строчек кода, что Tails указал выше, получилось намного живее, чем раньше. Теперь осталось сделать так, чтобы производительность не сходила с ума.
Насчет массива, если честно, не совсем понял.
Я заметил, что это частое и верное решение, работа с массивом. С ним и циклом проще делать всякие вещи "по очереди".
Но вот как присвоить каждому клипу-элементу массива свой "автоматический цикл движения" я не знаю.

Старый 14.07.2012, 21:41
myregmail вне форума Посмотреть профиль Отправить личное сообщение для myregmail Найти все сообщения от myregmail
  № 6  
Ответить с цитированием
myregmail

Регистрация: Mar 2012
Сообщений: 20
Есть исходник с www.freeactionscript.com. Только там код откомментирован на английском, но, в принципе, все понятно (и про добавление снежинок в массив, и про перебор массива, и про ветер).
Вложения
Тип файла: zip realistic-snow-fall-snowflake-effect.zip (142.8 Кб, 51 просмотров)

Старый 14.07.2012, 21:58
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 7  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Сделал максимум частиц - 140, чтобы сохранять производительность.
Вот исходник, теперь все выглядит намного живее.

Исходник с массивом посмотрю, спасибо!
Вложения
Тип файла: zip test_flakes.zip (7.0 Кб, 69 просмотров)

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.