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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Sep 2004
Сообщений: 90
По умолчанию Програмная анимация.

такая штука:

нарисовано 3 квадратика и раскидано по сцене.

после события, рэндомом выбираю один из квадратиков и уменьшаю ему прозрачность.
Как только прозрачность этого квадратика меньше 50, рэндомом выбираю 1 из оставшихся 2-ух и уменьшаю прозрачность ему. Как только у второго меньше 50, случайно выбираю 3ий итд.

Вот код:
Код:
count=3;//количество квадратов
//контейнер
eff = this.createEmptyMovieClip("effect", 8);
this.effect._x = 469;
this.effect._y = 10;
//рисую квадратики
for (var i = 0; i<count; i++) {
	effect.createEmptyMovieClip("picEff"+i, 10+i);
	wayEff = eval("effect.picEff"+i);
	wayEff._x = places_x[i];
	wayEff._y = places_y[i];
	with (this.wayEff) {
		lineStyle(1, 0xffffff, 0);
		beginFill(0x2F84BC, 80);
		moveTo(0, 0);
		lineTo(42, 0);
		lineTo(42, 42);
		lineTo(0, 42);
		lineTo(0, 0);
		this.endFill();
	}
}
//Массив с неповторяющимся рэндомом
myRandom = new Array(count);
for (i=0; i<count; i++) {
	k = 0;
	while (k == 0) {
		k = 1;
		m = random(count);
		for (i1=0; i1<i; i1++) {
			if (myRandom[i1] == m) {
				k = 0;
			}
		}
	}
	myRandom[i] = m;
}
//пути к квадратикам
myEffects = new Array(count);
for (i=0; i<count; i++) {
	myEffects[i] = eval("effect.picEff"+myRandom[i]);
}

eff.onEnterFrame = function() {
	i=0;
	myEffects[i]._alpha -= 5;
	if (myEffects[i]._alpha<50) {
		myEffects[i+1]._alpha -= 5;
	}
	if (myEffects[i+1]._alpha<50) {
		myEffects[i+2]._alpha -= 5;
	}
	//стираю эффект
	if (myEffects[i+2]._alpha<=0) {
		this.removeMovieClip();
	}

};
Собственно, все работает. Но никак не могу сообразить как мне оформить функцию
Код:
eff.onEnterFrame = function() {
	i=0;
	myEffects[i]._alpha -= 5;
	if (myEffects[i]._alpha<50) {
		myEffects[i+1]._alpha -= 5;
	}
	if (myEffects[i+1]._alpha<50) {
		myEffects[i+2]._alpha -= 5;
	}
	//стираю эффект
	if (myEffects[i+2]._alpha<=0) {
		this.removeMovieClip();
	}
};
Чтобы не зависеть от числа квадратов.

Спасибо.

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

Регистрация: Mar 2001
Сообщений: 1,147
при чтении очень многих вопросов вспоминается анекдот про петуха, который гонится за курицей, знает что не догонит, но всё равно бежит из соображений "не догоню, так хоть согреюсь". если хочется просто согреться, то дальше не читай. ну а если курицу охота догнать, то
а. сделай мувик с квадратиком и твинингом альфы от 100 до 50 со стопами в начале и в конце. (если квадратик до 0 должен дойти, стало быть твининг делай до 0, а в середине твининга сделай ключевой кадр)
б. в основной сцене возьми любое значение count (хоть рэндомное) и циклом размести на сцене count штук квадратиков любых размеров, цветов, координат и т.д. последовательно нумеруя инстансы
в. сделай массив длинной count, куда будешь сохранять уже проигранные/непроигранные квадратики единственным флагом
д. напиши функцию рэндомного выбора из числа непроигранных пока квадратиков и запуска их твининга с внесением изменения флага в массиве
г. один раз запусти функцию из основной сцены и в коде квадратика запускай её из кадра, соответствующего альфе = 50.
всё. зачем программно альфу-то менять? ну надо программно, напиши функцию в коде мувика с квадратиком. станешь запускать её для каждого инстанса (так ты от числа квадратиков на сцене отвяжешься). Зачем квадратик программно рисовать? Ну если так хочется, рисуй его в первом кадре мувика будующего квадратика. Основная твоя ошибка в том, что ты свойства и функции объекта в главной сцене пишешь. Пиши их в каком-то мувике, а потом его аттачь в сцену любое число раз и каждый приаттаченый будет уже в себе иметь все необходимые прибамбасы нет, ну можно пойти дальше, и написать класс. тогда всё вообще будет красиво, правильно и объектно-ориентировано. но проще всего не заморачиваться и сделать по пунктам а-г (если рассматривать конкретную прикладную задачу в которой нужны только квадратики с однотипными свойствами. вот если бы там ещё были кружочки и треугольнички, причём кружочки при достижении альфы=50 меняли бы цвет, треугольнички масштабировались в 0, а квадратики продолжали становиться более прозрачными до полного исчезновения, тогда наследование свойств и пр фигня)
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит.

Старый 19.12.2005, 12:22
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 3  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Cпасибо за ответ.
Я не хочу рисовать альфу руками, т.к. хочу иметь возможность корректировать скорость исчезновения квадратов, возможно тоже рэндомом, итд.
Более того, если нужно рисовать какой-то сложные многоугольники, с координатами углов, берущимися, например из xml?
Менять цвет, форму, место положение итд - этож не проблема даже в моем случае.
Удобство нарисовать руками вижу только, чтобы в тело мувика сунуть функцию запускающую сл. квадрат.
Все остальное не сущуственно.

Собственно, вопрос свелся, как представить это:
Код:
eff.onEnterFrame = function() {
	i=0;
	myEffects[i]._alpha -= 5;
	if (myEffects[i]._alpha<50) {
		myEffects[i+1]._alpha -= 5;
	}
	if (myEffects[i+1]._alpha<50) {
		myEffects[i+2]._alpha -= 5;
	}
	//стираю эффект
	if (myEffects[i+2]._alpha<=0) {
		this.removeMovieClip();
	}
};
если мувиков не 3, а 30.


Последний раз редактировалось Vier; 19.12.2005 в 12:26.
Старый 19.12.2005, 15:11
Double вне форума Посмотреть профиль Отправить личное сообщение для Double Найти все сообщения от Double
  № 4  
Ответить с цитированием
Double
 
Аватар для Double

Регистрация: Mar 2001
Сообщений: 1,147
блин, ну так я ж уже сказал! сделай пустой мувик, в нём пропиши все свои эфекты, в основную сцену аттачь любое колличество этих мувиков, внутри которых хоть картины рисуй! единожды прописаный код будет работать на любом экземпляре твоего мувика. почитай ещё раз часть моего поста, которая сразу за п. "г" идёт.

если не хочешь делать пустой мувик-прототип (по сути-то), тогда делай объекты/классы с наследованием свойств и пр.
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит.

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

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

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


 


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


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