Android 为什么我的对象列表都是一样的?
我已经制作了一段时间的对象列表,以便在我编写的游戏中制作多个对象。到现在为止,我还没有遇到任何问题。我使用for循环来创建3个对象,给每个对象赋予自己的值,然后将它们添加到数组列表中。不幸的是,当我尝试这样做时,每个对象都有相同的值,我通过日志发现这些值是列表中最后一项的值。我不确定我做错了什么。这是我正在使用的代码(很抱歉,这太草率了,我现在只是想对这个项目的核心部分进行编程。我知道有很多无用的代码/编程不好的代码/编程错误的代码) GLCircle.java(我想对其进行多次复制的对象): 为什么所有对象都包含相同的值(例如x和y)?答案很简单 您的x,y变量被声明为Android 为什么我的对象列表都是一样的?,android,object,matrix,arraylist,opengl-es-2.0,Android,Object,Matrix,Arraylist,Opengl Es 2.0,我已经制作了一段时间的对象列表,以便在我编写的游戏中制作多个对象。到现在为止,我还没有遇到任何问题。我使用for循环来创建3个对象,给每个对象赋予自己的值,然后将它们添加到数组列表中。不幸的是,当我尝试这样做时,每个对象都有相同的值,我通过日志发现这些值是列表中最后一项的值。我不确定我做错了什么。这是我正在使用的代码(很抱歉,这太草率了,我现在只是想对这个项目的核心部分进行编程。我知道有很多无用的代码/编程不好的代码/编程错误的代码) GLCircle.java(我想对其进行多次复制的对象):
静态
,这意味着对象的所有实例共享相同的变量
顺便说一下,这条线
GLCircle circle = new GLCircle(generateRanFloats()[0], generateRanFloats()[1]);
在做双重工作时,您调用GeneratorFloats两次,每次使用生成的信息的一半。您的ranXXX变量都是浮动的吗?是的,它们都是浮动的。如果您一步一步地调试
GeneratorFloats()
函数,会发生什么?我已经通过记录每次通话产生的号码来调试它。每次我创建一个新对象时,我都调用该方法并记录数字。每次我调用它时,数字都不同,但是当我调用circles.get(1).x和circles.get(2).x时,它们都等于同一个数字,这是最后生成的x浮点。我不知道为什么我将其作为静态。。。谢谢是的,我意识到我调用生成方法两次,但只使用x或y。我只是想看看它是否管用。再次感谢。
for(int i = 0; i < 3; i++) {
GLCircle circle = new GLCircle(generateRanFloats()[0], generateRanFloats()[1]);
circles.add(circle);
/*circle[i].x = circle[i].getX();
circle[i].y = circle[i].getY();
circle[i].bounds = circle[i].getBounds();*/
}
public float[] generateRanFloats() {
ranSignX = ran.nextFloat();
ranSignY = ran.nextFloat();
ranSignX = ranSignX > 0.5f? -1:1;
ranSignY = ranSignY > 0.5f? -1:1;
ranSignVeloX = ran.nextFloat();
ranSignVeloY = ran.nextFloat();
ranX = ran.nextFloat() * 1.05f;
ranY = ran.nextFloat() * 1.75f;
ranX = ranSignX > 0.5? -ranX:ranX;
ranY = ranSignY > 0.5? -ranY:ranY;
Log.d("Generated", Float.toString(ranX));
return new float[] {ranX, ranY};
}
GLCircle circle = new GLCircle(generateRanFloats()[0], generateRanFloats()[1]);