Swing动画之游戏背景

一、游戏效果图:一个背景图片,按一定的时间间隔向下滚动。

       

二、实现原理:给panel添加两张图片,然后启动一个线程,不断的去重画这个panel,重画的过程中,改变这两张图片Y轴的坐标,这样就出现了图片滚动的效果。

 

三、代码:

package com.jack;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
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 {
	private int		y		= 0;
	private int		y1		= -480;

	SoftBevelBorder	border	= new SoftBevelBorder(1, Color.white, Color.white);

	public GamePanel() {
		setBorder(border);
	}

	/*
	 * (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 {
			Image image = ImageIO.read(this.getClass()
											.getResource("../../images/map.png"));
			Image image1 = ImageIO.read(this.getClass()
											.getResource("../../images/map_1.png"));
			if (image != null) {
				g.drawImage(image, 5, y, this);
				g.drawImage(image1, 5, y1, 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) {
			if (y == 480) {
				y = 0;
			} else {
				y += 10;
			}

			if (y1 == 0) {
				y1 = -480;
			} else {
				y1 += 10;
			}
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			repaint();
		}
	}
}

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	leftPanel	= new GamePanel();
	GamePanel	centerPanel	= new GamePanel();
	List		chartList	= new List();

	public Main() {
		setSize(800, 480);
		setLayout(new GridLayout(1, 3));

		getContentPane().add(leftPanel);
		getContentPane().add(centerPanel);
		getContentPane().add(chartList);
		new Thread(leftPanel).start();
		new Thread(centerPanel).start();
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(this);
	}

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

}

四、代码下载


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值