Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сложные операции над клипами со вложенными циклами (http://www.flasher.ru/forum/showthread.php?t=167712)

Alex626 13.09.2011 00:30

Сложные операции над клипами со вложенными циклами
 
Здравствуйте!

Я никак не могу решить одну задачу, связанную с моей программой. У меня нарисована сетка, вроде шахматной доски, и на этой сетке в каждой ячейке может располагаться один объект (клип). Все клипы ставятся динамически, заполняя ячейки слева-направо, сверху-вниз. Позиция каждого клипа вычисляется по функции, в зависимости от порядкового номера. Клипы можно удалять с сетки.

Проблема заключается в следующем: нужна функция, находящая свободную ячейку на сетке, и возвращающая порядковый номер этой клетки.

Я делал так: брал 2 вложенных цикла. Первый вычисляет координаты ячейки, второй, вложенный, для этих координат перебирает все клипы на доске. Казалось всё просто. Но я не знаю, как вывести первое подходящее значение из под 2х циклов. Приведу свой идиотский код:

Код AS1/AS2:

getNextFreeSlot = function()
{
        var num=0;
        for(var i=0;i<=LastIndex;i++) //LastIndex - номер последнего добавленного элемента
        {
                var checkX = GetSlotPosX(i); //функция возвращает координату X
                var checkY = GetSlotPosY(i); //функция возвращает координату  Y
 
                for(var j=0;j<=LastIndex;j++)
                {
                        var num1 = 0;
                        var mc:MovieClip = _root["myslot"+j];//все клипы имеют название вроде "myslot5"
                        if(mc._x == checkX && mc._y == checkY)
                        {
                                num1++;
                        }
                        else
                        {
                                if(j==LastIndex &&num1==0)
                                {
                                        num = i;
                                        break;
                                }
                        }
                }//end for j
 
        } //end for i
        return num;
 
}

Основные вопросы - как выходить сразу из 2х циклов, как всё таки найти клетку, которой не соответствует ни одна координата.. 5 дней переписывал функцию с нуля, ничего не работало как надо, мозг вскипел.. Помогите пожалуйста!

lumaca 14.09.2011 12:46

Может быть проще создать массив со списком ячеек и искать по нему?

Alex626 14.09.2011 18:06

Да я в общем хотел работать без массивов, именно с объектами.

Я уже решил проблему - просто вместо вложенного цикла я сделал отдельную функцию, которая возвращает в цикл данные. Но всё равно хотелось бы узнать как работать со сложными структурами циклов, как завершать один из вложенных циклов.

Доктор Глюк 08.10.2011 21:44

да просто ж всё)
 
я обычно делаю так:

Код AS1/AS2:

for(i=0;i<100;i++){
        b=false;
        for(n=0;n<100;n++){
                if((i==50)&&(n==50)){
                        b=true;break
                }
        }
        if(b){break}
}
trace(i+":i  n:"+n)



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

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