如何在给定的时间内设置阵列中每个形状的可见性?

时间:2014-09-12 21:54:31

标签: android libgdx shape

所以我使用的是libgdx框架,是Android游戏开发的新手。我有一个存储在每个索引中的黄色圆圈对象数组,当我运行它们时,它们显示在游戏屏幕上,所有圆形对象位于不同的x位置但在同一y轴上。我想基本上设置每个圆圈的可见度达到给定的时间,然后下一个圆圈变得可见,例如每圈1000毫秒。因此,例如,圆圈1将在1000毫秒内可见,然后它将变为不可见,然后圆圈2将变为可见1000毫秒,依此类推,直到我到达列表的末尾。

public class Spot {

private float x;
private float y;
private float radius;

private Circle spot;
private Circle spotList[];

public Spot(float x, float y, float radius, int amount){
    this.x = x;
    this.y = y;
    this.radius = radius;
    spot = new Circle(x,y,radius);
    spotList = new Circle[amount];

    for(int i = 0; i < spotList.length; i++){

        spotList[i] = new Circle(this.x+(i*15), this.y, this.radius);

    }
}

public void update(float delta){


}


public Float getX(){

    return x;
}

public Float getY(){

    return y;
}

public float getRadius(){

    return radius;
}

public Circle[] getSpots(){

    return spotList;
}

public Circle getSpot(){

    return spot;
}

}

形状的渲染已经外包到另一个类我希望能够在更新方法中处理圆圈等的可见性。

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用适用于libGDX框架的Universal Tween Engine。访问该链接,了解如何将其包含在项目和文档中。

作为如何使用它的快速演示: -

  1. 在类中创建并实例化TweenManager和您的Spots数组,负责渲染。

    protected TweenManager tweenManager = new TweenManager();
    Spot spots[] = new Spot[...];
    ...
    
  2. 通过实现TweenCallback()

    来创建计时器
    final int numberOfSpots = 5;
    int spotArrayIndex = 0;
    float timeDelay = 1000f; /*1000 milliseconds*/
    
    Tween.call(new TweenCallback() {
    @Override
    public void onEvent(int type, BaseTween<?> source) {
       /*set or unset the visibility of your Spot objects here i.e. */
       spots[spotArrayIndex++].setVisible(false); /*Set current spot invisible*/
       spots[spotArrayIndex].setVisible(true); /*Set next spot to be visible*/
    
    }
    }).repeat(numberOfSpots, timeDelay).start(tweenManager);
    
  3. 更新渲染方法中的tweenManager

    public void render(float delta) {
    ...
        tweenManger.update(delta);
    ...
    }
    
  4. 如果您使用它,请检查代码是否有错误,因为我不确定您的其余代码。

答案 1 :(得分:0)

由于您未使用演员(https://github.com/libgdx/libgdx/wiki/Scene2d),因此您需要自己跟踪时间并使圆圈可见/不可见。

您需要添加

private float elapsedTime = 0.0f;
private float currentCircle = 0;

两个字段,一个用于跟踪已用时间,另一个用于当前可见的圆圈。

public void update(float delta){
    elapsedTime += delta;
    if (elapsedTime >= 1.0f) { // more than one second passed
        spot[currentCircle].setVisible(false);
        if (currentCircle + 1 < spotList.size()) {
          currentCircle++;
            spot[currentCircle].setVisible(true);
            elapsedTime -= 1.0f; // reset timer (don't just set to 0.0f to avoid time shifts)
        }
    }
}

在更新方法中,计算elapsedTime,如果超过一秒,则使旧圆圈不可见,新圆圈可见。还要确保最初第一个圆圈可见,并且计时器为0。