Swing动画之游戏角色


一、动画效果:实现了飞机飞行的动画效果,也实现了飞机的移动。

二、实现原理:

1.飞机飞行 的效果:事实上也还是重写paintComponent,依照一定的时间间隔更换图片就有了飞行的效果动画就是更换图片

2.移动飞机:实现KeyListener这个接口,这个接口能够接收键盘的事件。用这个面板容器去监听些事件。

三、代码:

package com.jack;

import java.awt.GridLayout;
import java.awt.List;

import javax.swing.JFrame;

/**
 *
 * @author laughing
 * @date 2014年11月16日 下午8:11:39
 */
public class Main extends JFrame {
	GamePanel	panel	= new GamePanel();
	public Main() {
		setSize(panel.getWidth(), panel.getHeight());
		getContentPane().add(panel);
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(this);
	}

	public static void main(String args[]) {
		new Main();
	}

}

package com.jack;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.border.SoftBevelBorder;

/**
 *
 * @author laughing
 * 
 * @date 2014年11月16日 下午7:58:11
 */
public class GamePanel extends JPanel implements Runnable, KeyListener {

	private static final int	HEIGHT	= 480;
	private static final int	WEIGHT	= 320;
	Image[]						plans	= new Image[6];
	int							pos		= 0;
	int							x		= WEIGHT / 2;
	int							y		= 408;
	final int					step	= 10;

	public GamePanel() {
		setSize(WEIGHT, HEIGHT);
		setBorder(new SoftBevelBorder(1, Color.white, Color.white));
		// Sets the focusable state of this Component to the specified value.
		// This value overrides the Component's default focusability.
		setFocusable(true);
		// 监听事件
		addKeyListener(this);
		new Thread(this).start();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * 
	 * 
	 * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
	 */
	@Override
	protected void paintComponent(Graphics g0) {
		// TODO Auto-generated method stub
		super.paintComponent(g0);
		Graphics2D g = (Graphics2D) g0;

		try {
			for (int i = 0; i < 6; i++) {
				plans[i] = ImageIO.read(this.getClass()
											.getResource("../../images/plan_" + i + ".png"));

			}
			g.drawImage(plans[pos], x, y, this);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (true) {

			try {
				pos++;
				if (pos == 5)
					pos = 0;
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			repaint();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyPressed(KeyEvent e) {

		int key = e.getKeyCode();
		if (key == KeyEvent.VK_UP) {
			if (y - step >= 0) {
				y -= step;
			}
		}
		if (key == KeyEvent.VK_DOWN) {

			if (y + step <= HEIGHT - plans[0].getHeight(null) * 2) {
				y += step;
			}
		}
		if (key == KeyEvent.VK_LEFT) {
			if (x - step >= 0)
				x -= step;
		}
		if (key == KeyEvent.VK_RIGHT) {

			if (x + step < WEIGHT - plans[0].getWidth(null))
				x += step;
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
	 */
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}
}

四、源代码下载:

点击打开链接

优质内容筛选与推荐>>
1、算法--电路布线问题
2、Linux 搭建svn版本库
3、大话微服务
4、[导入]Ms Ajax Lib-> $get 方法
5、<亲测好使>mac os 安装mcrypt扩展


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号