【发布时间】:2014-03-30 14:43:27
【问题描述】:
大家好,* 的人们,我目前正在创建一个小游戏,只是为了了解更多关于 Java 中的图形和游戏创建的知识。但是,我被困住了。我试图通过循环几个小图像然后重新绘制每个图像来创建一个“行走动画”。我不确定是否有特定的方法可以做到这一点,或者图像是否被重新绘制得如此之快以至于我实际上看不到“动画”。我目前已将游戏分解为 Ninja、GameBoard 和 Interface 类。该界面执行基本的 GUI 创建调用并将 GameBoard 添加到 GUI。 GameBoard 具有键盘侦听器并将图像绘制到板上。 Ninja 类具有键盘事件,基本上负责为忍者动画获取正确的图像。
接口类
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import javax.swing.*;
public class Interface extends JFrame
{
int height;
int width;
public Interface()
{
height = 600;
width = 600;
initInterface();
}
public Interface(int h, int w)
{
height = h;
width = w;
initInterface();
}
private void initInterface()
{
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.add(new GameBoard());
this.setTitle("Ninja *");
this.setSize(height,width);
this.setResizable(false);
}
}
游戏板类
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class GameBoard extends JPanel
{
public Ninja ninja;
public GameBoard()
{
addKeyListener(new TAdapter());
setFocusable(true);
setBackground(Color.BLACK);
setDoubleBuffered(true);
ninja = new Ninja();
}
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(ninja.getImage(), 20,20,null);
}
private class TAdapter extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
ninja.keyPressed(e, 1);
repaint();
ninja.keyPressed(e, 2);
repaint();
}
public void keyReleased(KeyEvent e)
{
ninja.keyReleased(e);
repaint();
}
}
}
忍者班
import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Ninja
{
Image ninja;
public Ninja()
{
ImageIcon iI = new ImageIcon(this.getClass().getResource("nin1.png"));
ninja = iI.getImage();
}
public Image getImage()
{
return ninja;
}
public void keyPressed(KeyEvent e, int count)
{
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
{
if (count == 1)
{
ImageIcon icon = new ImageIcon(this.getClass().getResource("nin2.png"));
ninja = icon.getImage();
}
else
{
ImageIcon icon = new ImageIcon(this.getClass().getResource("nin3.png"));
ninja = icon.getImage();
}
}
}
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == 39)
{
ImageIcon icon = new ImageIcon(this.getClass().getResource("nin1.png"));
ninja = icon.getImage();
}
}
}
【问题讨论】:
-
您的问题是什么?听众不工作吗?您想在特定时间间隔后旋转图像吗?请总结您的问题。
-
哦,抱歉。基本上,当我按下右箭头键时,我希望绘制第一个行走的 .png,然后绘制第二个 .png。但是,我最终只得到了第二个 .png,至少我可以看到哪个被绘制了。因此,当我击中右箭头时,我想要绘制两个图像,以创造一种行走的错觉。只有一个节目。
-
使用 Swing 计时器在第一张和第二张图像绘制之间设置延迟。