Как раз и пробовал интегрировать код, из урока выше.
Вкратце про мой проект - он состоял из 3-х классов: описание игрока, описание врага, основной код игры - добавляющий на игровое поле игрока и врагов из массива по таймеру, а так же делал проверку столкновений через HitTestPoint. С ним все работал как надо, но результат не устроил меня, как я писал выше. Прикрепляю его сюда на всякий случай.

Код AS1/AS2:
// Главный код игры
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class AvoiderGame extends MovieClip
{
// ПЕРЕМЕННЫЕ
public var army:Array; //переменная для массива врагов,
public var avatar:Avatar; // Переменная для создания игрока
public var gameTimer:Timer; // переменная для таймера
private var _collisionTest:CollisionTest; //Переменная для теста столкновений- зависит от класса Теста столкновений
// Создаем ГЛАВНУЮ ФУНКЦИЮ ЦИКЛА ИГРЫ
public function AvoiderGame()
{
avatar = new Avatar(); // конкретный тип игрока, привязанный к классу описания игрока
addChild(avatar ); // добавляем на экран игрока
avatar.x = mouseX; // привязываем игрока к координатам мыши по Х и Y ниже
avatar.y = mouseY;
army = new Array(); //Создаем новый экземляр для класса массива врагов
var newEnemy = new Enemy(100,-15);
army.push(newEnemy); //Добавляем нового созданного врага в массив (army)
addChild(newEnemy); // добавляем на игровое поле врага из массива
gameTimer = new Timer( 25 ); // Создаем новый экземпляр - Таймер.
gameTimer.addEventListener(TimerEvent.TIMER, onTick); // Создаем слушатель события для таймера. Если оно произошло - событие первое в скобках, то запускается функция - второе в скобках.
gameTimer.start(); // запускаем таймер после запуска игры
}
//Создаем ФУНКЦИЮ ДЛЯ СОБЫТИЯ, ПРОИСХОДЯЩЕЕ ПОСЛЕ ИСТЕЧЕНИЯ ТАЙМЕРА - т.е. каждые 25 м/с
public function onTick(timerEvent:TimerEvent ):void
{
if(Math.random() < 0.2) // Уменьшаем частоту тиков (появления врагов) и делаем ее немного рандомной
{
var randomX:Number = Math.random() * 550; // Создаем переменную рандома, для появления врагов по оси Х, по всей длинне от 0 - 400
var newEnemy:Enemy = new Enemy(randomX,-15);
army.push(newEnemy);
addChild(newEnemy);
}
avatar.x = mouseX; // игрок двигается за мышкой по Х и Y ниже
avatar.y = mouseY;
for each (var enemy:Enemy in army) // Цикл проходит через все строчки в массиве и каждому объекту массива говорит что делать
{
// ГОВОРИМ ВСЕМ НОВЫМ ВРАГАМ ДВИГАТЬСЯ ВНИЗ
enemy.moveDownABit(); // используем описанную функцию в классе описания Врага. Применяется для каждого нового созданного врага.
if ( avatar.hitTestPoint(enemy.x+20,enemy.y+20,true)) // Проверка. Если произошло событие в скобках - аватар столкнулся с врагом, то происходит событие описанное ниеже в {}
{
trace("столкновение");
gameTimer.stop(); // Останавливаем таймер
}
}
}
}
}
Потом я наткнулся на урок (который вы представили выше по ссылке). Взял оттуда класс описания столкновений - добавил его к себе в проект.
После чего попытался запустить этот класс в своем проекте, через класс с основным кодом игры, но ничего не вышло, на стадии обращения к объектам из массива. Скорее всего я как-то не правильно к ним обращаюсь. Выдает ошибку 1120 - обращение к несуществующему свойству enemy.
Прикрепляю код, в котором я пытался запустить проверку BitmapData.hitTest()

Код AS1/AS2:
// Главный код игры
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class AvoiderGame extends MovieClip
{
// ПЕРЕМЕННЫЕ
public var army:Array; //переменная для массива врагов,
public var avatar:Avatar; // Переменная для создания игрока
public var gameTimer:Timer; // переменная для таймера
private var _collisionTest:CollisionTest; //Переменная для теста столкновений- зависит от класса Теста столкновений
// Создаем ГЛАВНУЮ ФУНКЦИЮ ЦИКЛА ИГРЫ
public function AvoiderGame()
{
avatar = new Avatar(); // конкретный тип игрока, привязанный к классу описания игрока
addChild(avatar ); // добавляем на экран игрока
avatar.x = mouseX; // привязываем игрока к координатам мыши по Х и Y ниже
avatar.y = mouseY;
army = new Array(); //Создаем новый экземляр для класса массива врагов
var newEnemy = new Enemy(100,-15);
army.push(newEnemy); //Добавляем нового созданного врага в массив (army)
addChild(newEnemy); // добавляем на игровое поле врага из массива
gameTimer = new Timer( 25 ); // Создаем новый экземпляр - Таймер.
gameTimer.addEventListener(TimerEvent.TIMER, onTick); // Создаем слушатель события для таймера. Если оно произошло - событие первое в скобках, то запускается функция - второе в скобках.
gameTimer.start(); // запускаем таймер после запуска игры
// create an new instance of the CollisionTest class
_collisionTest = new CollisionTest();
}
//Function that checks for all possible collisions
private function checkForCollisions():void
{
// test avatar vs enemy
if (_collisionTest.complex(avatar, enemy))
{
trace("столкновение");
gameTimer.stop(); // Останавливаем таймер
}
// test enemy vs avatar
if (_collisionTest.complex(enemy, avatar))
{
trace("столкновение");
gameTimer.stop(); // Останавливаем таймер
}
}
//Создаем ФУНКЦИЮ ДЛЯ СОБЫТИЯ, ПРОИСХОДЯЩЕЕ ПОСЛЕ ИСТЕЧЕНИЯ ТАЙМЕРА - т.е. каждые 25 м/с
public function onTick(timerEvent:TimerEvent ):void
{
if(Math.random() < 0.2) // Уменьшаем частоту тиков (появления врагов) и делаем ее немного рандомной
{
var randomX:Number = Math.random() * 550; // Создаем переменную рандома, для появления врагов по оси Х, по всей длинне от 0 - 400
var newEnemy:Enemy = new Enemy(randomX,-15);
army.push(newEnemy);
addChild(newEnemy);
}
avatar.x = mouseX; // игрок двигается за мышкой по Х и Y ниже
avatar.y = mouseY;
for each (var enemy:Enemy in army) // Цикл проходит через все строчки в массиве и каждому объекту массива говорит что делать
{
// ГОВОРИМ ВСЕМ НОВЫМ ВРАГАМ ДВИГАТЬСЯ ВНИЗ + Делаем проверку столкновений
enemy.moveDownABit(); // используем описанную функцию в классе описания Врага. Применяется для каждого нового созданного врага.
checkForCollisions();
}
}
}
}
На всякий случай прикрепляю проект со вторым вариантом кода
Game 3 - test fly.rar