Android用のゲームプログラミングを学ぶのに役立つAndroid用のテトリスゲームを作ろうとしています。私の goLeft/Rights は、ボタンが押されると右に壊れます。左に移動するためのコードは、フィールド int 配列とリスト パーツ配列とは別のクラスにあります。fields 配列は、参照変数 (TetrisWorld tetrisworld;) によってアクセスされます。パーツ リスト配列は公開されているため、goLeft() コードにある変数 (パーツ) コードを介してアクセスします。if(tetrisworld.fields[x][part.y] != 0) 左のコード:
public void goLeft() {
int x = 0;
for(int i = 0; i < 4; i++) {
TetrisParts part = parts.get(i);
x = part.x - 1;
if(tetrisworld.fields[x][part.y] != 0) {
noleft = true;
break;
}
}
if(noleft == false) {
for(int i = 0; i < 4; i++) {
TetrisParts part = parts.get(i);
part.x--;
}
}
}
fields int 配列のコード:
int fields[][] = new int[WORLD_WIDTH][WORLD_HEIGHT];
WORLD_WIDTH と WORLD_HEIGHT はどちらも静的な最終整数で、幅は 9、高さは 19 です。
if(tetrisworld.fields[0][0] == 0) を入れてみましたが、それでもクラッシュするので、変数とは関係ないと思います。また、それを確認するコードをまだ追加していなくても、範囲外にはなりません。これは、x = 5 の周りにテロイドが発生しているためです。ハプニング
goLeft/Right メソッドを「world = TetrisWorld();」を持つ gamescreen クラスに移動しようとしました。そして、それはまだ同じ場所でバグアウトします
アップデート:
追加するだけでOK:
tetrisworld != null
最初のifステートメントで修正されましたが、私の質問は、なぜ修正されたのですか? このチェックがないと動けないのはなぜですか?私の知る限り、それは明らかにゼロの原因ではありません。今では完全にレスポンシブです。
しかし、これを解決するためのより簡単な方法は、SOOOO簡単fields
に静的に変更することです...そして、それにアクセスするように:TetrisWorld.fields
だから私の更新されたコードは次のとおりです:
public void goLeft()
{
noleft = false;
for (int i = 0; i < 4; i++)
{
part = parts.get(i);
if (part.x - 1 < 0 || TetrisWorld.fields[part.x - 1][part.y] != 0)
{
noleft = true;
break;
}
}
if (noleft == false)
{
for (int i = 0; i < 4; i++)
{
part = parts.get(i);
part.x--;
}
}
}