Объект запускается после того, как щелчок мыши перестает двигаться, если я затем перемещаю мышь - PullRequest
1 голос
/ 05 апреля 2019

Создание простой игры, в которой я нажимаю на экран, и ракета движется слева направо из-за щелчка.Он получает свою позицию y от mouseY, когда я щелкаю, и имеет инициализированный x, который начинает меняться после щелчка.Проблема заключается в простом перемещении мыши, когда объект движется, что приводит к его остановке, а другая проблема, связанная с удерживанием левой кнопки мыши, заставляет y постоянно менять мышью Y, чего я не хочу.Повторное нажатие заставляет объект перемещаться из положения х, где он остановился, и переходит к новой мыши Y.Я хочу, чтобы Y был установлен после первого клика.Как бы я исправить эти проблемы?заранее большое спасибо за любую помощь.

Я действительно не знаю, что попробовать, потому что не знаю, что заставляет его перестать двигаться.

Класс ракеты

class Rocket
{ 
  int x = -100;
  int y;


  void render()
  {
    fill(153,153,153);
    rect(x,y,40,10);  //rocket body  
    fill(255,0,0);
    triangle(x+60,y+5,x+40,y-5,x+40,y+15);  //rocket head
    triangle(x+10,y+10,x,y+15,x,y+10);  //bottom fin
    triangle(x+10,y,x,y,x,y-5);  //top fin
    fill(226,56,34);
    stroke(226,56,34);
    triangle(x-40,y+5,x,y,x,y+10);  //fire
    fill(226,120,34);
    stroke(226,120,34);
    triangle(x-20,y+5,x,y,x,y+10);  //fire
  } 
  void mouseClicked()
  {
    if (mouseButton == LEFT)
    {
      y = mouseY;
      this.x = x+5;
    }
  }

  void update()
  {
    render();
    mouseClicked();
  }
}

Основной эскиз

ArrayList<Alien> aliens = new ArrayList<Alien>();
Rocket rocket;

void setup()
{
  size(1200,900);
  for (int i = 0; i < 5; i++)
  {
    aliens.add(new Alien());
  }
  rocket = new Rocket();
}

void draw()
{
  background(0);
  moon(); 
  for (int i = aliens.size()-1; i >= 0; i--)
  {
    aliens.get(i).update();
    if (aliens.get(i).CheckHit())
    {
      aliens.remove(i);
    }
  } 
  rocket.update();
}

1 Ответ

1 голос
/ 05 апреля 2019

Добавьте атрибут, который указывал при запуске ракеты, и добавьте метод к классу Rocket, который изменяет координату y и запускает ракету:

class Rocket
{
    boolean started = false;

    // [...]


    void setY(int newY) {
        this.y = newY;
        started = true;
    }

    void mouseClicked() {

        if (started) {
            this.x = x+5;
        }
    }
} 

Реализуйте mousePressed, который устанавливает координату y для объекта rocket:

void mousePressed() {

    if (mouseButton == LEFT) {4
        rocket.setY(mouseY);  
    }
}   

Обратите внимание, что событие происходит только один раз при нажатии кнопки мыши.

...