我正在尝试在 for 循环中动态添加圆圈。目前它看起来像这样:
public static void addCircle(android.graphics.Canvas canvas) {
circlesOnTheField++;
//for(int k = 0; k < circles.size(); k++) {
//Random r = new Random();
//int randomX = r.nextInt();
//int randomY = r.nextInt();
//Hier muss noch CollisionDetection nachgefü+gt werden
//c1 = new Circle(randomX, randomY, 33);
//circles.add(c1);
//canvas.drawCircle(c1.getX(), c1.getY(), c1.getR(), p1);
}
}
我的数组是这些:
//private static ArrayList<Circle> circles = new ArrayList<Circle>();
//private static String[] circleNames = {"c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","c11","c12","c13","c14","c15","c16","c17","c18","c19","c20"};
private static Circle[] circles = new Circle[50];
static Circle viking, testoppo, c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20;
我想,当我这样做时(在 for 循环内)它应该可以工作:
Circle circleNames[k] = new Circle(randomX, randomY, 33);
但是这不起作用!
如何在不使用此修复程序“c1”的情况下完成此操作?
谢谢大家!
编辑: 我更改了“addCircle”方法以仅增加变量“circlesOnTheField”。我将圆初始化(圆=新圆等)放入绘图的构造函数中。在“onDraw()”方法中,如果我的“circlesOnTheField”大于0,我想绘制圆圈。一定有一些我忽略的东西! 有什么建议么? 提前致谢
public Drawing(Context context) {
super(context);
this.ctx = context;
viking = new Circle(160,160, 33, "viking");
testoppo = new Circle (32, 150, 33, "testoppo");
for(int k = 0; k < circles.length; k++) {
Random r = new Random();
int randomX = r.nextInt();
int randomY = r.nextInt();
//Hier muss noch CollisionDetection nachgefü+gt werden
circles[k] = new Circle(randomX, randomY, 33, "Circle"+k);
}
pMe.setColor(Color.GREEN);
p1.setColor(Color.GREEN);
p2.setColor(Color.BLUE);
p3.setColor(Color.RED);
}
protected void onDraw (android.graphics.Canvas canvas){
lerpX = (circleCenterX - viking.getX()) * (time / frames) + viking.getX();
lerpY = (circleCenterY - viking.getY()) * (time / frames) + viking.getY();
canvas.drawCircle(lerpX, lerpY, viking.getR(), pMe);
canvas.drawCircle(testoppo.getX(), testoppo.getY(), testoppo.getR(), p1);
if(circlesOnTheField>0)
{
canvas.drawCircle(circles[0].getX(), circles[0].getY(), circles[0].getR(), p1);
}
viking.setX(lerpX);
viking.setY(lerpY);
}
编辑2:
通过将值设置为 r.nextInt(255);
最佳答案
如果程序启动时 circles
为空,您的方法将永远不会创建额外的圆圈(circles.size()
将返回 0)。另外,Circle CircleNames[k] = new Circle(randomX, randomY, 33); 会抛出错误 - 语法错误。我认为,相反,您应该使用以下方法来添加圆圈:
public static void addCircle(/*android.graphics.Canvas canvas*/) {
//circlesOnTheField++; this variable is wasteful; you can retreive this value by calling circles.size()
Random r = new Random();
int randomX = r.nextInt();
int randomY = r.nextInt();
c1 = new Circle(randomX, randomY, 33);
circles.add(c1);
//canvas.drawCircle(c1.getX(), c1.getY(), c1.getR(), p1);
}
}
在此方法期间,您不应该在 Canvas 上绘制圆圈;这项工作不是它的责任。该代码应该进入 drawCircles()
方法。因此,您不再需要 android.graphics.Canvas canvas
作为参数。
关于java - 使用 array 或 arrayList 动态添加 Circles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553850/