Попытка переместить объект из фиксированной начальной точки в координаты щелчка мышью - PullRequest
2 голосов
/ 09 декабря 2011

Я пытаюсь заставить прямоугольник переместиться из фиксированного местоположения в точку щелчка в моей игре. У меня это работает до такой степени, что я получаю хорошие координаты из методов e.getX и e.getY в классе слушателя мыши. У меня также есть прямоугольник, перемещающийся по прямым линиям в сторону или вверх и вниз, увеличивая и уменьшая значения positionX и Y, но мне нужен способ переместить его в любую точку, на которой я щелкаю, в основном мне нужно установить изменение в x и у. То, о чем я думал, - это вычислить подъем и прогон линии от точек щелчка и начальной точки, а затем установить значения x и y для подъема и пробега. Если я делаю это таким образом, мне нужен способ уменьшить рост и понизить значения до минимальных значений, чтобы они плавно двигались. Или, если есть способ, которым я не думаю об этом, вы можете предложить любые рекомендации, которые будут полезны.

1 Ответ

5 голосов
/ 09 декабря 2011

Как вы рисуете в данный момент? Ниже приведен метод стрельбы из пуль в небольшой игре, которую я сделал / действительно должен когда-нибудь закончить.

Это далеко не весь код, который вам понадобится, и в некоторых местах есть лучшие способы сделать что-то (что, я уверен, люди начнут рассказывать мне в разделе комментариев после :)), но это должно дать у вас основа для работы.

Единственное, чего не хватает в этом, это регулирования скорости, с которой он перерисовывается (fps), извините, но я не могу вспомнить простой способ сделать это прямо сейчас (нужно вернуться к моей настоящей работе!) Надеюсь, это поможет .

Баффоны этого будут примерно такими:

//these set out the current position of your rectangle
double recX, reYy, recH, recW;

//this gives something to manage speed
int speed;

public void paintComponent(Graphics g) {
    g.drawRectangle(recX,rexY,recH,recW);
}

//here we work out the movement
public void clickedScreen(double x, double y){
    double newX = x;
    double newY = y;
    //calculate the speed to move at
    vX = newX - recX;
    vY = newY - recY;
    //get the distance
    length = Math.sqrt((v1*v1)+(v2*v2));
    //make it a unit vector
    v1 = v1/length;
    v2 = v2/length;
}

public moveRec(){
    recX = recX+(v1*speed);
recY = recY+(v2*speed);
}

while(true) {
    moveRec();
    repaint();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...