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

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

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

Регистрация: Jul 2007
Сообщений: 14
По умолчанию Очередность выполнения функций

Как можно организовать выполнение второй функции после окончания выполнения первой? Третей - после выполнения второй и т. д.
И еще не пойму как работают глобальные переменные. Ниже привожу код, который не работает до конца. Может как то по-другому можно сделать?

Код:
_root.createEmptyMovieClip ("main_top", 5);
main_top._x=150;
main_top._y=296;
main_top.lineStyle (0, 0xFF0000, 100);
main_top.beginFill (0xFF0000);
main_top.moveTo (0, 0);
main_top.lineTo (501, 0);
main_top.lineTo (501, 3);
main_top.lineTo (0, 3);
main_top.lineTo (0, 0);
main_top.endFill ();

_root.createEmptyMovieClip ("main_middle", 3);
main_middle._x=150;
main_middle._y=300;
main_middle.lineStyle (0, 0xFBFFE6, 100);
main_middle.beginFill (0xFBFFE6);
main_middle.moveTo (0, 0);
main_middle.lineTo (500, 0);
main_middle.lineTo (500, 3);
main_middle.lineTo (0, 3);
main_middle.lineTo (0, 0);
main_middle.endFill ();

_root.createEmptyMovieClip ("main_bottom", 4);
main_bottom._x=150;
main_bottom._y=304;
main_bottom.lineStyle (0, 0xFF0000, 100);
main_bottom.beginFill (0xFF0000);
main_bottom.moveTo (0, 0);
main_bottom.lineTo (501, 0);
main_bottom.lineTo (501, 3);
main_bottom.lineTo (0, 3);
main_bottom.lineTo (0, 0);
main_bottom.endFill ();

_root.createEmptyMovieClip ("main_l", 1);
main_l._x=150;
main_l._y=0;
main_l.lineStyle (0, 0xFBFFE6, 100);
main_l.beginFill (0xFBFFE6);
main_l.moveTo (0, 0);
main_l.lineTo (1, 0);
main_l.lineTo (1, 1);
main_l.lineTo (0, 1);
main_l.lineTo (0, 0);
main_l.endFill ();

_root.createEmptyMovieClip ("main_r", 2);
main_r._x=649;
main_r._y=600;
main_r.lineStyle (0, 0xFBFFE6, 100);
main_r.beginFill (0xFBFFE6);
main_r.moveTo (0, 0);
main_r.lineTo (1, 0);
main_r.lineTo (1, 1);
main_r.lineTo (0, 1);
main_r.lineTo (0, 0);
main_r.endFill ();

_global.x_1=0;
_global.x_2=0;
function schetchik_I()
{
	main_l._height=main_l._height+5;
	main_r._height=main_r._height+10;
	main_r._y=main_r._y-5;
	if (main_l._height>296)
	{
		_global.x_1=1;
		clearInterval(inter_I);
	}
}
var inter_I:Number=setInterval(schetchik_I, 1);


if (_global.x_1==1)
{
	function schetchik_II()
	{
		main_l._height=main_l._height-5;
		main_r._height=main_r._height-10;
		main_r._y=main_r._y+5;
		main_top._y=main_top._y-5;
		main_bottom._y=main_bottom._y+5;
		main_middle._y=main_middle._y-5;
		main_middle._height=main_middle._height+10;
		if (main_middle._height>400)
		{
			_global.x_2=1;
			main_middle._y=100;
			main_middle._height=400;
			main_top._y=96;
			main_bottom._y=502;
			clearInterval(inter_II);
		}
	}
	var inter_II:Number=setInterval(schetchik_II, 1);
}

if (_global.x_2==1)
{
	function schetchik_III()
	{
		main_l._y=main_l._y+5;
		main_r._y=507;
		main_r._height=main_r._height-5;
		if (main_r._height<6)
		{
			main_r._height=0;
			clearInterval(inter_III);
		}
	}
	var inter_III:Number=setInterval(schetchik_III, 1);
}

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

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
в конце каждой функции вызывай следующую функцию.
А вообще если записывать так:
Код:
func1();
func2();
то func2 не вызывается пока не выполнится func1.

Старый 10.07.2007, 01:05
V_e_g_a вне форума Посмотреть профиль Отправить личное сообщение для V_e_g_a Найти все сообщения от V_e_g_a
  № 3  
Ответить с цитированием
V_e_g_a

Регистрация: Jul 2007
Сообщений: 14
Все равно не понял как. Там вызов происходит по setInterval и если просто попорядку писать функции, то они начнутся практически одновременно. Можно ли как-то внутри функции присвоить переменной значение, а потом уже вне функции при проверке значения этой переменной запустить или не запустить другую функцию? Ну или что-то похожее как сделать?

Старый 10.07.2007, 02:26
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Флеш выполняет код последовательно, паралелльных потоков нет.
К примеру
Код:
function a () {
	trace ("enter a");
	for (i < 0; i < 1000000; i++) {
		k = Math.random ();
	}
	trace ("exit a");
}
function b () {
	trace ("b");
}
setInterval(a, 1);
setInterval(b, 1);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 11.07.2007, 01:41
V_e_g_a вне форума Посмотреть профиль Отправить личное сообщение для V_e_g_a Найти все сообщения от V_e_g_a
  № 5  
Ответить с цитированием
V_e_g_a

Регистрация: Jul 2007
Сообщений: 14
Попробуй выполнить этот код и увидишь, что функции выполняются параллельно (одновременно).

Код:
_root.createEmptyMovieClip ("m", 1);
m._x=0;
m._y=100;
m.lineStyle (0, 0xFF0000, 100);
m.beginFill (0xFF0000);
m.moveTo (0, 0);
m.lineTo (25, 0);
m.lineTo (25, 25);
m.lineTo (0, 25);
m.lineTo (0, 0);
m.endFill ();

_root.createEmptyMovieClip ("n", 2);
n._x=0;
n._y=200;
n.lineStyle (0, 0x33289B, 100);
n.beginFill (0x33289B);
n.moveTo (0, 0);
n.lineTo (25, 0);
n.lineTo (25, 25);
n.lineTo (0, 25);
n.lineTo (0, 0);
n.endFill ()


function p_1()
{
	m._x=m._x+5;
	if (m._x>300)
	{
		clearInterval(i_1)
	}
}

function p_2()
{
	n._x=n._x+5;
	if (n._x>300)
	{
		clearInterval(i_2)
	}
}

var i_1:Number=setInterval(p_1, 1);
var i_2:Number=setInterval(p_2, 1);

Старый 11.07.2007, 03:31
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Не вижу. Я вижу, что раз в 1 миллисекунду происходит вызов двух функций, сначала вызывается одна, потом другая. Но во время выполнения p_1, p_2 не работает и наоборот.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 11.07.2007, 11:39
V_e_g_a вне форума Посмотреть профиль Отправить личное сообщение для V_e_g_a Найти все сообщения от V_e_g_a
  № 7  
Ответить с цитированием
V_e_g_a

Регистрация: Jul 2007
Сообщений: 14
Ясно. А как сделать, что бы первая функция выполнялась n-ое кол-во раз до наступления условия, описанного ней, а только потом запускалась на выполнение вторая функция?

Старый 11.07.2007, 12:12
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
после clearInterval, запустить второй setInterval, а не сразу оба.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 11.07.2007, 18:56
V_e_g_a вне форума Посмотреть профиль Отправить личное сообщение для V_e_g_a Найти все сообщения от V_e_g_a
  № 9  
Ответить с цитированием
V_e_g_a

Регистрация: Jul 2007
Сообщений: 14
Ага, я уже и сам догадался. Не могу только теперь понять как остановить второй setInterval.

Старый 11.07.2007, 19:38
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код:
function p_1 () {
	m._x = m._x + 5;
	if (m._x > 300) {
		clearInterval (i_1);
		i_1 = setInterval (p_2, 1);
	}
}
function p_2 () {
	n._x = n._x + 5;
	if (n._x > 300) {
		clearInterval (i_1);
	}
}
var i_1:Number = setInterval (p_1, 1);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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