Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Программный конус (область удара) (http://www.flasher.ru/forum/showthread.php?t=184736)

Tetraeon 26.09.2012 00:14

Программный конус (область удара)
 
Здравствуйте, кто нибудь уже сталкивался с созданием программного конуса? Интересно знать как такое можно сделать? Для чего он нужен, в игре в момент удара оружием ближнего боя непосредственно перед нанесением урона идет проверка на попадание врага в зону удара, чем и будит являться этот конус (вершина конуса исходит из персонажа). В голову приходит альтернативный вариант (только в теории) создание мувиклипа в виде конуса и применение к нему метода "определения четких границ", какой на ваш взгляд вариант лучше?

Tails 26.09.2012 00:21

Может быть треугольник? или вы в 3д делаете?
http://help.adobe.com/ru_RU/ActionSc...0204-7d55.html

Tetraeon 26.09.2012 08:36

Да, триугольник. Это вариант "определения четких границ" изображения и его пересечение с другим объектом я так понял (по одной строчке вопрос возник - В то же время, при проверке наложения прозрачных изображений на уровне пикселов прозрачными должны быть оба изображения.) Интересно будит ли идти проверка если одно изображение прозрачное, а другое нет?

Sweet07 26.09.2012 11:40

Проверяй через hitPoint для чётких границ.
Код AS3:

stage.addEventListener(MouseEvent.CLICK, goHit);
 
function goHit(e:MouseEvent):void {
if (enemy.hitTestPoint(hitTriangle.x,hitTriangle.y,true)) {die(enemy)}
//если много врагов, организуй массив и дави через цикл.
}
 
function die(enemy):*{
  enemy.gotoAndPlay("DIE");
  //удаление со сцены...
}

Как-то так в общем...

Silicium 26.09.2012 13:18

Зачем? Математика не помогает? известны координаты персонажа (вершины конуса)? Известны координаты цели? Если да, то ищете направление вектора и проверяете по углу, попадает ли он в заданные пределы или нет.

Tetraeon 26.09.2012 17:20

Silicium вот именно это и нужно, только вопрос в том как это должно выглядить? Можете помочь?

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

Silicium 26.09.2012 18:23

итак, дано:
положение игрока {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 {
      ...//игрок промахнулся
}


Hauts 26.09.2012 18:29

Цитата:

Math.atan2(x10-x0, y10-y0)
atan2 в обратном порядке принимает агрументы, сначала y, потом x.

Silicium 26.09.2012 19:22

да, разумеется.

Tetraeon 26.09.2012 21:00

Очень полезная информация, большое спасибо)


Часовой пояс GMT +4, время: 13:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.