java - 使用 array 或 arrayList 动态添加 Circles

标签 java android arrays geometry

我正在尝试在 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/

相关文章:

android - AndEngine如何制作飘落的雪花?

android - 让第三方应用程序直接启动我的 Activity ?

java - 在 JAXB 编码中使用 BigDecimal

java - 工具栏后退按钮和onBackPressed方法的区别

java - 循环图

java - 在 Guice 的模块配置中关联 FXML 和 Controller

android - 如何在独立应用程序中确定当前调用者的电话号码

javascript - 通过 POST 将 javascript 数组传递给 PHP 不起作用

javascript - ASP.NET MVC - Javascript 数组总是作为 null 传递给 Controller

java - 使用 HashMap 和数组组织锻炼信息