我目前正在开发一款连接四游戏
我已设法开发应用程序以指向游戏知道用户选择的列的位置。我目前正在尝试将间隙的颜色更改为用户的相应颜色(已放置令牌)。
我遇到的问题是当 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());
}
链接到保管箱