其实人物不动的,
背景图片反方向移动,
所以就看起来像人在移动
本例通过按键实现的
import javax.imageio.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
public class Hufan extends JFrame{
HuPanel hp;//画图的类
static Hufan hufan;//本类的对象
public static void main(String[] args) {
hufan=new Hufan();
}
public Hufan(){
hp=new HuPanel();
this.addKeyListener(hp);//添加按键监听
this.add(hp);
this.setTitle("Java仿游戏滚屏");
this.setSize(800, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public int getW(){//取得JFrame窗口的宽度
return this.getWidth();
}
public int getH(){//取得JFrame窗口的高度
return this.getHeight();
}
}
class HuPanel extends JPanel implements KeyListener{
BufferedImage img;
TuPian tp;//背景图片对象
int w;//图片的宽度
int h;//图片的高度
public HuPanel(){
tp=new TuPian();
try {
img=ImageIO.read(new File("qq.PNG"));//把图片导入内存
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
w=img.getWidth();//得到图片的宽度
h=img.getHeight();//得到图片的宽度
}
public void paint(Graphics g){
super.paint(g);
g.drawImage(img, tp.x, tp.y, this);//画出图片
}
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_UP:
//如果要往上走,那么背景图片要往下移动,
//图片的y坐标小于0时,背景图片才能往下移动
if(tp.y<0){
tp.down();
}
break;
//如果要往下看,那么背景图片要往上移动,
//图片的y坐标大于(图片的高减去窗口的高)时,背景图片才能往上移动
case KeyEvent.VK_DOWN:
if(tp.y>-(h-Hufan.hufan.getH())){
tp.up();
}
break;
//如果要往左看,那么背景图片要往右移动,
case KeyEvent.VK_LEFT:
if(tp.x<0){
tp.right();
}
break;
//如果要往右看,那么背景图片要往左移动,
//图片的坐标x大于(图片的宽减去窗口的宽)时,背景图片才能往左移动
case KeyEvent.VK_RIGHT:
if(tp.x>-(w-Hufan.hufan.getW())){
tp.left();
}
break;
}
this.repaint();//刷新界面
}
@Override
public void keyReleased(KeyEvent arg0) {}
@Override
public void keyTyped(KeyEvent arg0) {}
}
class TuPian{
//int w=1680;//图片的宽度
//int h=1050;//图片的高度
int x;//图片的x坐标
int y;//图片的y坐标
int speed=5;//图片移动的速度
public void up(){//向上移动
y=y-speed;
}
public void down(){//向下移动
y=y+speed;
}
public void left(){//向左移动
x=x-speed;
}
public void right(){//向右移动
x=x+speed;
}
}