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

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

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

Регистрация: Dec 2006
Адрес: mpl
Сообщений: 49
Отправить сообщение для Чттос с помощью ICQ
По умолчанию setInterval - не умею использовать :(

Ребята, помогите пожалуйста! Сколько раз сталкивалась с setInterval, ни разу не получалось с ним разобраться. обходилась в итоге другими способами. но сейчас даже не представляю как можно иначе реализовать следующую вещь:
у меня есть код, который чертит кривую по заданной функции. в моем случае - парабола. я ее черчу создавая в клипе container дочерние клипы nameMC. от каждого нового nameMC черчу линию к старому nameMC, тем самым создавая траекторию.
При компиляции на экране появляется нужная кривая.
Но мне надо что б каждый дочерний клип, nameMC, появлялся после какого-то промежутка времени. То есть, будет эффект анимации.
Для этого я пыталась использовать setInterval, разными способами, но в итоге ничего не вышло. вообще.
Подскажите пожалуйста, куда его надо вставлять в этот код:
Код:
var cooX1:Number;
var cooX2:Number;
var cooY1:Number;
var cooY2:Number;
var i:Number = 0;
var nameMC;
var container:MovieClip;

function laCourbe(a:Number, b:Number, c:Number, courbeColor:String) {
	for (cooX1=100; cooX1<300; cooX1 += 1) {
		container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
		cooY1 = a*Math.pow(cooX1, 2)+b*cooX1+c;
		nameMC = "point"+i;
		container.createEmptyMovieClip(nameMC,this.getNextHighestDepth());
		container[nameMC]._x = cooX1;
		container[nameMC]._y = cooY1;
		container[nameMC].lineStyle(1,courbeColor,100);
		var cooRazX:Number = cooX2-cooX1;
		var cooRazY:Number = cooY2-cooY1;
		container[nameMC].lineTo(cooRazX,cooRazY);
		cooX2 = cooX1;
		cooY2 = cooY1;
		i++;
	}
	cooX2 = null;
	cooY2 = null;
}

laCourbe(0.05,-20,2050,"0xFF0000");
Спасибо заранее
__________________
ЧунГачГучинА-а!

Старый 17.07.2008, 18:43
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 2  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Код:
class LaCourbe {
	
	private var cooX1:Number = 100;
	private var cooX2:Number;
	private var cooY1:Number;
	private var cooY2:Number;
	private var i:Number = 0;
	private var nameMC;
	private var container:MovieClip;
	private var id:Number;
	
	public function LaCourbe (mc:MovieClip)
	{
		container = mc.createEmptyMovieClip("container", mc.getNextHighestDepth());
		id = setInterval(this, "laCourbe", 10, 0.05,-20,2050,"0xFF0000");
	}
	
	private function laCourbe(a:Number, b:Number, c:Number, courbeColor:String) {
			
		cooY1 = a*Math.pow(cooX1, 2)+b*cooX1+c;
		nameMC = "point"+i;
		container.createEmptyMovieClip(nameMC, container.getNextHighestDepth());
		container[nameMC]._x = cooX1;
		container[nameMC]._y = cooY1;
		container[nameMC].lineStyle(1,courbeColor,100);
		var cooRazX:Number = cooX2-cooX1;
		var cooRazY:Number = cooY2-cooY1;
		container[nameMC].lineTo(cooRazX,cooRazY);
		cooX2 = cooX1;
		cooY2 = cooY1;
		i++;
		cooX1 ++
		
		if (cooX1 >= 300)
		{
			clearInterval (id);
		}
	}
}
Использовать:
Код:
var a:LaCourbe = new LaCourbe (_root);

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

Регистрация: Dec 2006
Адрес: mpl
Сообщений: 49
Отправить сообщение для Чттос с помощью ICQ
Спасибо огромное! все работает, но всеравно выдает две ошибки, в которых я ничего не понимаю, тк с классами никогда не сталкивалась. только последнее время, начала встречать их на форуме =8-0
понятно только одно, что щас буду с ними разбираться. Случаем нет никакой хорошей документации по классам на русском языке?? а пока я полезла в хэлп....

О ужас! Да-да, я просто щас в ужасе! разобралась я с классами, что к чему в общем виде. и что? оказывается что я даже не умею прикреплять к своей флэшке файл .asc!!! =8-0

Отсюда вопрос: а нельзя ли это все организовать все же в едином файле? просто допустим, что если мне надо несколько раз вызвать эту функцию, LaCourbe, с разными параметрами???
__________________
ЧунГачГучинА-а!


Последний раз редактировалось Чттос; 17.07.2008 в 20:06.
Старый 17.07.2008, 22:01
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 4  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Предлагаю мой вариант реализации:

Код:
import flash.geom.Point;
var cooY1:Number = null; //координата Y точек
var cooX1:Number = null; //координата X точек
var i:Number = 0;//индекс имени клипов-точек
var nameMC:String = '';//имя клипа-точек
var beg_X:Number = 110;//начальный X построения кривой
var end_X:Number = 210;//конечный X построения кривой
var step:Number = 5; // шаг по X
var timePeriod:Number = 80; //временной период между прорисовками точек
var intervalID:Number = null;//идентификатор таймера

function laCourbe(a:Number, b:Number, c:Number, courbeColor:Number) {
	    var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
	    var beg_Point:Point = equation_of_curve(beg_X,a,b,c);
		container.moveTo(beg_Point.x,beg_Point.y);
		cooX1=beg_X+step;
		intervalID = setInterval(constrFunc,timePeriod,a,b,c,courbeColor);
}

function equation_of_curve(X:Number, a:Number, b:Number, c:Number):Point //функция изменения Y от X
{
	return new Point(X,a*Math.pow(X, 2)+b*X+c);
}


function constrFunc(a:Number, b:Number, c:Number, courbeColor:Number)
{
			cooY1 = equation_of_curve(cooX1,a,b,c).y;
			nameMC = "point"+i;
			//container.createEmptyMovieClip(nameMC,container.getNextHighestDepth());
			container.attachMovie("point",nameMC,container.getNextHighestDepth());
			container[nameMC]._x = cooX1;
			container[nameMC]._y = cooY1;
			container.lineStyle(1,courbeColor);
			container.lineTo(cooX1,cooY1);
			if (cooX1>end_X) 
			{
				clearInterval(intervalID);
				trace("Построение окончено");
			}
			i++;
			cooX1+=step;
}


laCourbe(0.05,-20,2050,0xFF0000);
Преимущества:
1. работоспособность (линии отображены цветом courbeColor);
2. отсутствует или почти отсутствует избыточность кода, т.е нет излишних вычитаний, сложений, присвоений, инкрементов.
3. структурированность кода - математическая функция задающая закон изменения Y от X вынесена в отдельную функцию.
Вложения
Тип файла: rar Построение кривой (Created_by_Alex_beginner).rar (5.1 Кб, 114 просмотров)
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 18.07.2008 в 12:59.
Старый 18.07.2008, 12:03
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 5  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Цитата:
оказывается что я даже не умею прикреплять к своей флэшке файл .asc!!! =8-0
Его прикреплять не надо.
Надо положить его рядом с вашей флешкой, а в флешке написать
Код:
import LaCourbe;
var a:LaCourbe = new LaCourbe (_root);

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

Теги
setinterval

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

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


 


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


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