Android 新的对象类型render on render()方法?

Android 新的对象类型render on render()方法?,android,libgdx,clone,Android,Libgdx,Clone,我正在寻找每次触摸屏幕或单击鼠标时,或每次用户输入时创建新对象。我有一些想法,比如克隆,创建新的,或者加入ArrayList。比如: if (Gdx.input.JustTouched){ shapeRenderer.circle(Gdx.input.getX(),Gdx.input.getY(),10); } 但每一次被触摸,都会画出一个新的圆圈。我试过: private Object[] appendValue(Object[] obj, Object newObj) { Arr

我正在寻找每次触摸屏幕或单击鼠标时,或每次用户输入时创建新对象。我有一些想法,比如克隆,创建新的,或者加入ArrayList。比如:

if (Gdx.input.JustTouched){ shapeRenderer.circle(Gdx.input.getX(),Gdx.input.getY(),10); }
但每一次被触摸,都会画出一个新的圆圈。我试过:

private Object[] appendValue(Object[] obj, Object newObj) {

    ArrayList<Object> temp = new ArrayList<Object>(Arrays.asList(obj));
    temp.add(newObj);
    return temp.toArray();
private Object[]appendValue(Object[]obj,Object newObj){
ArrayList temp=新的ArrayList(Arrays.asList(obj));
临时添加(newObj);
返回温度toArray();

但是我不能指定void方法(shaperender.circle)对于一个对象,所以对我不起作用。另一种方法是在if之外进行绘制,传递坐标,但保留在渲染循环中,然后丢失坐标。是否可以克隆方法并获得新的绘制?如果回答了这个问题,请告诉我,我将删除这个问题,我真的丢失了方法
shaperender.circle(浮动x、浮动y、浮动半径)
在画布上绘制一个圆。它不会创建对象,而是在画布上创建一组像素,一旦画布重新绘制,这些像素就会丢失

您需要存储要传递到
圆圈
方法中的数据,以便重新绘制旧圆圈,并添加更多触控事件。一个好方法是定义一个类
圆圈

public class Circle {
    public float x;
    public float y;
    public float radius;

    public Circle(float x, float y, float radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
}
然后,您可以创建这些圆圈的列表,并在每次检测到触摸事件时添加一个新圆圈:

if (Gdx.input.JustTouched)
    circles.add(new Circle(Gdx.input.getX(),Gdx.input.getY(),10));
当你需要重新绘制屏幕时,画出所有的圆圈:

for (Circle circle : circles)
    shapeRenderer.circle(circle.x, circle.y, circle.radius);
编辑

您的代码正在崩溃,因为您的圆圈集合为空,并且您调用了
圆圈。添加
。除非您正确实例化
圆圈
,否则将引发空指针异常

public class MyGdxGame implements ApplicationListener
{
    ShapeRenderer shapeRenderer;
    OrthographicCamera camera;

    // It's a collection specifically of Circles. Also, there's one per game, so don't make it static.
    Collection<Circle> circles;

    @Override
    public void create()
    {       
        camera = new OrthographicCamera();
        configureCamera();
        shapeRenderer = new ShapeRenderer();

        // Make it an empty collection to begin with
        circles = new ArrayList<Circle>();
    }

    @Override
    public void render()
    {       
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        camera.update();
        shapeRenderer.setProjectionMatrix(camera.combined);
        shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);

        shapeRenderer.setColor(0, 0.5f, 0, 1);
        shapeRenderer.circle(50, 50, 40);

        shapeRenderer.setColor(0.5f, 0, 0, 1);
        shapeRenderer.rect(10, 100, 80, 80);

        shapeRenderer.setColor(0, 0, 0.5f, 1);
        shapeRenderer.triangle(10, 200, 90, 200, 50, 270);

        // Check for input, and add the new circle, *before* drawing all the circles
        if (Gdx.input.justTouched())
            circles.add(new Circle(Gdx.input.getX(),Gdx.input.getY(),10));

        for (Circle circle : circles)
            shapeRenderer.circle(circle.x, circle.y, circle.radius);

        shapeRenderer.end();
    }

    // *static* - Google the difference between inner vs nested classes
    public static class Circle {
        public float x;
        public float y;
        public float radius;

        public Circle(float x, float y, float radius) {
            this.x = x;
            this.y = y;
            this.radius = radius;
        }
    }
}
公共类MyGdxGame实现ApplicationListener
{
shaperender shaperender;
正交摄影机;
//这是一个专门的圆圈集合。而且,每场比赛都有一个圆圈,所以不要让它是静态的。
收藏圈;
@凌驾
公共void create()
{       
摄影机=新的正交摄影机();
配置摄像头();
ShaperEnder=新的ShaperEnder();
//首先将其设置为空集合
圆圈=新的ArrayList();
}
@凌驾
公共无效呈现()
{       
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
camera.update();
setProjectionMatrix(camera.combined);
开始(shaperender.ShapeType.Filled);
设置颜色(0,0.5f,0,1);
圆(50,50,40);
设置颜色(0.5f,0,0,1);
矩形(10100,80,80);
设置颜色(0,0,0.5f,1);
三角形(10200,90200,50270);
//检查输入,并在*绘制所有圆之前*添加新圆
if(Gdx.input.justTouched())
添加(新的圆(Gdx.input.getX(),Gdx.input.getY(),10));
用于(圆:圆)
圆(圆x,圆y,圆半径);
shaperender.end();
}
//*静态*-用谷歌搜索内部类和嵌套类之间的差异
公共静态类圈{
公共浮动x;
公众浮躁;
公众浮标半径;
公共圆(浮动x、浮动y、浮动半径){
这个.x=x;
这个。y=y;
这个半径=半径;
}
}
}
我想我会在这里做:

public class MyGdxGame implements ApplicationListener
{
ShapeRenderer shapeRenderer;
OrthographicCamera camera;
static Collection circles;

@Override
public void create()
{       
camera = new OrthographicCamera();
configureCamera();
circles = null;

shapeRenderer = new ShapeRenderer();
}

@Override
public void render()
{       
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

camera.update();
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);

shapeRenderer.setColor(0, 0.5f, 0, 1);
shapeRenderer.circle(50, 50, 40);

shapeRenderer.setColor(0.5f, 0, 0, 1);
shapeRenderer.rect(10, 100, 80, 80);

shapeRenderer.setColor(0, 0, 0.5f, 1);
shapeRenderer.triangle(10, 200, 90, 200, 50, 270);


for (Circle circle : circles)
shapeRenderer.circle(circle.x, circle.y, circle.radius);

if (Gdx.input.justTouched())
    circles.add(new Circle(Gdx.input.getX(),Gdx.input.getY(),10));

shapeRenderer.end();
}


public class Circle {
   public float x;
   public float y;
   public float radius;

public Circle(float x, float y, float radius) {
    this.x = x;
    this.y = y;
    this.radius = radius;
}
}
}

这个问题很难理解,我会尝试回答,但如果我没有正确理解,请纠正我。只想在每次触摸时画一个新的形状,保留最后的触摸。意思是,添加新形状你想你猜到了我在尝试什么,但这不起作用。不知道是什么,但在运行时,会中断并关闭。真的吗儿子?不知道,你能发布你的ApplicationListener类的代码吗?当然,我已经编写了一个临时教程代码,因为我的代码真的很乱:好吧,我已经编辑了,以显示使它崩溃的要点。这对我来说很有效,现在我必须做一些其他的事情。我非常感谢你的帮助