对于loop/if语句java

-3 java

//Pylons
int xCoord[];
int yCoord[];
int numSquare;
boolean firstPaint;

public void init() {
    //Images Call
    pylon = getImage(getDocumentBase(), "image/pylon.png");
    numClicks = 0;

    //pylons
    xCoord = new int[100];
    yCoord = new int[100];
    numSquare = 0;
}

public void paint(Graphics g) {
    if (numClicks == 0) {
        drawUI(g);
        //probeDraw(g,2);
    }

    if (numSquare == 1) {
        for (int k = 0; k < numSquare; k++) {
            g.drawImage(pylon, xCoord[k], yCoord[k], this);
        }
        Minerals -= 100;
        popMax += 9;
    }
}

public boolean mouseDown(Event e, int x, int y) {
    if (numClicks == 10) {//Title screen        
        numClicks++;
        repaint();
    }

    if (numSquare == 0) {
        xCoord[numSquare] = x;
        yCoord[numSquare] = y;
        numSquare++;
        repaint();
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

当我这样做而不是仅仅减少100时它会将它设置为-300并且它会将popMax添加到类似36而不是10.有时它会正确地执行它并且有时它不会真的很烦人

mcf*_*gan 8

你正在更新paint(...)中的类级变量,这是每次ui组件需要重新绘制时调用的方法.我并不感到惊讶,这很烦人.

您需要将处理单击操作的逻辑拆分出paint方法 - 并使用paint方法仅渲染组件的CURRENT STATE.

编辑:继续你的评论,并且不知道你的应用程序的结构,我想你需要这样的东西:

private void handlePylonPlacement()
{
    if(decrementMinerals(-100))
        addPopMax(9);
} 

private boolean decrementMinerals(int amount)
{ 
    if(MaxMinerals - amount >= 0) // prevent situation where you go into negative minerals
    {
         MaxMinerals -= amount;
         return true;
    }
    else
         return false;
}

private void addPopMax(int amount)
{
    if(popMax + amount <= MAX_POPULATION) // restrict addition to pop-max to a sane upper bound
         popMax += amount;
}

public boolean mouseDown(Event e, int x, int y) {
    if (numClicks == 10) {//Title screen        
        numClicks++;
        repaint();
    }

    if (numSquare == 0) {
        xCoord[numSquare] = x;
        yCoord[numSquare] = y;
        numSquare++;
        handlePylonPlacement(); // call your new handler
        repaint();
    }
    return true;
} 
Run Code Online (Sandbox Code Playgroud)

  • @JacoVanNiekerk哈哈,你的意思是_an_问题:-) (2认同)