java 滚屏,Java仿游戏滚屏

其实人物不动的,

背景图片反方向移动,

所以就看起来像人在移动

本例通过按键实现的

0818b9ca8b590ca3270a3433284dd417.png

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值