Java 如何设置图像显示在另一个随机位置的计时器末尾?

Java 如何设置图像显示在另一个随机位置的计时器末尾?,java,android,random,timer,libgdx,Java,Android,Random,Timer,Libgdx,我试图使图像在计时器结束时重新出现。我想不出我做错了什么。图像在开始时出现在一个随机点中,但仅此而已。 我需要的是应用程序启动,然后在随机位置显示3个点,每1秒在另一个随机位置显示一次 public class Main extends ApplicationAdapter { SpriteBatch batch; Texture blue; Texture red; Texture green; Sprite spriteb; Sprite sp

我试图使图像在计时器结束时重新出现。我想不出我做错了什么。图像在开始时出现在一个随机点中,但仅此而已。 我需要的是应用程序启动,然后在随机位置显示3个点,每1秒在另一个随机位置显示一次

public class Main extends ApplicationAdapter {
    SpriteBatch batch;
    Texture blue;
    Texture red;
    Texture green;
    Sprite spriteb;
    Sprite spriter;
    Sprite spriteg;
    int x;
    int y;
    Random random = new Random();
    private float counter;
    private int number;

    @Override
    public void create () {
        batch = new SpriteBatch();
        blue = new Texture("blue.png");
        red = new Texture("red.png");
        green = new Texture("green.png");
        spriteb = new Sprite(blue);
        spriter = new Sprite(red);
        spriteg = new Sprite(green);
        spriteb.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
        spriter.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
        spriteg.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));


    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        spriteb.draw(batch);
        spriter.draw(batch);
        spriteg.draw(batch);
        batch.end();
    }

        public void render (float deltaTime) {
            counter -= deltaTime;
            if (counter <= 0) {
                spriteb.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
                counter += 1000; // add one second
                batch.begin();
                spriteb.draw(batch);
                batch.end();
            }
        }
}
public类主扩展应用程序适配器{
喷雾批;
质地蓝;
质地红色;
质地绿色;
雪碧雪碧;
雪碧雪碧;
雪碧雪碧;
int x;
int-y;
随机=新随机();
私人浮动计数器;
私有整数;
@凌驾
公共void创建(){
批次=新的SpriteBatch();
蓝色=新纹理(“blue.png”);
红色=新纹理(“red.png”);
绿色=新纹理(“green.png”);
雪碧=新雪碧(蓝色);
雪碧=新雪碧(红色);
雪碧=新雪碧(绿色);
设置位置(random.nextInt(Gdx.graphics.getWidth()),random.nextInt(Gdx.graphics.getHeight());
设置位置(random.nextInt(Gdx.graphics.getWidth()),random.nextInt(Gdx.graphics.getHeight());
setPosition(random.nextInt(Gdx.graphics.getWidth()),random.nextInt(Gdx.graphics.getHeight());
}
@凌驾
公共无效渲染(){
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
batch.begin();
精神牵引(批量);
喷雾器.抽(批);
喷丝(批);
batch.end();
}
公共无效渲染(浮动增量时间){
计数器-=deltaTime;

如果(counter我试图在这里发挥建设性的作用,但我很难理解在哪里被称为什么

如果我是你的话,我会添加一些描述,比如什么叫做where,或者你写的完整代码

现在直截了当地说

在render()方法中

boolean位置;
计数-=增量;

如果(count不要发明轮子。我认为这个解决方案对你有好处:

Timer.schedule(
    new Task(){ 
        @Override 
        public void run() {
             spriteb.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
             spriter.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
             spriteg.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
        } 
    }, delay, interval);

将此代码放入您的
create()中
方法并查看其是否工作。如果某些东西仍然不工作,则编写它。

这里有一个建议…将“counter-=deltaTime”从if循环之前移出,并将其作为else子句放入if循环。if语句中的代码是否已完成?不,它好像代码没有任何作用。我可以删除整个块,它没有任何效果你。效果很好。我会使用数组来制作相同的图像副本,以随机点的形式出现在计时器的末尾吗?我想要更多的图像我想要每秒另一个精灵r b和g。抱歉,我不知道怎么说制作3个libgdx数组,制作3个新精灵,改变位置并放在那里。而不是在渲染中hod遍历这些数组并调用sprite.draw
Timer.schedule(
    new Task(){ 
        @Override 
        public void run() {
             spriteb.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
             spriter.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
             spriteg.setPosition(random.nextInt(Gdx.graphics.getWidth()), random.nextInt(Gdx.graphics.getHeight()));
        } 
    }, delay, interval);