我目前正在开发Connect 4游戏
我设法开发应用程序以指出游戏知道用户选择了哪一列。我目前正在尝试将间隙的颜色更改为用户的相应颜色(已放置令牌)。
我遇到的问题是调用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-postion,颜色等)。
来自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;}
}
这是我要求了解point
的问题请注意,按下“新游戏”按钮会添加间隙
如果需要任何其他信息或代码,请发表评论
为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());
}
链接到dropbox
答案 0 :(得分:0)
正如其他人所说的那样(我给亨利提供了碰撞),connectfourView必须在那里为空。你需要初始化它:
ConnectFourView connectfourView = new ConnectFourView();
我没有看到它在哪里完成,所以它可能默认设置为null。