如果我随后移动鼠标,鼠标单击停止移动后触发移动的对象

时间:2019-04-05 10:50:48

标签: java processing mouseclick-event

制作一个简单的游戏,我在屏幕上单击,并且由于单击,火箭从左到右移动。当我单击时,它从mouseY获得其y位置,并具有一个初始化的x,该x在单击后开始改变。问题很简单,就是在对象移动的同时移动鼠标使其停止,而另一个问题是按住鼠标左键会使y用我不想用的mouseY连续改变。再次单击将使对象从其停止的x位置移动,并跳转到新的mouseY。我希望在第一次单击后设置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 个答案:

答案 0 :(得分:1)

添加说明火箭何时启动的属性,并将方法添加到类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,它在对象rocket上设置y坐标:

void mousePressed() {

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

请注意,该事件仅在按下鼠标按钮时发生一次。