java动画中消除闪烁的两个绝招!

原创 2000年09月04日 20:50:00
作者:javaduke 原创于:www.dukejava.com
1、通过覆盖public void update(Graphics g)来消除闪烁!
在动画的实现中,经常用到repaint()函数来重画屏幕,实现动画的加载,其实在java中repaint()是通过两个步骤来实现刷新功能的,首先它调用public void update()来刷新屏幕,其次再调用paint(Graphcis g)来重画屏幕,这就容易造成闪烁,特别是一些需要重画背景的程序,如果下一桢图象可以完全覆盖上一桢图象的话,便可以重写update函数如下来消除闪烁:
public void update(Graphics g){ paint(g) }

同样调用repaint()重画屏幕。或者直接重写不调用repaint,而用

Graphics g=getGraphics();

paint(g);来实现重画屏幕。
2、 通过双缓存消除闪烁?

为了防止屏幕重画出现的闪烁,先创建一个屏外绘图区,重画完毕,直接将成品再绘制到小程序屏幕上去。下面是站长创建动态广告板时用到的双缓存技术代码:
offScreenImage=createImage(w,h);//创建屏外绘图区
offScreen=offScreenImage.getGraphics();//取得绘图环境

offScreen.setFont(new Font("Serif",Font.PLAIN,14));
offScreen.drawString("You Are Welcome!",4,getBounds().height/2);
}
else{
offScreen.setColor(bgClr);
offScreen.fillRect(0,0,w,h);
offScreen.setColor(fgClr);
for(int i=j;i<j+16;i++){
offScreen.drawString(strs[i],0,y+=wordvspace);
}
y=y-16*wordvspace;
}
g.drawImage(offScreenImage,0,0,this);//绘制屏外成品到小程序中

java动画编程:使用双缓冲,消除闪烁

双缓冲,消除闪烁   大家可能注意到了上面例子中的我们下降的圆看起来不是很清晰,带着很严重的闪烁。这种现象在写游戏程序中是普遍存在的现象。这是由于我们的 repaint()函数导致的结果,由于它在调用...
  • zxg0807
  • zxg0807
  • 2007年11月08日 15:34
  • 1237

Java中用双缓冲技术消除闪烁

在Java编写具有连贯变化的窗口程序时,通常的办法是在子类中覆盖父类的paint(Graphics)方法,在方法中使用GUI函数实现窗口重绘的过程。连贯变换的窗口会不断地调用update(Graphi...
  • lodog1
  • lodog1
  • 2015年07月22日 19:27
  • 1450

CABasicAnimation 基本用法

CABasicAnimation 自己只有三个property   fromValue  toValue  ByValue 当你创建一个 CABasicAnimation 时,你需要...
  • TF_guo
  • TF_guo
  • 2016年06月28日 11:49
  • 244

css3-过渡transtition

语法 transition :property duration timing-function delay; 参数:property指定对哪呢个css属性值进行过渡          ...
  • wangjiaohome
  • wangjiaohome
  • 2015年07月09日 14:03
  • 668

在单独一个flash帧中插入动画

1、依次点菜单:插入 → 新建元件 → 影片剪辑这时操作界面会由变成2、那个 "元件3 "的标识就是你的帧内动画的名称(你会发现"元件3"自动放入 库 中了) 3、像创建普通动画一样创建它,完了点"场...
  • happen23
  • happen23
  • 2008年12月23日 10:06
  • 1699

unity中动画与触发事件的分解

unity中,模型的行为通常是与动画同时发生的,但是在处理过程中,我们又需要把播放动画与行为触发分开实现,来达到代码的简介与功能的划分,这时候就要用到事件与委托。在这里我们用一个AnimationEv...
  • hacker9403
  • hacker9403
  • 2017年10月12日 19:28
  • 151

遇到的那些必须弄清楚的关于高性能动画的知识点

问题1:60Hz和60fps有什么关系? 没有任何关系。fps代表GPU渲染画面的频率,Hz代表显示器刷新屏幕的频率。一幅静态图片,你可以说这副图片的fps是0帧/秒,但绝对不能说此时屏幕的刷新率是0...
  • liangklfang
  • liangklfang
  • 2016年06月28日 11:52
  • 1283

解决绘图中闪烁的问题(C#)

如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码: 请在构造函数里面底下加上如下几行: SetSt...
  • weizhiai12
  • weizhiai12
  • 2011年10月31日 23:26
  • 2119

java双缓冲消除闪烁

Image ImageBuffer = null; Graphics GraImage = null; public void update(Graphics g) { ImageBuffer = ...
  • cptbtptp_bcpt_dtptp
  • cptbtptp_bcpt_dtptp
  • 2016年01月27日 17:52
  • 108

java消除闪烁 双缓冲

private Image iBuffer; private Graphics gBuffer; public void paint(Graphics g) { g.drawRect(0...
  • zhjali123
  • zhjali123
  • 2014年02月06日 20:02
  • 818
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java动画中消除闪烁的两个绝招!
举报原因:
原因补充:

(最多只允许输入30个字)