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

作者: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);//绘制屏外成品到小程序中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 莫大侠练成纵横法,走上了杀怪路,每次只出一招。这次,他遇到了一个正方形区域,由n×n个格子构成,每个格子(行号、列号都从1开始编号)有若干个怪。莫大侠施展幻影步,抢占了一个格子,使出绝招“横扫四方”。 ### 回答2: 莫大侠的绝招“横扫四方”可以横向或纵向攻击莫大侠所在的格子上下左右的怪物,每次攻击可以将同一行或同一列上的怪物全部杀死,但是只能使用一次。 那么对于这个正方形区域,我们可以先统计每一行和每一列上的怪物数目,假设第 i 行上有 a[i] 个怪物,第 j 列上有 b[j] 个怪物,则总共有 n 行和 n 列,统计处理出 a 数组和 b 数组。 然后我们可以尝试遍历每一个格子,将当前格子作为“横扫四方”的起点,进而对所有可以攻击到的行和列进行统计,最终算出通过当前格子使用绝招“横扫四方”可以杀死的怪物数量。 针对所有的格子,如果求出了使用绝招“横扫四方”可以杀死的最大怪物数量 maxcnt,所占据的格子坐标 row 和 col,则答案即为 maxcnt + a[row] + b[col]。 时间复杂度为 O(n^2)。 ### 回答3: 莫大侠的纵横剑法一出,四方怪物尽数灭亡。但是,他却发现这个正方形区域的所有怪物的数量都发生了变化,有些格子的怪物数量变少了,有些格子的怪物数量更多了。 莫大侠心明白,这一定是因为他使用了横扫四方这一绝招,导致周围的怪物数量都向他所在的格子聚集了。于是他开始思考一个问题:他应该选择哪个格子进行抢占,才能消灭尽量多的怪物。 首先,我们需要对这个正方形区域的怪物分布情况进行一下分析,以便找到最佳的抢占格子。我们可以将这个正方形区域的每个格子按照怪物数量从小到大进行排列,这样可以将怪物分布情况更加明显地展现出来。 接下来,我们可以考虑以下几个问题: 1. 如果莫大侠抢占了数量最少的怪物格子,他能够消灭多少怪物? 答案是:消灭这个格子及其周围的8个格子的所有怪物。因为数量最少的怪物格子周围的其他格子的怪物数量更多,莫大侠使用横扫四方可以消灭的怪物数量更多。 2. 如果莫大侠抢占了数量最多的怪物格子,他能够消灭多少怪物? 答案是:只能消灭这个格子的怪物。因为数量最多的怪物格子周围的其他格子的怪物数量较少,横扫四方施展不开,莫大侠只能消灭这个格子的怪物。 3. 如果莫大侠抢占了数量位于间的某个怪物格子,他能够消灭多少怪物? 答案是:这个问题没有具体答案,因为这个问题取决于这个格子周围的其他格子的怪物数量分布。在一些情况下,选择间的某个怪物格子消灭的怪物数量更多,在一些情况下,选择其他格子消灭的怪物数量更多。 综上所述,莫大侠应该选择数量最少的怪物格子进行抢占,这样可以消灭更多的怪物。但是,如果周围的怪物数量分布情况较为复杂,建议莫大侠按照自己的判断进行选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javaduke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值