Java 2d Направление съемки с помощью мыши

Моя проблема может быть простой. Я провел большую часть сегодняшнего дня, думая об алгоритме (скорее всего, это будет пара операторов if), который будет определять направление, в котором указывает мышь, и стрелять в этом направлении. Я уже проверил пули, чтобы убедиться, что они стреляют в определенном направлении.

как мне рассчитать, находится ли мышь слева от игрока, справа, сверху, снизу или по углам игрока?

Решено: спасибо за всю вашу помощь, но после дня размышлений я сам придумал способ. Что я сделал, так это использовал операторы if, чтобы определить, когда я нажимаю кнопку мыши, будет ли она сталкиваться с верхней частью игрока, нижней, правой, левой или углами. Во всяком случае, вот мой код. P.S. Я использовал переменную x1 как mousex, y1 как mousey, x как playerx и y как игрока y. Единственная другая переменная, которая у меня есть, это dx и dy, но вы должны знать, что они делают.

//top
if (x1 > x && x1 < x + 40 && y1 > y - 250 && y1 < y){
        dy = -1;
    dx = 0;
}
//right
if (x1 > x + 40 && x1 < x + 250 && y1 > y && y1 < y + 40){
    dx = 1;
    dy = 0;
}
//bottom
if (x1 > x && x1 < x + 40 && y1 > y+40 && y1 < y+250){
    dy = 1;
    dx = 0;
}
//left
if (x1 < x && x1 > x - 250 && y1 > y && y1 < y + 40){
    dx = -1;
    dy = 0;
}
//top right corner
if (x1 > x + 40 && x1 < x + 250 && y1 > y - 250 && y1 < y){
    dx = 1;
    dy = -1;
}
//top left corner
if (x1 < x && x1 > x - 250 && y1 > y - 250 && y1 < y){
    dx = -1;
    dy = -1;
}
//bottom right corner
if (x1 > x + 40 && x1 < x + 250 && y1 > y + 40 && y1 < y + 250){
    dx = 1;
    dy = 1;
}
//bottom left corner
if (x1 < x && x1 > x - 250 && y1 > y + 40 && y1 < y + 250){
    dx = -1;
    dy = 1;
} 

person 36redsoxfan    schedule 11.05.2012    source источник
comment
Каков ваш актуальный вопрос? Если вы знаете, где находится мышь (координаты x и y), и вы знаете, где находится пистолет, простая геометрия и математика должны определить угол или скорость x и y для пули.   -  person DGH    schedule 12.05.2012
comment
Мой фактический вопрос заключается в том, как я могу вычислить, находится ли мышь на левой стороне игрока, справа, сверху, снизу или по углам игрока.   -  person 36redsoxfan    schedule 12.05.2012
comment
Простая алгебра ответит вам на этот вопрос — вам даже не нужна тригонометрия, если все, на что вы смотрите, — это общее направление. Что вы пробовали и где в вашем коде вы застряли?   -  person Hovercraft Full Of Eels    schedule 12.05.2012
comment
ну... Я делал пробы и ошибки, поэтому у меня действительно нет кода, так как я удалял его много раз, но я знаю, где я ошибаюсь. Я могу заставить работать углы, но я знаю, как сделать стороны, так как некоторые свойства угловых выражений if соответствуют свойствам сторон игрока.   -  person 36redsoxfan    schedule 12.05.2012
comment
но я знаю, где ошибаюсь. Чтобы быстрее получить помощь, опубликуйте один SSCCE вашей лучшей попытки. В нынешнем виде я рассматриваю возможность голосования, чтобы закрыть это как «не настоящий вопрос».   -  person Andrew Thompson    schedule 12.05.2012


Ответы (1)


Вы должны реализовать прослушиватель действий мыши, если вы хотите реализовать стрельбу, когда кнопка мыши нажата.

Простое уравнение линии сделает это.

Решение: Получить начальную точку (x0,y0) при нажатии кнопки. Пока мышь движется при нажатии, получите (x1,y1) точку, в которой движется мышь (это постоянно меняется) - получите уравнение линии - (у вас есть 2 точки, поэтому найдите slope, а затем используйте одну точку, чтобы получить equation of the line).

Теперь направление выстрела пули — perpendicular to this line through (x1,y1). Таким образом, вы можете найти уравнение этой перпендикулярной линии, когда известно другое уравнение. Теперь, чтобы узнать, нужно ли стрелять вверх или вниз, нужно выяснить, в какую сторону направлено оружие (направление должно храниться в переменной).

После всего этого, когда мышь все еще движется, старая точка теперь будет (x1,y1), а новая точка будет (x2,y2), и вы продолжаете вносить эти изменения.

person Subs    schedule 11.05.2012
comment
Что ж, если вы хотите знать, как найти пистолет, выровненный вверх (N), вниз (S), вправо (E) или влево (W) — сначала в начальной позиции отобразите пистолет в какой-то постоянной позиции, когда игра начинается (скажем, N) , затем, когда игрок прокручивает (или вы можете реализовать с помощью некоторых кнопок или клавиш), вы можете изменить направление на NE или E или SE или S и т. д. или под любым углом (в градусах) и сохранить информацию об угле в переменной - person Subs; 12.05.2012