0

我目前正在开发一款连接四游戏

我已设法开发应用程序以指向游戏知道用户选择的列的位置。我目前正在尝试将间隙的颜色更改为用户的相应颜色(已放置令牌)。

我遇到的问题是当 connectfourView.invalidate() 被调用时,我得到一个 java.lang.NullPointerexception

下面的代码

public void tokenPlacement (int index, float xpos) {
        int x = 0;
        int lowerxpos = (int) (xpos - 10);
        int higherxpos = (int) (xpos + 10);

        while (x <= 6)
        {
        if ( lowerxpos <= ((float) (columnselects.get(x).getWidthPos())) && higherxpos >= ((float) (columnselects.get(x).getWidthPos())))
        {
            Log.d("In IF", Float.toString(x));
            Log.d("Looking at the colour", Float.toString(gaps.get(x).getColor()));
            gaps.get(x).setColor(-1);
            Log.d("After change what is the colour now", Float.toString(gaps.get(x).getColor()));
            connectfourView.invalidate();
            break;
        }
        x++;
        }
        }

关于代码。首先,我知道这只会影响每列间隙的底层。当颜色改变起作用时,我会解决这个问题。此代码来自 Gaps.java。此视图是 ConnectFourView.java(实例 connectfourView),其中将间隙绘制到屏幕上。所有间隙都存储在一个列表(间隙)中,并在 Gap.java 中定义(x 位置、颜色等)

来自 Gap.java 的部分

    public Gap (int j, int i, int color, double diameter, double widthpos, double heightpos){
        this.j = j;
        this.i = i;
        this.color = color;
        this.diameter = diameter;
        this.widthpos = widthpos;
        this.heightpos = heightpos;
    }

    public int getJ() {return j;}

    public int getI() {return i;}

    public int getColor() {return color;}

    public void setColor(int newColor) {this.color = newColor;}

    public double getDiameter() {return diameter;}

    public double getWidthPos() {return widthpos;}

    public double getHeightPos() {return heightpos;}
}

这是我问到这一点的一个问题

请注意,间隙是通过按“新游戏”按钮添加的

如果需要任何其他信息或代码,请发表评论

为 dmon 添加:

这是定义connectfourView的地方,它也被导入了

public class Gaps {

    ConnectFourView connectfourView;

/* Other code, not related to question */

public void tokenplacement()//at bottom of class Gaps

我注意到,当单击屏幕上的退出按钮时,所有间隙都会在加载主菜单之前改变颜色,所以问题只是试图刷新屏幕

来自 ConnectFourView.java

public ConnectFourView(Context context, Gaps gaps) {
        super(context);
        this.gaps = gaps;
        setFocusable(true);
    }

//used to mange the attributes of the board (different colour to background for board)
    public ConnectFourView(Context context, AttributeSet attrs, Gaps gaps) {
        super(context, attrs);
        this.gaps = gaps;
        setFocusable(true);
        setMinimumWidth(getWidth());
        setMinimumHeight(getHeight());
    }

链接到保管箱

4

1 回答 1

0

正如其他人所说(我给了亨利一个凹凸), connectfourView 必须在那里为空。你需要初始化它:

ConnectFourView connectfourView = new ConnectFourView();

我看不到这是在哪里完成的,因此默认情况下它可能设置为 null。

于 2013-01-05T17:16:54.963 回答