Показать сообщение отдельно
Старый 10.07.2011, 12:43
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 1  
Ответить с цитированием
Scorp2008

Регистрация: Dec 2009
Сообщений: 42
По умолчанию Пересечение линии и квадрата (для игры)

Всем привет еще раз
Вот раздобыл функцию пересечения линии и квадрата, собираюсь использовать я их для определения столкновения пули и врага в игре. До этого делал не совсем такие игры, а так как с математикой туго, то прошу совета, вот сама функция:
Код AS3:
		public static function InterLineSqr(p1, p2, p3, r) {
			var res = [];
			var x1 = p3.x-r;
			var x2 = p3.x+r;
			var y1 = p3.y-r;
			var y2 = p3.y+r;
			var dx = p1.x-p2.x;
			var dy = p1.y-p2.y;
			var dd = dx*dx+dy*dy;
			//
			//if ((p1.x>x1 && p1.x<x2) || (p2.x>x1 && p2.x<x2) || (p1.x<x1 && p2.x>x2) || (p2.x<x1 && p1.x>x2) || (p1.y>y1 && p1.y<y2) || (p2.y>y1 && p2.y<y2) || (p1.y<x1 && p2.y>y2) || (p2.y<x1 && p1.y>y2)) {
			//if ((p1.y>y1 && p1.y<y2) || (p2.y>y1 && p2.y<y2) || (p1.y<x1 && p2.y>y2) || (p2.y<x1 && p1.y>y2)) {
			var inter;
			inter = InterLineLine(p1, p2, {x:x1, y:y1}, {x:x1, y:y2});
			if (!(inter<0)) {
				res.push(inter);
			}
			inter = InterLineLine(p1, p2, {x:x1, y:y1}, {x:x2, y:y1});
			if (!(inter<0)) {
				res.push(inter);
			}
			inter = InterLineLine(p1, p2, {x:x2, y:y2}, {x:x2, y:y1});
			if (!(inter<0)) {
				res.push(inter);
			}
			inter = InterLineLine(p1, p2, {x:x2, y:y2}, {x:x1, y:y2});
			if (!(inter<0)) {
				res.push(inter);
			}
			//}   
			//}
			return res;
		}
насколько я понимаю p1 и p2 - это начало и конец линии (точки), а что такое p3 и r? И как её использовать если можно подробнее? Допустим имеется массив с врагами vragi и герой который стреляет, как я понимаю после нажатия кнопки мыши должны определяться точки линии (пуля типа) и проверяться со всем массивом не пересеклась ли линия с квадратом.. но вот как это в коде выглядит не совсем представляю. спасибо