AS3 HitTest между классами?

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

Ok. На основной временной шкале я говорю так.

ТАЙМЕР, КОТОРЫЙ ДОБАВЛЯЕТ ВРАГА КАЖДУЮ СЕКУНДУ!

var Enemy:MovieClip = new Enemy();
addChild(Enemy);
Enemy.x = 200;
Enemy.y = 200;

ЕЩЕ ОДИН РАЗ, КОТОРЫЙ ДОБАВЛЯЕТ ПУЛИ КАЖДЫЕ 0,5 СЕКУНДЫ!

var Bullet:MovieClip = new Bullet();
addChild(Enemy);
Bullet.x = 400;
Bullet.y = 400;

А затем внутри Enemy.as и Bullet.as у меня есть код, который говорит, как он должен двигаться, с какой скоростью и т. д. Но как мне сделать проверку на попадание между ними? Я пытался сделать это внутри класса врага или пули, как это.

Итак, я спрашиваю, как я могу проверить два класса друг против друга? Или объект класса?


person user1133188    schedule 07.02.2012    source источник
comment
Flixel (www.flixel.org) — отличный инструмент для начинающих программировать игры на Flash. Существует множество руководств, и вы можете быстрее собрать работающую игру по сравнению с работой с нуля. Я настоятельно рекомендую использовать библиотеку/фреймворк для вашей первой игры, вы многому научитесь, продолжая создавать что-то классное.   -  person Martin    schedule 08.02.2012


Ответы (1)


Вам нужно сохранить ссылку на этих врагов и пули. Не делайте var вражеский:MovieClip = новый враг(); вместо этого сделайте это.

var myEnemyList:Array = new Array();
var myBulletList:Array = new Array();


function Init():void{
    addEventListener(Event.OnEnterFrame, Update);
}

function Update(){
    //this will create a bullet and an enemy at every frame

    //Create a new enemy
    var enemy:Enemy = new Enemy();
    myEnemyList.push(enemy); //add enemy to the array

    //Create a new bullet
    var enemy:Bullet = new Bullet();
    myBulletlist.push(bullet);


    //Update the bullets
    for(var i:int=0; i < myBulletlist.length; i++){
        myBulletlist[i].Update(); //you must implement this function inside your class bullet
    }

    //Update the enemies
    for(var i:int=0; i < myEnemyList.length; i++){
        myEnemyListt[i].Update(); //you must implement this function inside your class enemy
    }

    CheckForCollision();
}


function CheckForCollision(){
    for(var i:int=0; i < myEnemyList.length; i++){
        for(var j:int =0; j < myBulletList.length; j++){
            if( myEnemyList[i].collidesWith(myBulletList[j]) ){
                //Collision
            }
        }
    }
}

Кстати, не пытайтесь скомпилировать этот псевдокод. Я отвечу на ваши вопросы. По этому поводу также есть множество руководств, небольшой поиск в Google поможет вам получить более конкретный код.

person Dr.Denis McCracleJizz    schedule 07.02.2012
comment
Привет, спасибо за комментарий. Но я порождаю (создаю) своих врагов и пули на основной временной шкале. А еще у меня есть Enemy.as и Bullet.as, где я пишу код, как они должны двигаться и на что бить. Это типа моя проблема? Я не совсем понимаю, как кодировать с помощью классов. Но на самом деле это последнее, что мне нужно сделать в моей игре. Решение, о котором я подумал, но не могу сделать сам, заключается в том, что если я на основной временной шкале порождаю пули и превращаю их в массив, а затем в Enemy.as ссылаюсь на этот массив на основной временной шкале? Извините за плохой английский и, возможно, неконструктивный пост ... ха :) - person user1133188; 08.02.2012
comment
если они появляются на основной временной шкале, вы можете добавить событие addEventListener(Event.AddedToStage, AddToArray); вы можете использовать это, чтобы добавить вновь созданного врага/пулю в список - person Dr.Denis McCracleJizz; 08.02.2012
comment
Спасибо! Я не делал именно этого, но я использовал массивы, и это прекрасно работает! - person user1133188; 08.02.2012