我开始学习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.html" target="_blank">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添加到面板,它将独立于图像动画进行操作。
问题内容: 目前,每次按键时,精灵仅移动1个像素。按住左右键时,如何使水暖工精灵不断移动? 问题答案: 您可以使用pygame.key.get_pressed来做到这一点。 例:
问题内容: 在不使用焦点侦听技术的情况下,java gui中捕获Tab键的最简单方法是什么? 问题答案: VK_TAB 是制表符常量。 然而: 请参阅:http : //docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html 要解决此问题,请将以下内容应用于触发关键事件的组件(例如,TextArea): 使用此方法,然后必须显
问题内容: 我想侦听诸如+之类的组合键,而不在Swing应用程序的每个组件中添加按键侦听器。我该如何实现? 问题答案: 有可能的。 这将抓住所有关键事件。返回false可使键盘焦点管理器恢复分配给各个组件的常规键事件。 如果您想捕捉按键组合,则可以保留一组“按键”。每当按键被按下时,将其添加到集合中并检查集合中已经有哪些键。释放键后,将其从集中移除。
聆听网上电台 1. 进入(网络)的(网上电台),选择要使用的网上电台播放器。 若网上电台播放器被登录至Memory Stick™,需先将Memory Stick™正确插入PSP™内。 与网络联机。 2. 显示「确定要执行此网页中的Plug-In吗?」的讯息后选择「是」。 显示网上电台播放器画面后,即可开始聆听网上电台。 提示 要使用网上电台时,需与无线基地台联机。 操作方法与按钮的设计配置等可能因
我是Java编程的初学者 物体一次只能移动一个正方形,如果用户想移动到另一个正方形,他们必须再次按键。我的移动方法如下: 我正在使用KeyListener接口来实现keyPressed、keyTyped和KeyRelease方法,我有下面的片段中的条件,在keyPressed内部 这允许对象自由移动。但是,只要按下向上箭头,它显然会继续移动。 有没有办法让物体向上移动一次,比如说-5,然后即使按键
问题内容: 我想运行一个Java程序,并使其模拟键盘按键。因此,例如,可以在聚焦的输入框中键入一些文本。这可能吗? 问题答案: 可能会有所帮助。 这是的一个简单示例代码片段: