随机位置libgdx的持续时间

时间:2016-01-10 16:54:18

标签: libgdx duration

我正在尝试使用libgdx进行游戏但是有问题。我搜索得很好,但我找不到解决方案。

我试着让它最后将随机位置的字符定位为数组<Rectangle>到每个“渲染”,这个字符必须具有数组的随机位置。

问题是角色的位置不会持久, 我希望持续一秒钟的每一个都有“渲染”。 我试图制作动画,但它不适用于随机位置。  如果我定义位置(100,100),例如它可以使每个角色图像保持1秒。

我不知道你是否理解我,但我想要的是角色在阵列的每个位置停留1秒(随机位置)。

这是我的代码:

public class MainScreen implements Screen {

SpriteBatch batch;
private Texture carte;
private Texture mario;
private Array<Rectangle>foret;
private Animation animation;
private float time;
private Rectangle mari;
private Vector2 position;
private Rectangle mickey ; 
Game game;
public MainScreen(Game game) {
    this.game = game;
    batch = new SpriteBatch();
    carte = new Texture(Gdx.files.internal("foret.png"));

    animation = new Animation(3/3f , new TextureRegion(new Texture("mario1.png")) , new TextureRegion(new Texture("mario2.png")) , new TextureRegion(new Texture("mario3.png")));

    foret = new Array<Rectangle>();

}


public void carte(){
    foret = new Array<Rectangle>();
    for(int i =0 ; i<7 ; i++){
        for(int j =0 ; j<7 ; j++){
            Rectangle fore = new Rectangle();
            fore.x = (i*100)+100;
            fore.y = (j*50)+20 ;
            fore.width = 64;
            fore.height = 64;
            foret.add(fore);
            batch.draw(carte ,fore.x , fore.y , 64 , 64 );
        }
    }
}
public Rectangle depMarioRandom(){
    foret = new Array<Rectangle>();
    for(int i =0 ; i<7 ; i++){
        for(int j =0 ; j<7 ; j++){
            Rectangle fore = new Rectangle();
            fore.x = (i*100)+100;
            fore.y = (j*50)+20 ;
            fore.width = 64;
            fore.height = 64;
            foret.add(fore);
        }}
    int random = (int) ( Math.random() * foret.size );
    Rectangle randomX = foret.get(random);
     return randomX;

}

@Override
public void show() {


}
@Override
public void render(float delta) {

    Gdx.gl.glClearColor(1, 1, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);


    this.mari = depMario();
    time += delta;
    Vector2 position = new Vector2(this.mari.x, this.mari.y);

      // i try te do a copy and scaling whith time but it doesn't work

    position.cpy().scl(time);

    batch.begin();
    carte();

    batch.draw(animation.getKeyFrame(time), position.x, position.y, 64, 64);
    animation.setPlayMode(Animation.PlayMode.LOOP);


    batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {

}
}

1 个答案:

答案 0 :(得分:0)

我已经好几次读了你的问题

你希望你的caractere在一秒钟内有一个rondom poistion,你可以这样做

 counterTime += Gdx.graphic.getDeltaTime();
        time += delta;
        if(counterTime > 1 ) {// each second ==> one call to position random
            // putting the random position here
            position = new Vector2(this.mari.x, this.mari.y);
            counterTime = 0; // reset to 0;
        }

    // do not scall anything


    batch.begin();
    carte();

如果有其他事情发表评论

祝你好运

编辑:

但你只需要在 create()方法

内首次初始化位置