zoukankan      html  css  js  c++  java
  • 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
    
    	}
    }
    

    四、源代码下载:

    点击打开链接

  • 相关阅读:
    ES5 05 Function扩展
    ES5 04 Array扩展
    ES5 03 Object扩展
    ES5 02 JSON对象
    ES5 01 严格模式
    Oracle 数据库复制
    PB函数大全
    Handle( ) //得到PB窗口型对象的句柄
    PB赋值粘贴 多个DW进行update
    pb 11 数据窗口空白,预览pb崩溃解决方案
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4497642.html
Copyright © 2011-2022 走看看