Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理时移动矩形?_Java_Animation_Processing - Fatal编程技术网

Java 处理时移动矩形?

Java 处理时移动矩形?,java,animation,processing,Java,Animation,Processing,我有以下代码(我没有在这里编写设置和绘图),我想在处理时移动一个矩形。按“a”时向左,按“d”时向右。 使用这段代码,我可以这样做,但如果moveTo是一个较低的数字,则矩形移动太慢,如果moveTo是一个较高的数字,则矩形移动不平稳。它不是流体。。。 我如何制作这个动画 int moveTo = 5; void keyPressed() { if (key == 'a') { xTopRect = xTopRect - moveTo; xBottomRect

我有以下代码(我没有在这里编写设置和绘图),我想在处理时移动一个矩形。按“a”时向左,按“d”时向右。 使用这段代码,我可以这样做,但如果moveTo是一个较低的数字,则矩形移动太慢,如果moveTo是一个较高的数字,则矩形移动不平稳。它不是流体。。。 我如何制作这个动画

int moveTo = 5;
void keyPressed()
{
  if (key == 'a')
  {
       xTopRect = xTopRect - moveTo;
       xBottomRect = xBottomRect - moveTo;
       xFstPointTriangle = xFstPointTriangle - moveTo;
       xSndPointTriangle = xSndPointTriangle - moveTo;
       xTrdPointTriangle = xTrdPointTriangle - moveTo;
  }
  else if (key == 'd')
  {
       xTopRect = xTopRect + moveTo;
       xBottomRect = xBottomRect + moveTo;
       xFstPointTriangle = xFstPointTriangle + moveTo;
       xSndPointTriangle = xSndPointTriangle + moveTo;
       xTrdPointTriangle = xTrdPointTriangle + moveTo;
   }  
}

我已经找到了这个解决方案,它是有效的(不要看变量) 我在draw()中调用move()

请尝试0到99之间的不同moveTo值。它在所有速度下都应平稳移动


您正在使用按键移动对象,但您可以在另一个线程中执行此操作,以便在您不按下按键时它可以移动。

目前,您的代码正在使用
键侦听器来触发移动。您可以做的一件事是创建并
ArrayList
,以保存向下键的值。然后,在循环中,检查a和D键值的
ArrayList
,如果它们在其中,则移动

现在的问题是,
KeyListener
仅每隔一段时间注册一个
KeyEvent
。使用此解决方案,您将能够控制矩形位置更新的频率

ArrayList<Integer> keysDown = new ArrayList<Integer>();
void keyPressed(KeyEvent e) {
    if (!keysDown.contains(e.getKeyCode()) {
        keysDown.add(e.getKeyCode());
    }
}
void keyReleased(KeyEvent e) {
if (keysDown.contains(e.getKeyCode()) {
        keysDown.remove(e.getKeyCode());
    }
}

向左和向右移动意味着您只需要将右上角移动到新位置。更频繁地轮询键。我找到了这个解决方案,它很有效!!void move(){if(keyPressed){if(key='a'){x=x-speed;}else if(key='d'){x=x+speed;}}
int moveTo = 5;
int MAX_MOVE_TO=100;
int counter=0;
void keyPressed()
{

  counter++;
  if(counter==(MAX_MOVE_TO-moveTo))
  {
     if (key == 'a')
     {
           xTopRect = xTopRect - 1;
           xBottomRect = xBottomRect - 1;
           xFstPointTriangle = xFstPointTriangle - 1;
           xSndPointTriangle = xSndPointTriangle - 1;
           xTrdPointTriangle = xTrdPointTriangle - 1;
     }
     else if (key == 'd')
     {
           xTopRect = xTopRect + 1;
           xBottomRect = xBottomRect + 1;
           xFstPointTriangle = xFstPointTriangle + 1;
           xSndPointTriangle = xSndPointTriangle + 1;
           xTrdPointTriangle = xTrdPointTriangle + 1;
     }  
     counter=0;
  }
}
ArrayList<Integer> keysDown = new ArrayList<Integer>();
void keyPressed(KeyEvent e) {
    if (!keysDown.contains(e.getKeyCode()) {
        keysDown.add(e.getKeyCode());
    }
}
void keyReleased(KeyEvent e) {
if (keysDown.contains(e.getKeyCode()) {
        keysDown.remove(e.getKeyCode());
    }
}
if (keysDown.contains(KeyEvent.VK_A)) {
    xTopRect = xTopRect - moveTo;
    xBottomRect = xBottomRect - moveTo;
    xFstPointTriangle = xFstPointTriangle - moveTo;
    xSndPointTriangle = xSndPointTriangle - moveTo;
    xTrdPointTriangle = xTrdPointTriangle - moveTo;
} else if (keysDown.contains(KeyEvent.VK_D)) {
   xTopRect = xTopRect + moveTo;
   xBottomRect = xBottomRect + moveTo;
   xFstPointTriangle = xFstPointTriangle + moveTo;
   xSndPointTriangle = xSndPointTriangle + moveTo;
   xTrdPointTriangle = xTrdPointTriangle + moveTo;
}