【发布时间】:2016-01-27 09:56:42
【问题描述】:
这只是我的 JFrame 文件。我想在我的角色向下移动时绘制 down.png,在我的角色向上移动时绘制 up.png 等等。我已经浏览了一段时间,但我找不到解决我的问题的方法。如果有人可以将我链接到答案或提供答案,那就太好了!
这是我的代码:
package Michael;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class MyCanvas extends Canvas implements KeyListener
{
int myX = 100;
int myY = 100;
BufferedImage down;
{
try
{
down = ImageIO.read(new File("Images/down.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage downrun;
{
try
{
downrun = ImageIO.read(new File("Images/downrun.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage left;
{
try
{
left = ImageIO.read(new File("Images/left.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage right;
{
try
{
right = ImageIO.read(new File("Images/right.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage runleft;
{
try
{
runleft = ImageIO.read(new File("Images/runleft.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage runright;
{
try
{
runright = ImageIO.read(new File("Images/runright.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage swoosh;
{
try
{
swoosh = ImageIO.read(new File("Images/swoosh.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage swordraise;
{
try
{
swordraise = ImageIO.read(new File("Images/swordraise.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage up;
{
try
{
up = ImageIO.read(new File("Images/up.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
BufferedImage uprun;
{
try
{
left = ImageIO.read(new File("Images/uprun.png"));
}
catch (IOException e)
{
System.out.println("Cannot find image file.");
}
}
public MyCanvas() // The MyCanvas constructor.
{
this.setSize(600, 400);
this.addKeyListener(this);
this.setBackground(Color.WHITE);
this.setFocusable(true);
}
public void paint(Graphics g)
{
g.drawImage(down, myX, myY, 55, 55, null);
g.drawImage(left, myX, myY, 55, 55, null);
g.drawImage(right, myX, myY, 55, 55, null);
g.drawImage(up, myX, myY, 55, 55, null);
} // I don't want to draw every image at the same time, I only want to draw 'up', when the charcter is moving up, etc.
public void moveIt(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_DOWN:
myY += 10;
break;
case KeyEvent.VK_UP:
myY -= 10;
break;
case KeyEvent.VK_LEFT:
myX -= 10;
break;
case KeyEvent.VK_RIGHT:
myX += 10;
break;
case KeyEvent.VK_SHIFT:
}
repaint();
}
@Override
public void keyPressed(KeyEvent e)
{
moveIt(e);
}
@Override
public void keyTyped(KeyEvent e)
{
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e)
{
// TODO Auto-generated method stub
}
}
非常感谢!
【问题讨论】:
-
第一个答案是不要,使用
JPanel和键绑定 API,例如 this 之类的东西 -
@MadProgrammer 你确定除了 JPanel 没有别的办法吗?当然有一种方法可以用 JFrame 来做到这一点。我的课程还没有进入 JPanel 和你在那个例子中的一半。
-
有很多方法,所有方法都充满了 Key Bindings API 旨在解决的问题。
java.awt.Canvas来自一个 15 年前被 Swing (JPanel) API 取代的 API,也许你应该让你的导师知道他们正在处理一个在一般实践中不再使用的 API -
@MadProgrammer 好的,我会告诉他的。谢谢!
标签: java swing graphics keylistener