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

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

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

Регистрация: Jul 2010
Сообщений: 63
По умолчанию Странная проблема с циклом for

Пишу прогу, состоящую из перетаскиваемых мышкой прямоугольников (класс Block) и 5 зон.
У каждой зоны есть массив BlockArray, в котором содержатся блоки. C помощью мышки, можно перетащить блок в другую зону, и он удалится из массива первой (остальные сдвинутся на пустое место) и добавится в конец массива второй.

У класса Block есть переменные vps (зона, в которую он вписан в данный момент) и v_num (его позиция в массиве этой зоны). У класса Zone - переменная Numb (количесво блоков в зоне + 1).

Так вот, задумал я написать функцию, которая удаляет все блоки, и грузит новые, заранее сохраненные в Xml.

До этого были функции DeleteBlock(block) (удаляющая 1 блок) и LoadBlock() (грузящая все блоки из файла).

Код AS3:
public function DeleteBlock(block) {
 
	Zones[block.vps].BlockArray[block.v_num] = 0
	trace("vps"+block.vps)
	Sdvig(Zones[block.vps].BlockArray, block.v_num, Zones[block.vps].Numb)
	trace("Numb"+Zones[block.vps].Numb)
	Zones[block.vps].Numb-=1
 
 
	Blocks[block.id] = 0
	Sdvig(Blocks, block.id, BlockCount)
	trace("BlockCount"+BlockCount)
	BlockCount-=1
 
	block.removeEventListener(MouseEvent.MOUSE_DOWN, block.StartDrag)
 
	try {RootClass.removeChild(block)}
	catch(err) {RootClass.addChildAt(block, 0)}
 
 
}
Собственно функция удаления и загрузки выглядит так: (BlockCount - количество блоков в масиве Blocks + 1)

Код AS3:
public function LoadScan() {
 
		trace("BLC"+BlockCount)
 
	for (var j = 1; j < BlockCount; j++) {
 
		DeleteBlock(Blocks[j])
		trace("джей"+j)
 
	}
 
		trace("LoadScan")
		trace(Zones[1].Numb)
		trace(Zones[2].Numb)
		trace(Zones[3].Numb)
		trace(Zones[4].Numb)
		trace(Zones[5].Numb)
		trace(Zones[2].BlockArray)
		trace(Zones[3].BlockArray)
		trace(Blocks)
		trace(" ")
 
	LoadBlock()
}
Но код при выполнении 2-х LoadScan подряд выдает такой вывод:

Попытка запуска и подключения к проигрывателю по URL-адресу E:/Паша/SUV/SUV-app.xml
[SWF] SUV.swf - 10783 байт после декомпрессии
BLC2
vps3
Numb2
BlockCount2
джей1

LoadScan
1
1
1
1
1
,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

BLC5
vps2
Numb2
BlockCount5
джей1
vps4
Numb2
BlockCount4
джей2

LoadScan
1
1
2
1
2
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,[object Block],,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,[object Block],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

TypeError: Error #1010: A term is undefined and has no properties.
at Zone/Vizualize()[E:\Паша\SUV\Zone.as:52]
at SUV/TotalVizualize()[E:\Паша\SUV\SUV.as:413]
at SUV/LoadBlock()[E:\Паша\SUV\SUV.as:394]
at SUV/LoadScan()[E:\Паша\SUV\SUV.as:364]
at SUV/$construct/MultikeyAction()

Но, как видно по выводу, BLC5 говорит о том, что BlockCount = 5, но там присутствует только джей1 и джей2, т.е. цикл for (j = 1; J < 5; j++) выполнился только 2 раза!

Подскажите, пожалуйста, где может быть ошибка. И прошу не ругать за нерациональный и не красивый код, я только учусь. И огромное спасибо, что прочитали мой "эпос")

Старый 20.07.2011, 19:38
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
BlockCount5
...
BlockCount4
Правильно. BlockCount менятся в DeleteBlock. И на следующей итерации (третьей) j == 3, и условие продолжения j < BlockCount не выполняется (BlockCount == 3)

Старый 20.07.2011, 19:50
cucumber007 вне форума Посмотреть профиль Отправить личное сообщение для cucumber007 Найти все сообщения от cucumber007
  № 3  
Ответить с цитированием
cucumber007

Регистрация: Jul 2010
Сообщений: 63
ох, спасибо, ты меня спас)

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

Теги
Action script 3.0 , ошибка
Опции темы
Опции просмотра

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

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


 


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


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