gpt4 book ai didi

java - 如何使用KeyListener绘制不同的图像?

转载 作者:行者123 更新时间:2023-12-01 11:00:24 25 4
gpt4 key购买 nike

这只是我的 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
}
}

非常感谢!

最佳答案

查看 Motion Using the Keyboard 中的 Motion With Key Bindings 示例。此示例展示了如何使用Key Bindings(这是更好的解决方案)而不是 KeyListener 来制作动画。

首先了解基本概念,因为您需要进行更改:

  1. 现有代码移动组件。您可能希望将其更改为 JLabel(带有图标)

  2. 创建操作时,您当前只需指定希望组件移动的x/y值。现在,您需要使用x/y 值和图标创建操作,以便您可以在每次方向变化时更改要绘制的图标。

  3. 需要修改 move(...) 方法以接受图标,然后更改 JLabel 组件的图标。

关于java - 如何使用KeyListener绘制不同的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com