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