0

私は現在、Connect four ゲームに取り組んでいます

ユーザーが選択した列をゲームが認識できる場所を指すようにアプリを開発することができました。現在、ギャップの色をユーザーのそれぞれの色に変更しようとしています (トークンが配置されています)。

私が抱えている問題は、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 は null でなければなりません。初期化する必要があります。

ConnectFourView connectfourView = new ConnectFourView();

それがどこで行われたかはわかりませんので、デフォルトで null に設定されている可能性があります。

于 2013-01-05T17:16:54.963 に答える