Я пытаюсь передать экземпляр одного класса в другой. Возникли трудности - PullRequest
0 голосов
/ 17 февраля 2010

Итак, я сейчас имею дело с двумя классами: классом Laser (который соответствует мувиклипу) и классом Enemy. Класс противника связан с несколькими вражескими клипами. Когда он будет создан, он будет искать столкновения с созданием класса лазера. Вот где у меня проблемы. Я хочу разобраться с тем, чтобы при создании экземпляра класса Enemy класс Laser мог быть передан в него для указанных целей обнаружения столкновений. Я не могу найти способ сделать это.

Проблема в том, что классу Laser необходим конкретный экземпляр класса Enemy, в который он может перейти. И поскольку я имею дело с несколькими классами Enemy одновременно, очень важно, чтобы класс Laser мог перейти в правильный класс.

Если ничего из этого не имеет смысла, просто прокомментируйте, и я постараюсь уточнить еще.

Ответы [ 3 ]

1 голос
/ 17 февраля 2010

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

Тогда в вашей петле столкновения вы получите:

//call this function on every ENTER_FRAME
public function updateCollisions():void

//TODO other collisions

   for (var i:int = 0; i < laserArray.length;i++)
   {
         for (var k:int = 0; k < enemiesArray.length;k++)
         {
              if (laser[i].hitTestObject(enemiesArray[k]))
              {
               enemiesArray[k].health-=10;
              }

         }

    }
}

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

1 голос
/ 17 февраля 2010

Если я правильно понимаю проблему, у вас есть два разных класса «Лазер» (L) и «Враг» (E), и вы хотите передать экземпляр «L» в соответствующих экземплярах «E». Теперь, как вы сказали

'Проблема в том, что классу Laser необходим конкретный экземпляр класса Enemy, в который он должен перейти. И поскольку я имею дело с несколькими классами Enemy одновременно, очень важно, чтобы класс Laser мог перейти в правильный класс ».

Значит ли это, что L - это основной класс, который может обращаться к массиву созданных экземпляров объектов Enemy, и теперь вы хотите, чтобы L был каким-то образом видимым / доступным в этих объектах Enemy. Для таких случаев вы можете просто иметь переменную типа E, которая может быть создана с помощью функции setter. Например,

=============================================== ===============================

// основной класс лазера

Функция process (): void

{

var myEnemy: E = getDesiredEnemyInstance ();

myEnemy.laser = this;

}

// Внутри класса E

// некоторый код частный var _laser: Laser;

// некоторый код

лазер общего назначения (l: Laser): void

{

this._laser = l;

}

=============================================== ==============================

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

Желания, Ashine

0 голосов
/ 17 февраля 2010

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

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