一、游戏效果图:一个背景图片,按一定的时间间隔向下滚动。
二、实现原理:给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();
}
}
四、代码下载