问题描述
我正在尝试为我正在开发的游戏初始化3D数组,在多次语法更改之后,我不知道如何使它工作! 我开始的是:
public class AnimationView extends SurfaceView implements SurfaceHolder.Callback {//Create bitmaps.
Bitmap bitmapGoal = BitmapFactory.decodeResource(this.getResources(), R.drawable.goal);
Bitmap bitmapOrig = BitmapFactory.decodeResource(this.getResources(), R.drawable.ball);
Bitmap bitmap = Bitmap.createScaledBitmap(bitmapOrig, 150, 150, true);
//initialize the canvas.
private Canvas c;
private int score[] = {0, 0, 0, 0};
public int numBalls = 1;
//we support up to 4 balls. thus each array is 4 bit.
private int ballX[] = {0, 200, 400, 600};
private double ballY[] = {0, 0, 0, 0};
private double dirV[] = {0, 0, 0, 0};
private int dirH[] = {30, 30, 30, 30};
private static final int SCALE = 10;
private double elasticity = .6;
private int rotationNow[] = {5, 5, 5, 5};
private int rotationDraw[] = {0, 0, 0, 0};
class AnimationThread extends Thread {
//Are we running currently?
private boolean mRun;
//layer 1 is how many balls, 4 layers deep.
//layer 2 is which ball we're talking about, either 1, 2, 3, or 4 layers deep, depending on layer 1.
//layer 3 is the bounds of the ball, dependent on how many there are total.
//layer 3 is formatted x-min, x-max, y-min, y-max
int[][][] bounds = new int[][][] {
{ {0, c.getWidth() - bitmap.getWidth(), 0, c.getHeight() - bitmap.getHeight()}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} },
//end first layer
{ {0, c.getWidth() / 2 - bitmap.getWidth(), 0, c.getHeight() - bitmap.getHeight()}, {c.getWidth() / 2, c.getWidth() - bitmap.getWidth(), 0, c.getHeight() - bitmap.getHeight()}, {0, 0, 0, 0}, {0, 0, 0, 0} },
//end second layer
{ {0, c.getWidth() / 3 - bitmap.getWidth(), 0, c.getHeight() - bitmap.getHeight()}, {c.getWidth() / 3, c.getWidth() * 2 / 3 - bitmap.getWidth(), 0, c.getHeight() - bitmap.getHeight()}, {c.getWidth() * 2 / 3, c.getWidth() - bitmap.getWidth(), 0, c.getHeight() - bitmap.getHeight()}, {0, 0, 0, 0} },
//end third layer
{ {0, c.getWidth() / 2, 0, c.getHeight() / 2}, {c.getWidth() / 2, c.getWidth(), 0, c.getHeight() / 2}, {0, c.getWidth() / 2, c.getHeight() / 2, c.getHeight()}, {c.getWidth() / 2, c.getWidth(), c.getHeight() / 2, c.getHeight()} }
//end fourth, and final layer!
};
很抱歉出现奇怪的格式化错误。 我知道这无济于事。 ymax和int [] [] []之间有一条新线。 您不一定需要仔细阅读并理解它,但是它会在执行过程中编译然后出错。 因此,我首先尝试制作一个简单的3D阵列:
int[][][] bounds = new int[1][1][1];
bounds[0][0][0] = 0;
Eclipse在第一行的分号下用红色弯曲表示。 说“令牌“;””上的语法错误,{应该在此令牌之后”
这就是令人沮丧的地方。 因为将相同的代码复制/粘贴到常规Java程序中可以正常工作,但是我无法在Android项目中使用它。 然后,我简化了一些内容:
int[] bounds = new int[1];
bounds[0] = 0;
完全一样的错误,完全一样的地方! 为什么要Eclipse? 我也尝试使用“ int bounds [] [] []”而不是“ int [] [] [] bounds”,但没有区别,仍然是相同的错误。
我重新启动了计算机,多次清理了项目,重新启动了Eclipse。 我没主意了。 你有什么??
1楼
好吧,看来问题出在代码粘贴之前而不是之前,而是之后。
此分配bounds[0][0][0] = 0;
可能没有任何方法,这是非法的。
当Eclipse看到需要在方法内部的表达式时,它期望上面的行是方法声明,因此它期望'{'
是方法块的开始,而不是';'
2楼
int[][][] bounds = new int[1][1][1];
bounds[0][0][0] = 0;
我复制了这两行,似乎编译良好。 我认为您可能已经忘记评论早期的bounds声明了。 (或)您可能缺少牙套或类似的东西
3楼
好吧,我觉得很荒谬。 在对为什么变量无法初始化以及为什么如此简单的代码为何无法编译感到非常困惑之后。 事实证明,尽管可以使用画布和位图,但实际上它们会将空值返回到数组中。
所以我现在开始工作了。
另外,对于我在这里的第一个问题,解决方案的迅速性给我留下了深刻的印象。 万分感谢!