Как выполнить хит-тест для всех экземпляров мувиклипа - ACTIONSCRIPT 2 - PullRequest
0 голосов
/ 18 февраля 2012

Я играю в оборону башни и довел ее до такой степени, что мои башни стреляют пулями через определенные промежутки времени.Но мне нужно иметь возможность удалить мувиклипы.Например, если башня стреляет в пулю, она создает копию мувиклипа, нацеленного на дубликат конкретного врага.Однако я не могу понять, как настроить hitTest.Есть ли какой-нибудь способ получить хит-тест для проверки всех дочерних видеоклипов, дублированных из определенного объекта?

РЕДАКТИРОВАТЬ: я добавил эту функцию, которая должна выполняться каждую секунду.Но по какой-то причине он не подтверждает попадания.

function checkHits(){//checks for hits between enemies and bullets
for (var zz = 0; zz < bulletArray.length; zz += 1)//checks for each bullet
{
    for(var yy=0;yy<enemiesArray.length;yy+=1){//checks for each enemy
        trace("enemies loc"+yy+":"+enemiesArray[yy]);
        trace("bullet loc"+zz+":"+bulletArray[zz]);
        if(bulletArray[zz].hitTest(enemiesArray[yy])){
            trace("HIT!");
           removeMovieClip(bulletArray[zz]);
           removeMovieClip(enemiesArray[yy]);
           bulletArray.splice(zz,1);
           bulletArray.splice(yy,1);
           }//end if
    }//end for
}//end for

}

function dupeCircle()
{
//trace("Dupe circle initiated");
duplicateMovieClip(circlebase, "_root.circle" + circleCount, circleCount);
bulletArray.push("circle" + circleCount);
trace(bulletArray[0]._width);
circleCount += 1;
}

Это код для объекта, который добавляет круги.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2012

Вы удаляете 2 раза из bulletArray:

       bulletArray.splice(zz,1);
       bulletArray.splice(yy,1);

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

0 голосов
/ 18 февраля 2012

Вы можете сохранить массив со всеми мувиклипами, которые вы хотите проверить в нем, а затем перебрать этот массив и проверить каждый из них.Поэтому, когда вы добавляете один на экран, добавляйте его в этот массив.Затем, когда вы хотите проверить, протестируйте всех в этом массиве.Если вы хотите удалить его, удалите его из массива и экрана.

РЕДАКТИРОВАТЬ

Вот что я хотел бы сделать вв этом случае ...

function dupeCircle() 
{    
    //trace("Dupe circle initiated"); 
    bulletArray.push(duplicateMovieClip(circlebase, "_root.circle" + circleCount, circleCount));
    circleCount += 1; 
 }

По сути, просто сохраните фактический мувиклип в массиве, и тогда вы сможете делать то, что пытались сделать с bulletArray[index].hitTest, и, надеюсь, это сработает.(Сделайте то же самое, где вы храните фактический мувиклип и для другого массива)

...