Форум 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)
-   -   Проблемы с циклом for (http://www.flasher.ru/forum/showthread.php?t=183388)

stepa323 20.08.2012 16:32

Проблемы с циклом for
 
Подскажите, у меня цикл проверяет объекты на hitTest, но вместо всех 15 объектов, он проверяет только до первого хита. Как сделать что бы он проверил все 15?
Код AS1/AS2:

for(d=mob.length-15;d<=mob.length;d++){
                if(mob[d].hitTest(obj)){
 
                        mob[d].hp-=dmg;
 
                        }
                }
 
 
        }

Все элементы массива существуют!

mooncar 20.08.2012 17:31

Скобка одна лишняя фигурная.

stepa323 20.08.2012 17:34

случайно захватил, в полной версии там все норм!

mooncar 20.08.2012 17:36

А как вы определили, что "только до первого хита"?
Возможно, что цикл успевает отработать один раз и проходит только один hitTest.
Если у вас там процесс продолжается во времени, то и проверку надо делать непрерывную, например, в обработчике onEnterFrame.

Я к тому, что в предъявленном участке кода все верно, цикл исполняется нормальное количество раз - 15, если длина массива 15.
Правда в условии цикла стоило бы написать так:
Код AS1/AS2:

for(d = 0; d < mob.length; d++)


stepa323 20.08.2012 17:46

В общем у меня вызывается функция по нажатию:
Код AS1/AS2:

_root.skill="";
_root.magic=function(skill){
        if(skill!=""){
                switch(_root.skill){
                case "light":
                                _root.light=attachMovie("light","light",10000,{_x:_xmouse,_y:_ymouse});
                                matack(obj=mouse,dmg=10)
                                setInterval(removeMovieClip,2000,_root.light);break;
 
                                case "earth":
                                _root.earth=attachMovie("earth","earth",10001,{_x:_xmouse,_y:_ymouse});
                                matack(obj=_root.earth,dmg=20)
                                setInterval(removeMovieClip,4000,_root.earth);break;
 
                }
        }
}
 
 
function matack(obj,dmg){
sounds("thunder.wav");
        for(d=mob.length-15;d<=mob.length;d++){
                if(mob[d].hitTest(obj)){
 
                        mob[d].hp-=dmg;
                        hp=20/l_green[d+200].hp;
                        l_green[d+200]._width=mob[d].hp*hp;
                        if(mob[d].hp<=0)
                        {
                        blood[num_blood]=attachMovie("blood","blood"+num_blood,num_blood,{_x:mob[d]._x,_y:mob[d]._y});
                        setInterval(remove,5000,obj=blood[num_blood]);
                        num_blood+=1;
                        mob[d].gotoAndPlay(8);
                        mob[d].sp=0;
                        setTimeout(remove,400,mob[d]);
                        setTimeout(remove,400,l_green[d+200]);
                        setTimeout(remove,400,l_red[d+100]);
                        setTimeout(remove,600,_root.light);
                        _root.kill+=1;
                        _root.death+=1;
                        _global.kill_score+=1;
                        t_kill.text=kill;
                        add_gold(gold=5);
 
                        }
                }
 
 
        }
        _root.skill="";
 
 
}

Почему только до первого?
По нажатию клип охватывает несколько объектов, но засчитывает соприкосновение только с одним ближайшим по номеру записи в массиве объектом!

Добавлено через 16 часов 27 минут
Все нашел в чем ошибка, у меня obj заменялся другим значением в интервале
Код AS1/AS2:

setInterval(remove,5000,obj=blood[num_blood]);



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

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