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

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

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

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
По умолчанию проблема с циклами

Привет комрады.
Столкнулся с проблемой в циклах. Сейчас покажу код и коментариями опишу проблемку.


Код AS3:
		    // Создаем новый массив
			_mapMask = [];
			_mapMask.length = MAP_HEIGHT_MAX;		
			_f = MAP_HALF;
 
			for (var aw:int = 0; aw < 115; aw++)
			{  
                                           trace(aw); //Вот на этом моменте итераторы показывают  синромные   данные      тоесть идут в такт 00, 11 , 22, 33.
			     trace(aq)// 
			     f++
				_mapMask[aw] = [];
				_mapMask[aw].length = MAP_WIDTH_MAX;
				_f -= MCELL_HALF;
 
				for (var aq:int = 0; aq < f; aq++)
				     {
 
					     _mapMask[aw][aq] = STATE_CELL_FREE;
                                                                              //А вот уже тут показания расходятся aw = 57, aq=60 и тогдалее. 
						 trace(aw);
						 trace(aq);
//Не понятно почему так происходит, в начале первого цикла все итераторы равны нулю а вот уже во втором цикле начинаются с другого значения :( Может кто знает почему так происходит? Спасибо!
 
				     }


Последний раз редактировалось razerw; 29.06.2012 в 14:59.
Старый 29.06.2012, 14:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А с чего они должны быть одинаковыми? О_О
Цикл aw идет от ноля до 115. На каждое изменение aw (итерацию на +1) проигрывается весь цикл aq от ноля до (!) f, которая к тому же изменяется в каждой итерации aw. О какой синхронности речь?
__________________
Reality.getBounds(this);

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

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
все верно во втором цикле я слушаю aw и aq которые увеличиваются на 1 при каждой итерации. Так вот вся соль втом что самого первое значение которое мне выдает trace это 57 и 60, а по сути то должно быть 1,1 2,2 3,3 и тогдалее.
Ведь в самом начале первого цикла когда я слушал aw и aq команда trace мне показывала 1,1 2,2 3,3 и тогдалее.

Добавлено через 52 минуты
тоесть как я понимаю во второй цикл aw и aq не с 0 а с 57

Старый 29.06.2012, 16:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Один цикл ВЛОЖЕН в другой.
Когда aw==0, aq изменяется при каждой итерации вложенного цикла, так? То есть
aw=0, aq=0
aw=0, aq=1
aw=0, aq=2
и тд.
Затем цикл aq заканчивается и происходит итерация !внешнего" цикла aw, в котором цикл aq снова проходит от 0 до f:
aw=1, aq=0
aw=1, aq=1
aw=1, aq=2
Это понятно?
Но у Вас второй цикл ограничен переменной f, о которой в примере кода ничего не показано.
Эта переменная у Вас увеличивается с каждой итерацией цикла aw (f++). То есть длина цикла aq (количество его итераций) тоже все время увеличивается. Происходит ли потом обнуление f из кода не видно.
Цитата:
Ведь в самом начале первого цикла когда я слушал aw и aq команда trace мне показывала 1,1 2,2 3,3 и тогдалее.
Это потому, что f видимо изначально равна 0. И с каждым витком цикла aw она (f) увеличивается на 1, то есть тупо равна значению aw+1. Соответственно trace во внешнем цикле показывает aw и aq == f, так как f это последнее, максимальное значение aq после завершения цикла aq. Ведь f это и есть его граница, и она равна текущему aw+1. Когда будет следующая итерация aw (aw+1), f во время трейса еще не была увеличена (f++), и соответственно они равны. И aq равна f. И стало быть aq (старое) == aw (новое).
Но внутри цикла aq трейс естественно будет показывать текущее значение aw (оно одно на всем протяжении цикла aq) и разные значения aq, от ноля до f (которое равно aw+1) - 1.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 29.06.2012 в 16:18.
Старый 29.06.2012, 18:06
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 5  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
Я немного по иначе представляю себе сложившуюся картину.

Начинается цикл aw
aw=0 и увеличивается на 1
//в представленном коде видно переменную f++ которая находится сразу после тейсов в первомцикле aw
f++ тоже ровна 0 и тоже увеличивается на единицу.
//далее запускается цикл aq у которого условие f тоесть цикл отработает один рас, и после чего выйдит во внешний цикл aw. И картина будет повторяться и f будет увеличиваться тем самым задавая ритм внутренниму цикру aq.

Старый 29.06.2012, 18:34
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Чем пытаться придумать, как работает цикл, может проще прочитать или написать нормальных трейсов?
Цитата:
aw=0 и увеличивается на 1
С какой стати? В первом витке она так и останется нолем. А вот f да, увеличится на 1 и цикл aq в первом (нулевом, если хотите) витке aw будет выглядеть так:
Код AS3:
for (var aq:int = 0; aq < 1; aq++)
{
	//// здесь aw=0, f=1, aq=0
}
//// здесь aw=0, f=1, aq=1
Пропишите нормальные человекочитаемые трейсы, чтобы знать что происходит
Код AS3:
var f:uint = 0;
for (var aw:int = 0; aw < 5; aw++)
{  
	trace("------------------------------------");
	trace("Новый виток aw");
	trace("aw="+aw, ", aq="+aq, ", f="+f);
	f++;
	for (var aq:int = 0; aq < f; aq++)
	{	
		trace("---------------");
		trace("aw="+aw, ", aq="+aq, ", f="+f);
	}
	trace("после цикла aq: aw="+aw, ", aq="+aq, ", f="+f);
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 29.06.2012 в 19:08.
Старый 01.07.2012, 18:59
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 7  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
вот код

Код AS3:
			for (var aw:int = 0; aw < 115; aw++)
			{  
			    trace(aw); //вот здесь трейсы показывают 00, 10, 21, 32, 43, 54, 64.
			    trace(aq);
			    f++
				_mapMask[aw] = [];
				_mapMask[aw].length = MAP_WIDTH_MAX;
				_f -= MCELL_HALF;
 
				for (var aq:int = 0; aq < aw; aq++)
				     {
					     // Задаем ячеке свободное состояние
					     _mapMask[aw][aq] = STATE_CELL_FREE;
						trace(aw);//а вот здесь трейсы показывают 12 56, 16 56, 17 56. // почему так? вочему трейсы не начинаются так же как и в первом цикле 00, 10, 21, 32, 43, 54, 64.
						trace(aq);
 
				     }

Старый 01.07.2012, 23:51
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
По Вашему коду меня пугает, что трейсы идут 00, 10, 21, а не 0, 1, 2, 3, к примеру.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А то, что условие цикла aq < aw, а трейс в этом цикле выводит aw=12, aq=56, тебя не смущает?)))
Я просто не знаю, как реагировать на эту... информацию от автора...
__________________
Reality.getBounds(this);

Старый 02.07.2012, 10:31
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 10  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
я же и пишу чт отрейсы разное показывают ,
посмотрите на код ниже.

Код AS3:
			for (var aw:int = 0; aw < 115; aw++)
			{  
			    trace(aw); //вот здесь трейсы показывают [0] [0], [1] [0], [2] [1], [3] [2], [4] [3], [5] [4], [6] [4].
			    trace(aq);
			    f++
				_mapMask[aw] = [];
				_mapMask[aw].length = MAP_WIDTH_MAX;
				_f -= MCELL_HALF;
 
				for (var aq:int = 0; aq < aw; aq++)
				     {
					     // Задаем ячеке свободное состояние
					     _mapMask[aw][aq] = STATE_CELL_FREE;
						trace(aw);//а вот здесь трейсы показывают [12] [56], [16] [56], [17] [56]. // почему так? вочему трейсы не начинаются так же как и в первом цикле [0] [0], [1] [0], [2] [1], [3] [2], [4] [3], [5] [4], [6] [4].
						trace(aq);
 
				     }
в первом цикле трейся показывают правильную последовательность, а во втором начинают показывать "трейся" не с 0 и даже не с 1 а
aw=15, aq=56
aw=16, aq=56
aw=17, aq=56

вот почему так происходит? почему трейсы из внутреннего цикла начинают показывать не с 0


Последний раз редактировалось razerw; 02.07.2012 в 10:48.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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