AS3 AI хиттестОбъект с собой? - PullRequest
0 голосов
/ 06 января 2012

Я создал таймер, который запускается каждую 1 секунду. Это код того, что происходит каждую секунду.

var Random_Value_X:Number = Math.ceil(Math.random() * 1500);
var Random_Value_Y:Number = Math.ceil(Math.random() * 2000);

var enemy:MovieClip = new AI(stage);
addChild(hero);
enemy.x = Random_Value_X;
enemy.y = Random_Value_Y;

Ok. Затем я получил класс под названием AI, где я сделал это, чтобы AI следовал за моим игроком. Дело в том, что мне нужно сделать hitTest, который проверяет, поражает ли ИИ другой ИИ? Есть ли способ, которым я могу дать каждому новому ИИ идентификатор? Как первый называется "AI1", а второй AI2 ", а затем я могу сделать код, который говорит как If (AT1.hitTestObject (AT2 || AT3))

Надеюсь, вы понимаете, что я пытаюсь объяснить! :)

Ответы [ 2 ]

0 голосов
/ 22 октября 2012

Учитывая, что вы находитесь в корне и ключевое слово "this" ссылается на root.Если вы создадите экземпляр класса «враг», то все его объекты будут иметь тип «враг».

import flash.events.Event;

// for every enemy you create, addlistener to it
// it will force to check itself with others
enemy.addEventListener(Event.ENTER_FRAME,checkHit);

// this function will be available to all enemies
// will inform itself that it is hiting enemy instance

function checkHit(e:Event){
// for e.g. object is moving in x direction
// to keep it simple so you can run it in new file
// with two object one is called enemy and other enemy1

// in your case its changing position
e.target.x += 1;


// loop with all children, break when hit someone   
for(var i:uint=0;i<this.numChildren;i++){
// in current situation e.target is also a child of root
// therefore avoid checking it
    if(e.target==this.getChildAt(i)) continue;//trace("Its me");

// if hit
// currently testing hit with all objects on stage
// you can change it to check specific type
    if(e.target.hitTestObject(this.getChildAt(i))){
        trace("I got hit by: "+this.getChildAt(i).toString());
        break;
    }
}

}
0 голосов
/ 06 января 2012

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

Я почти уверен, что вы не можете просто использовать логические илитакой метод hitTestObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...