JAVA中的双缓冲问题

自己在编程过程中发现了一些小问题,在刷新屏幕时,无论将刷新频率调的快还是慢,都会出现屏幕闪烁的问题。查阅资料后发现可以用双缓冲技术解决。

双缓冲技术的原理

先在内存中分配一个和我们动画窗口一样大的空间(缓冲区),然后利用getGraphics()方法去获得双缓冲画笔,接着利用双缓冲画笔在缓冲区中绘制我们想要的东西,最后将缓冲区一次性的绘制到窗体中显示出来,这样在我门的动画窗口上面显示出来的图像就非常流畅了。

  • 值得一提的是在swing包中已经直接提供了双缓冲的功能,我们只需要重写组件的paintComponent()方法就可以使用,然而awt当中并没有提供。
  • 双缓冲技术的使用意味着内存的牺牲,不过在现在内存的使用并非游戏开发师需要首先考虑的问题
	public void update(Graphics g)//双缓冲解决闪烁问题
	{
		if(offScreenImage == null)
		{
			offScreenImage = this.createImage(Const.FRAMEWIDTH,Const.FRAMEHEIGHT);
		}
			
		
		Graphics gOff =this.createImage(Const.FRAMEWIDTH,Const.FRAMEWIDTH).getGraphics();
		paint(gOff);
		g.drawImage(offScreenImage, 0, 0, null);
	}

再附上paint函数的代码部分

public void paint(Graphics g) //绘制界面 
	{
		g.drawImage(BG, 0, 0, null);
		theBoss.drawSelf(g);
		thePlane.drawSelf(g);
		    if(index%10 == 0)
	 		weapon[index/10].setPosition(thePlane.posX+23, thePlane.posY-23);
	 		for(int i =0 ;i<10;i++)
	 		{
	 			weapon[i].drawSelf(g);
	 		}
	 	  
	 	if(index>=90) {index=0;}
		index++;
		
	}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值