永发信息网

java的paint方法和update方法,知道的进

答案:1  悬赏:30  手机版
解决时间 2021-06-02 08:24

是一个关于重写update方法来做双缓冲的问题,在马士兵的tankWar教程上面看到这么一段代码。

主要看update和paint方法。意思我都懂,创建update方法里面创建一个图片,用图片的画笔把所有东西画进去,然后把图片的东西显示在frame上面。

问题就在用画笔画东西的地方,画东西之前,先要通过画一个绿色的方块把图片都遮盖起来,使得图片整个颜色重新变成绿色,再重画,个人觉得这样是不是有点消耗内存,因为之前画的东西都没有真正的释放掉,只是用绿色的方块给遮盖住了。

如果每次调用update的时候重新创建一个Image,把颜色改为绿色再画,不是跟好么,但是这样会比较消耗性能,到底怎么做比较好

Image offScreenImage = null;

public void update(Graphics g) {
  if(offScreenImage == null) {
     offScreenImage = this.createImage(800, 600);
    }
  
  Graphics gOffScreen = offScreenImage.getGraphics();
  Color c = gOffScreen.getColor();
   gOffScreen.setColor(Color.GREEN);
   gOffScreen.fillRect(0, 0, 800, 600);
   gOffScreen.setColor(c);
   paint(gOffScreen);
   g.drawImage(offScreenImage, 0, 0, null);
 }

public void paint(Graphics g) {
  Color c = g.getColor();
  g.setColor(Color.RED);
  g.fillOval(X, Y, 30, 30);
  g.setColor(c);
  this.Y += 5;
 }

public void lauchFrame() {
  this.setSize(WIDTH, HEIGHT);
  this.setLocation(200, 200);
  this.setVisible(true);
  this.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  this.setResizable(false);
  this.setTitle("TankWar");
  this.setBackground(Color.GREEN);
  new Thread(new PaintThread()).start();
 }
 
 class PaintThread implements Runnable {
  public void run() {
   while(true) {
    repaint();
    try {
     Thread.sleep(50);
    } catch (InterruptedException e) {
      System.out.println(e.getMessage());
    }
   }
  }
 

最佳答案

之前画的东西都没有真正的释放掉---->


Java里有自己的垃圾回收机制啊    所以这个应该不是问题  他会自动在后台处理的

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我外婆给我两个洋娃娃我爸给我三个洋娃娃我一
英语老师让我们大声的朗读英语? 英文怎样翻
农村宅基地在拆迁的过程中,赔不赔钱?
本科 毕业的什么优秀毕业生选调是怎么一回事
怎么可以成为古惑仔?
我新买了个八个G的优盘!为何里面下载的资料
我想自学英语,我初中毕业英语基础还行,我想
脚气是怎么形成的
SIM卡放在手机里 开机不久就显示SIM卡注册失
今晚CCTV5有足球的直播吗??
今年吉林省文科考生339分能考近专科的长春师
龙之谷地狱犬门票问题
魏武将见匈奴使 答案
电脑安装XP图文教程哪里有
大地祝福腰带卖多少
推荐资讯
数学题,高级难
什么是定语、状语?用什么方法来区分这两种修
兰花指是谁唱的?
QQ空间关于主页和花藤的问题
怎么让列表变窄?
地下城怎么强化50粉武器+到高??
水浒做试练要扣人品吗
再说的近义词
崇明第七加油站怎么去啊,有知道地址的么
踏板摩托磨合出来会比新车有劲吗
鱼泉榨菜的特点
谁知到有什么好玩的大型单机赛车游戏吗?要像
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?