Java Gui中解决游戏闪烁的初级方案(双缓冲技术)

在Java中,需要调用paint()方法将你所想要的东西画在你自己定义好的LaunchFrame()里面。但是如果每一次都立刻将Paint()方法里面的东西画到LaunchFrame()上,由于每一块显卡承受刷新频率的能力强弱不一样,所以很容易就出现了闪烁现象,现记录一种我最开始学习解决游戏闪烁现象的初级解决方案-----------双缓冲技术。



Java中可以利用repaint()方法进行游戏数据修改之后的重画,底层还需经过调用update(),所以我们可以重写update()方法来实现双缓冲技术,代码如下:

	public void update(Graphics g) {
		if (offScreenImage == null) {
			offScreenImage = this.createImage(GAME_WIDTH, GAME_HIGHT);
		}
		Graphics goffScreen = offScreenImage.getGraphics();// 重新定义一个画虚拟桌布的画笔//
		Color c = goffScreen.getColor();
		goffScreen.setColor(Color.darkGray);
		goffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HIGHT);
		goffScreen.setColor(c);
		paint(goffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}

paint()方法中传的画笔是goffScreen,再调用paint()方法将画在goffScreen的东西全部显示出来。

开一个线程,Sleep一段时间执行repaint()方法
	private class PaintThread implements Runnable {
		public void run() {
			while (true) {
				repaint();
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

这样就可以消除一些初级的闪烁现象。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值