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

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

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

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
По умолчанию "Последний" объект активации

Есть вот такая рекурсивная функция (находит все кубики фигуры)

Код:
function func(i, j) {
	//1
	if (pu["kubik"+(i+1)+j] && !pu["proverka"+(i+1)+j]) {
		pu.attachMovie("proverka", "proverka"+(i+1)+j, numb++, {_x:(i+1)*20, _y:j*20});
		func(i+1, j);
	} else {
		z++;
	}
	//2
	if (pu["kubik"+i+(j+1)] && !pu["proverka"+i+(j+1)]) {
		mas_proverka.push([i, j]);
		func(i, j+1);
	} else {
		z++;
	}
	//3
	if (pu["kubik"+(i-1)+j] && !pu["proverka"+(i-1)+j]) {
		pu.attachMovie("proverka", "proverka"+(i-1)+j, numb++, {_x:(i-1)*20, _y:j*20});
		func(i-1, j);
	} else {
		z++;
	}
	//4
	if (pu["kubik"+i+(j-1)] && !pu["proverka"+i+(j-1)]) {
		pu.attachMovie("proverka", "proverka"+i+(j-1), numb++, {_x:i*20, _y:(j-1)*20});
		func(i, j-1);
	} else {
		z++;
	}
	//в коде ниже вся проблема
	if (z == 4) {
		trace("Вроде все...");
		z = 0;
	}
}

Она работает все нормально, но тут предо мной стала задача: найти момент когда последний объект активации выполняется и функция «останавливается». Так как я попытался заделать – плохо! Т.к. условий может уже и нет для вызова func, но в стеке наверное что-то еще осталось…

Старый 21.06.2006, 14:24
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Хм, как ты думаешь, названия переменных "pu", "numb", "func" кому-нибудь о чём-нибудь говорят, кроме создателя?

Старый 21.06.2006, 14:58
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 3  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Это к делу не относится... так левые мувики....
Суть вопроса я выделил жирным... а это просто пример... (можно и без него)...

Старый 21.06.2006, 15:06
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
i и j максимальные ты же знаешь... Ну вот когда будут максимальными, значит кончилось....

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

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
МЛЯ!!!! Там нет никокого цикла!!! Это рекурсия!!! i и j меняются как им хочется (надо).

Старый 21.06.2006, 15:20
Cvazimodo вне форума Посмотреть профиль Отправить личное сообщение для Cvazimodo Найти все сообщения от Cvazimodo
  № 6  
Ответить с цитированием
Cvazimodo
[+1 10.07.06]

Регистрация: Jan 2003
Сообщений: 365
Когда заходишь в функцию рекурсию увеличивай на 1 какой-нить счетчик, когда выходишь - уменьшай. Когда этот счетчик снова будет = 0, значит всё кончилось (если правильно вообще понял суть алгоритма).

Старый 21.06.2006, 15:21
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Скрипун
МЛЯ!!!! Там нет никокого цикла!!! Это рекурсия!!! i и j меняются как им хочется (надо).
Тогда ставь в начале var z = 0.

Старый 21.06.2006, 15:27
Cvazimodo вне форума Посмотреть профиль Отправить личное сообщение для Cvazimodo Найти все сообщения от Cvazimodo
  № 8  
Ответить с цитированием
Cvazimodo
[+1 10.07.06]

Регистрация: Jan 2003
Сообщений: 365
Код:
var countRecurse:Number = 0;
function func(i, j) {
        countRecurse++;
	//1
	if (pu["kubik"+(i+1)+j] && !pu["proverka"+(i+1)+j]) {
		pu.attachMovie("proverka", "proverka"+(i+1)+j, numb++, {_x:(i+1)*20, _y:j*20});
		func(i+1, j);
	} else {
		z++;
	}
	//2
	if (pu["kubik"+i+(j+1)] && !pu["proverka"+i+(j+1)]) {
		mas_proverka.push([i, j]);
		func(i, j+1);
	} else {
		z++;
	}
	//3
	if (pu["kubik"+(i-1)+j] && !pu["proverka"+(i-1)+j]) {
		pu.attachMovie("proverka", "proverka"+(i-1)+j, numb++, {_x:(i-1)*20, _y:j*20});
		func(i-1, j);
	} else {
		z++;
	}
	//4
	if (pu["kubik"+i+(j-1)] && !pu["proverka"+i+(j-1)]) {
		pu.attachMovie("proverka", "proverka"+i+(j-1), numb++, {_x:i*20, _y:(j-1)*20});
		func(i, j-1);
	} else {
		z++;
	}

        countRecurse--; 
	//в коде ниже вся проблема
	if (z == 4 && countRecurse == 0) {
		trace("Вроде все...");
		z = 0;
	}
}

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

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

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


 


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


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