Линия обзора AS3 без использования поражающего объекта.

Я работаю над игровым проектом, и я работаю над ИИ в игре. Я хочу, чтобы вражеские объекты начали целиться и стрелять в игрока, когда они находятся в поле зрения врага, и я наткнулся на эту статью о том, как это сделать: http://www.emanueleferonato.com/29/04/2007/create-a-flash-game-like-security-part-2/

мой вопрос: можете ли вы сделать то же самое, не используя реальную линию? можете ли вы, например, использовать контрольную точку попадания и в основном определить линию? или какой-либо другой способ сделать это, фактически не помещая объект на сцену.

Я пытаюсь сделать все как можно более эффективным и не хочу использовать этот подход, если это возможно. если у вас есть совет, код или ссылки на полезный ресурс, я был бы очень признателен!


person AlexW.H.B.    schedule 01.10.2011    source источник


Ответы (1)


Просто используйте расчеты, а не линию

Это важный код

dist_x = _root.hero._x-_x;
dist_y = _root.hero._y-_y;
dist = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
angle = Math.atan(dist_y/dist_x)/(Math.PI/180);
if (dist_x<0) {
    angle += 180;
}
if (dist_x>=0 && dist_y<0) {
    angle += 360;
}
wall_collision = 0;
for (x=1; x<=dist; x++) {
    point_x = _x+x*Math.cos(angle*Math.PI/180);
    point_y = _y+x*Math.sin(angle*Math.PI/180);
    if (_root.wall.hitTest(point_x, point_y, true)) {
        wall_collision = 100;
        break;
    }
}

если wall_collision = 100, игрок находится в поле зрения копа. Я бы просто использовал логическое значение для этого.

person Creynders    schedule 01.10.2011
comment
классно спасибо! это очень помогает. :) и я должен был бы согласиться с вами на логическое значение. не знаю, почему так написано. - person AlexW.H.B.; 01.10.2011
comment
он использует его как альфа-значение для линии, вот почему. Кстати, вы знаете, что это написано в AS2? - person Creynders; 01.10.2011
comment
о, вот что это. :) и я знал, что это AS2 по всем символам подчеркивания перед свойствами. Я пишу свою игру в as3, хотя. подойдет ли самый лучший метод для этой цели? Я знаю, что новый хиттест проверяет только ограничивающие рамки. - person AlexW.H.B.; 02.10.2011
comment
О, я только что внимательно посмотрел на код, который на самом деле является очень интересным способом решения этой проблемы. Спасибо. :) - person AlexW.H.B.; 03.10.2011