如何在Java中聆听按键时移动图像。

我开始学习Java编程,并且我认为通过游戏开发学习Java很酷。我知道如何绘制图像并听按键,然后移动该图像。但是,当窗口正在听按键时,是否可以使图像在窗口中来回移动?例如,当图像或对象(如太空飞船)在窗口中从左向右移动时,如果按空格键,激光将在屏幕底部发射(很酷的:D)。但是基本上,我只是想知道在窗口正在听按键时如何使图像左右移动。

我在想将一个关键侦听器添加到我的窗口,然后触发一个无限循环来移动图像。还是我需要学习有关线程的知识,以便另一个线程可以移动对象?

请指教。

回答:

你可以使用Swing计时器为图像设置动画:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TimerAnimation extends JLabel implements ActionListener

{

int deltaX = 2;

int deltaY = 3;

int directionX = 1;

int directionY = 1;

public TimerAnimation(

int startX, int startY,

int deltaX, int deltaY,

int directionX, int directionY,

int delay)

{

this.deltaX = deltaX;

this.deltaY = deltaY;

this.directionX = directionX;

this.directionY = directionY;

setIcon( new ImageIcon("dukewavered.gif") );

// setIcon( new ImageIcon("copy16.gif") );

setSize( getPreferredSize() );

setLocation(startX, startY);

new javax.swing.Timer(delay, this).start();

}

public void actionPerformed(ActionEvent e)

{

Container parent = getParent();

// Determine next X position

int nextX = getLocation().x + (deltaX * directionX);

if (nextX < 0)

{

nextX = 0;

directionX *= -1;

}

if ( nextX + getSize().width > parent.getSize().width)

{

nextX = parent.getSize().width - getSize().width;

directionX *= -1;

}

// Determine next Y position

int nextY = getLocation().y + (deltaY * directionY);

if (nextY < 0)

{

nextY = 0;

directionY *= -1;

}

if ( nextY + getSize().height > parent.getSize().height)

{

nextY = parent.getSize().height - getSize().height;

directionY *= -1;

}

// Move the label

setLocation(nextX, nextY);

}

public static void main(String[] args)

{

JPanel panel = new JPanel();

JFrame frame = new JFrame();

frame.setContentPane(panel);

frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

frame.getContentPane().setLayout(null);

// frame.getContentPane().add( new TimerAnimation(10, 10, 2, 3, 1, 1, 10) );

frame.getContentPane().add( new TimerAnimation(300, 100, 3, 2, -1, 1, 20) );

// frame.getContentPane().add( new TimerAnimation(0, 000, 5, 0, 1, 1, 20) );

frame.getContentPane().add( new TimerAnimation(0, 200, 5, 0, 1, 1, 80) );

frame.setSize(400, 400);

frame.setLocationRelativeTo( null );

frame.setVisible(true);

// frame.getContentPane().add( new TimerAnimation(10, 10, 2, 3, 1, 1, 10) );

// frame.getContentPane().add( new TimerAnimation(10, 10, 3, 0, 1, 1, 10) );

}

}

你可以将KeyListener添加到面板,它将独立于图像动画进行操作。

以上是 如何在Java中聆听按键时移动图像。 的全部内容, 来源链接: utcz.com/qa/413693.html

回到顶部