Java解决游戏界面闪屏

一、问题描述

我们在做有关于图形绘制方面的问题非常之多。比如,有时我们用普通的方法去绘制图形,会产生闪屏的现象,导致我们所做的游戏或者是别的项目效果非常差,这完全不是我们想要的结果。那么,有没有一种技术,实现不闪屏的效果,特别是在多线程环境下。答案是有的,这就是Java的什么技术——双缓冲技术。

这里写图片描述

                    图1 双缓冲技术效果图

二、实现方法

1、首先,我们定义一个类继承JFrame,要自定义绘图,我们就要实现JFrame的paint()方法,如下:

@Override
public void paint(Graphics g) {

}

2、创建一个缓冲区画笔;

public BufferedImage(int width,
                     int height,
                     int imageType)
    width          缓冲区的宽度       
    height         缓冲区的高度
    imageType      缓冲图形模式
// 创建一个缓冲区
BufferedImage paint = new BufferedImage(width, height,
    BufferedImage.TYPE_3BYTE_BGR);
// 得到缓冲区的画笔
Graphics g2 = paint.getGraphics();

3、将你想要绘制的图形绘制在缓冲区内;

// 将想要绘制的图形绘制到缓冲区
g2.drawImage(GameImage.getInstance().game_main_bg, 0, 0, width, height,
        this);

4、将缓冲区的图形绘制到显示面板上;

g.drawImage(paint, 0, 0, this);

经过上面四步之后,我们就解决了闪屏的问题,现在放心大胆的去做你的游戏吧!

三、项目源码

由于项目过大,源码只给出了双缓冲技术得用法,具体的实现并没有做。如果想验证源码的,可以联系我要项目所用到的图片,也可以上网查找。

由于技术和能力有限,文中难免会有错误之处,还望指正,谢谢合作!

1、程序入口类Main.java

/**
 * 主函数入口
 * @author Admin
 *
 */
public class Main {
   

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

}

2、游戏主界面类MainGameFrame.java

/**
 * 游戏主面板
 * 
 * @author Admin
 *
 */
public class MainGameFrame extends JFrame implements Runnable {
   

    private int width = 1200;
    private int height = 600;

    private BufferedImage clickGame;

    private List<PlantAutoMoveInfo> allPlant;

    private boolean isRunnableStart;

    public MainGameFrame() {

        isRunnableStart =
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值