Показать сообщение отдельно
Старый 26.09.2012, 18:23
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 7  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
итак, дано:
положение игрока {x0, y0}, положение соперника в момент "замаха" {x10, y10}, положение соперника после попытки "уворота" {x11, y11}
Math.atan2(y10-y0, x10-x0) даст нам угол поворота вектора, направленного от игрока к сопернику при замахе, лежащий в диапазоне -pi..pi.
Math.atan2(y11-y0, x11-x0) даст угол поворота вектора, направленного от игрока к сопернику после удара.

если разность этих двух углов меньше некоторого порогового значения (половины градусной меры "конуса"), то игрок попал, если больше - соперник увернулся. Принимая во внимание диапазон значений углов и тот факт, что углы около pi и -pi близки, проверку следует делать так:
Код AS3:
var delta:Number = Math.abs(Math.atan2(y10-y0, x10-x0) - Math.atan2(y11-y0, x11-x0));
if ((delta < treshold) || (delta > 2 * Math.PI - treshold))
{
      ...//игрок попал
} else {
      ...//игрок промахнулся
}


Последний раз редактировалось Silicium; 26.09.2012 в 19:23.