1

这似乎是一个非常愚蠢的问题,但我真的需要帮助,我正在制作一个绘制背景透明渐变图像然后在其上绘制一些对象的任务,问题是我想绘制这个图像一次但其他对象将被多次绘制以执行一些动画

代码如下,这是我想运行一次的代码,我创建了一个布尔变量 = false 然后将其设置为 true

public void drawLockLayer(Graphics g) {
        try {
            lock = Image.createImage(Paths.lock);
            g.drawImage(lock, 0, 0, LGBMainMidlet.width, LGBMainMidlet.height);
            System.out.println("After Draw Image");
            drawOnce = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

其他代码如下

public void paint(Graphics g, Rectangle rect) {

        synchronized (g) {
            if (drawOnce == false) {
                drawLockLayer(g);
            }
        }
        pos = (int) ((System.currentTimeMillis() % 2700) / 300);

        int i = 0;

        g.setColor(bgColor);
        g.fillRoundRect(startX, startY, width, height, 20, 20);


        g.setColor(fgColor);
        g.setFont(font);
        g.drawString(loadMsg, startX + (spacing / 4), startY + (spacing / 4));

        for (int y = 0; y < 3; y++) {
            for (int x = 0; x < 3; x++) {
                int thickness = 6;
                if (i == pos) {
                    thickness = 14;
                } else if (i == pos - 1) {
                    thickness = 10;
                }
                g.fillRect((startX + x * spacing - (thickness / 2)) + (width / 3), (startY + y * spacing - (thickness / 2)) + (height / 3), thickness, thickness);
                i++;
            }
        }


    }

它是进入方法但它不是绘制背景图像,我想要做的是锁定图形对象直到他完成绘制图像然后继续其他代码

谁能帮忙

4

2 回答 2

2

代码的几个问题:

  • 在 Graphics 上同步通常是一个坏主意
  • paint 应该只从一个线程调用。你确定不是,你真的需要同步吗?矩形从哪里来?
  • 为了更容易维护,您应该在 paint() 中将 drawOnce 设置为 true
于 2012-06-28T14:16:10.713 回答
-1

您需要在调用paint 之前将drawOnce 设置为false。

看起来您的代码基于 GameCanvas。您如何看待以下方法?

    类 MainCanvas 扩展 GameCanvas {

    // rect是一个属性

    私人无效更新屏幕(){
        绘制一次 = 假;
        油漆(getGraphics(),矩形);
    }

    公共无效开始(){
        新的 DataThread().start();
        新的 AnimationThread().start();
    }

    类 DataThread 扩展线程 {
        公共无效运行(){
            while (/*IO 事情没有完成*/) {
                // 保存数据
                更新屏幕();
            }
        }
    }

    类 AnimationThread 扩展线程 {
        公共无效运行(){
            while (/*IO 事情没有完成*/) {
                // 睡一会
                更新屏幕();
            }
        }
    }

    // drawLockLayer 和paint(Graphics, Rectangle) 方法

    } // MainCanvas 类结束

于 2012-06-28T16:44:33.113 回答