Android 无法使用Tween在Libgdx中设置精灵动画

Android 无法使用Tween在Libgdx中设置精灵动画,android,opengl-es,libgdx,tween,universal-tween-engine,Android,Opengl Es,Libgdx,Tween,Universal Tween Engine,我正在开发一款像《糖果粉碎》这样的游戏,我一直面临着在用户升级时弹出窗口的问题。我最近发布了一个以字体显示弹出窗口的问题,并解决了它: 但现在我想用Tween引擎来制作弹出窗口的动画,但由于某些原因它不起作用。我在游戏的其他部分使用了Tween引擎,使硬币反弹并消失,这与下面的代码配合得很好 淡入淡出的动画: plusTen = new Sprite(ten); plusTen.setSize(1, 1); plusTen.setPosition

我正在开发一款像《糖果粉碎》这样的游戏,我一直面临着在用户升级时弹出窗口的问题。我最近发布了一个以字体显示弹出窗口的问题,并解决了它:

但现在我想用Tween引擎来制作弹出窗口的动画,但由于某些原因它不起作用。我在游戏的其他部分使用了Tween引擎,使硬币反弹并消失,这与下面的代码配合得很好

淡入淡出的动画:

plusTen = new Sprite(ten);
            plusTen.setSize(1, 1);
            plusTen.setPosition(object.getX(), object.getY());


            Tween.set(plusTen, SpriteAccessor.ALPHA).target(1).start(game.tweenManager);
            to(plusTen, SpriteAccessor.ALPHA, 0.7f).target(0).delay(0.7f).start(game.tweenManager);
  sprite.setSize(1, 1);
            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);

            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);
            Tween.to(sprite, Accessor.POSITION_Y, 0.8f)
                    .target(sprite.getY() - moveBy - 5)
                    .ease(Bounce.OUT)
                    .start(game.tweenManager);
public void render(float delta) {
    // TODO Auto-generated method stub

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);


    game.batch.begin();

    game.batch.setProjectionMatrix(camera2.combined);

    game.batch.draw(gamePlayBG, 0, 0);


    if (gameOver != true) {
        //Log.d("render------------", "render: "+ delta);


    camera.update();

    game.batch.setProjectionMatrix(camera.combined);


    if (lineHud.size > 1) {
        for (Sprite sprite : this.lineHud) {

            sprite.draw(game.batch);
        }
    }


    for (int i = 0; i < gameObjects.size; i++) {
        gameObjects.get(i).draw(game.batch);
    }


    for (Sprite sprite : this.scoreHud) {

        sprite.draw(game.batch);


    }


    if (stopGameObjects) {

        game.batch.setProjectionMatrix(camera2.combined);

        levelUp.draw(game.batch);

        game.levelUpFont.drawMultiLine(game.batch, "LEVEL " + (baseLevel + 1),
                (gamePlayBG.getWidth() / 2) - 55,
                (gamePlayBG.getHeight() / 2) + 35);

        game.levelUpFont.drawMultiLine(game.batch, "KEEP GOING",
                (gamePlayBG.getWidth() / 2) - 90,
                gamePlayBG.getHeight() / 2);


    }


    game.tweenManager.update(delta);

    game.batch.end();


    update(delta);


    game.batch.setProjectionMatrix(camera2.combined);


}
public class SpriteAccessor implements TweenAccessor<Sprite> {
public static final int ALPHA = 0;
@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) {
    switch (tweenType){
        case ALPHA:
            returnValues[0] = target.getColor().a;
            return 1;
        default:
            assert false;
            return  -1;
    }

}

@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
    switch (tweenType){
        case ALPHA:
            target.setColor(target.getColor().r, target.getColor().g, target.getColor().b, newValues[0]);
            break;
        default:
            assert false;
    }

}
反弹动画:

plusTen = new Sprite(ten);
            plusTen.setSize(1, 1);
            plusTen.setPosition(object.getX(), object.getY());


            Tween.set(plusTen, SpriteAccessor.ALPHA).target(1).start(game.tweenManager);
            to(plusTen, SpriteAccessor.ALPHA, 0.7f).target(0).delay(0.7f).start(game.tweenManager);
  sprite.setSize(1, 1);
            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);

            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);
            Tween.to(sprite, Accessor.POSITION_Y, 0.8f)
                    .target(sprite.getY() - moveBy - 5)
                    .ease(Bounce.OUT)
                    .start(game.tweenManager);
public void render(float delta) {
    // TODO Auto-generated method stub

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);


    game.batch.begin();

    game.batch.setProjectionMatrix(camera2.combined);

    game.batch.draw(gamePlayBG, 0, 0);


    if (gameOver != true) {
        //Log.d("render------------", "render: "+ delta);


    camera.update();

    game.batch.setProjectionMatrix(camera.combined);


    if (lineHud.size > 1) {
        for (Sprite sprite : this.lineHud) {

            sprite.draw(game.batch);
        }
    }


    for (int i = 0; i < gameObjects.size; i++) {
        gameObjects.get(i).draw(game.batch);
    }


    for (Sprite sprite : this.scoreHud) {

        sprite.draw(game.batch);


    }


    if (stopGameObjects) {

        game.batch.setProjectionMatrix(camera2.combined);

        levelUp.draw(game.batch);

        game.levelUpFont.drawMultiLine(game.batch, "LEVEL " + (baseLevel + 1),
                (gamePlayBG.getWidth() / 2) - 55,
                (gamePlayBG.getHeight() / 2) + 35);

        game.levelUpFont.drawMultiLine(game.batch, "KEEP GOING",
                (gamePlayBG.getWidth() / 2) - 90,
                gamePlayBG.getHeight() / 2);


    }


    game.tweenManager.update(delta);

    game.batch.end();


    update(delta);


    game.batch.setProjectionMatrix(camera2.combined);


}
public class SpriteAccessor implements TweenAccessor<Sprite> {
public static final int ALPHA = 0;
@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) {
    switch (tweenType){
        case ALPHA:
            returnValues[0] = target.getColor().a;
            return 1;
        default:
            assert false;
            return  -1;
    }

}

@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
    switch (tweenType){
        case ALPHA:
            target.setColor(target.getColor().r, target.getColor().g, target.getColor().b, newValues[0]);
            break;
        default:
            assert false;
    }

}
以上两种方法都有效。但是对于我在上面的链接中创建的弹出窗口,我想创建像elastic(变大变小)这样的动画,但它不起作用

我正在使用以下代码与链接中显示的代码合并:

这是我的render()方法代码:

plusTen = new Sprite(ten);
            plusTen.setSize(1, 1);
            plusTen.setPosition(object.getX(), object.getY());


            Tween.set(plusTen, SpriteAccessor.ALPHA).target(1).start(game.tweenManager);
            to(plusTen, SpriteAccessor.ALPHA, 0.7f).target(0).delay(0.7f).start(game.tweenManager);
  sprite.setSize(1, 1);
            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);

            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);
            Tween.to(sprite, Accessor.POSITION_Y, 0.8f)
                    .target(sprite.getY() - moveBy - 5)
                    .ease(Bounce.OUT)
                    .start(game.tweenManager);
public void render(float delta) {
    // TODO Auto-generated method stub

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);


    game.batch.begin();

    game.batch.setProjectionMatrix(camera2.combined);

    game.batch.draw(gamePlayBG, 0, 0);


    if (gameOver != true) {
        //Log.d("render------------", "render: "+ delta);


    camera.update();

    game.batch.setProjectionMatrix(camera.combined);


    if (lineHud.size > 1) {
        for (Sprite sprite : this.lineHud) {

            sprite.draw(game.batch);
        }
    }


    for (int i = 0; i < gameObjects.size; i++) {
        gameObjects.get(i).draw(game.batch);
    }


    for (Sprite sprite : this.scoreHud) {

        sprite.draw(game.batch);


    }


    if (stopGameObjects) {

        game.batch.setProjectionMatrix(camera2.combined);

        levelUp.draw(game.batch);

        game.levelUpFont.drawMultiLine(game.batch, "LEVEL " + (baseLevel + 1),
                (gamePlayBG.getWidth() / 2) - 55,
                (gamePlayBG.getHeight() / 2) + 35);

        game.levelUpFont.drawMultiLine(game.batch, "KEEP GOING",
                (gamePlayBG.getWidth() / 2) - 90,
                gamePlayBG.getHeight() / 2);


    }


    game.tweenManager.update(delta);

    game.batch.end();


    update(delta);


    game.batch.setProjectionMatrix(camera2.combined);


}
public class SpriteAccessor implements TweenAccessor<Sprite> {
public static final int ALPHA = 0;
@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) {
    switch (tweenType){
        case ALPHA:
            returnValues[0] = target.getColor().a;
            return 1;
        default:
            assert false;
            return  -1;
    }

}

@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
    switch (tweenType){
        case ALPHA:
            target.setColor(target.getColor().r, target.getColor().g, target.getColor().b, newValues[0]);
            break;
        default:
            assert false;
    }

}
public void渲染(浮动增量){
//TODO自动生成的方法存根
Gdx.gl.glClear(GL10.gl\u颜色\u缓冲\u位);
game.batch.begin();
game.batch.setProjectionMatrix(camera2.combined);
game.batch.draw(gamePlayBG,0,0);
if(gameOver!=真){
//Log.d(“渲染------------”,“渲染:+delta”);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
如果(lineHud.size>1){
用于(雪碧雪碧:this.lineHud){
雪碧。抽签(游戏。批量);
}
}
对于(int i=0;i
这是我的精神导师课程:

plusTen = new Sprite(ten);
            plusTen.setSize(1, 1);
            plusTen.setPosition(object.getX(), object.getY());


            Tween.set(plusTen, SpriteAccessor.ALPHA).target(1).start(game.tweenManager);
            to(plusTen, SpriteAccessor.ALPHA, 0.7f).target(0).delay(0.7f).start(game.tweenManager);
  sprite.setSize(1, 1);
            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);

            sprite.setPosition(columnIndex, this.MAX_ROWS + 5);
            Tween.to(sprite, Accessor.POSITION_Y, 0.8f)
                    .target(sprite.getY() - moveBy - 5)
                    .ease(Bounce.OUT)
                    .start(game.tweenManager);
public void render(float delta) {
    // TODO Auto-generated method stub

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);


    game.batch.begin();

    game.batch.setProjectionMatrix(camera2.combined);

    game.batch.draw(gamePlayBG, 0, 0);


    if (gameOver != true) {
        //Log.d("render------------", "render: "+ delta);


    camera.update();

    game.batch.setProjectionMatrix(camera.combined);


    if (lineHud.size > 1) {
        for (Sprite sprite : this.lineHud) {

            sprite.draw(game.batch);
        }
    }


    for (int i = 0; i < gameObjects.size; i++) {
        gameObjects.get(i).draw(game.batch);
    }


    for (Sprite sprite : this.scoreHud) {

        sprite.draw(game.batch);


    }


    if (stopGameObjects) {

        game.batch.setProjectionMatrix(camera2.combined);

        levelUp.draw(game.batch);

        game.levelUpFont.drawMultiLine(game.batch, "LEVEL " + (baseLevel + 1),
                (gamePlayBG.getWidth() / 2) - 55,
                (gamePlayBG.getHeight() / 2) + 35);

        game.levelUpFont.drawMultiLine(game.batch, "KEEP GOING",
                (gamePlayBG.getWidth() / 2) - 90,
                gamePlayBG.getHeight() / 2);


    }


    game.tweenManager.update(delta);

    game.batch.end();


    update(delta);


    game.batch.setProjectionMatrix(camera2.combined);


}
public class SpriteAccessor implements TweenAccessor<Sprite> {
public static final int ALPHA = 0;
@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) {
    switch (tweenType){
        case ALPHA:
            returnValues[0] = target.getColor().a;
            return 1;
        default:
            assert false;
            return  -1;
    }

}

@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
    switch (tweenType){
        case ALPHA:
            target.setColor(target.getColor().r, target.getColor().g, target.getColor().b, newValues[0]);
            break;
        default:
            assert false;
    }

}
公共类SpriteAccessor实现tweenacessor{
公共静态最终整数α=0;
@凌驾
公共int getValues(Sprite目标、int-tweenType、float[]返回值){
开关(二十种类型){
案例α:
returnValues[0]=target.getColor().a;
返回1;
违约:
断言错误;
返回-1;
}
}
@凌驾
公共void设置值(精灵目标、int-tweenType、float[]newValues){
开关(二十种类型){
案例α:
setColor(target.getColor().r,target.getColor().g,target.getColor().b,newValues[0]);
打破
违约:
断言错误;
}
}
}


请给出我做错了什么的建议。

使用下面的
访问器
,因为几乎所有类型的属性都是您想要使用的,所以您使用的是
访问器。位置_XY
用于调整levelUp Sprite的XY位置,但您的要求是缩放Sprite

必须在精灵上调用setOrigin以将原点设置为中间,否则默认为左下角。原点用于缩放和旋转

public class SpriteAccessor implements TweenAccessor<Sprite> {

    public static final int POS_XY = 1;
    public static final int CPOS_XY = 2;
    public static final int SCALE_XY = 3;
    public static final int ROTATION = 4;
    public static final int OPACITY = 5;
    public static final int TINT = 6;

    @Override
    public int getValues(Sprite target, int tweenType, float[] returnValues) {
        switch (tweenType) {
            case POS_XY:
                returnValues[0] = target.getX();
                returnValues[1] = target.getY();
                return 2;

            case CPOS_XY:
                returnValues[0] = target.getX() + target.getWidth()/2;
                returnValues[1] = target.getY() + target.getHeight()/2;
                return 2;

            case SCALE_XY:
                returnValues[0] = target.getScaleX();
                returnValues[1] = target.getScaleY();
                return 2;

            case ROTATION: returnValues[0] = target.getRotation(); return 1;
            case OPACITY: returnValues[0] = target.getColor().a; return 1;

            case TINT:
                returnValues[0] = target.getColor().r;
                returnValues[1] = target.getColor().g;
                returnValues[2] = target.getColor().b;
                return 3;

            default: assert false; return -1;
        }
    }

    @Override
    public void setValues(Sprite target, int tweenType, float[] newValues) {
        switch (tweenType) {
            case POS_XY: target.setPosition(newValues[0], newValues[1]); break;
            case CPOS_XY: target.setPosition(newValues[0] - target.getWidth()/2, newValues[1] - target.getHeight()/2); break;
            case SCALE_XY: target.setScale(newValues[0], newValues[1]); break;
            case ROTATION: target.setRotation(newValues[0]); break;

            case OPACITY:
                Color c = target.getColor();
                c.set(c.r, c.g, c.b, newValues[0]);
                target.setColor(c);
                break;

            case TINT:
                c = target.getColor();
                c.set(newValues[0], newValues[1], newValues[2], c.a);
                target.setColor(c);
                break;

            default: assert false;
        }
    }
}
公共类SpriteAccessor实现tweenacessor{
公共静态最终int位置_XY=1;
公共静态最终int CPOS_XY=2;
公共静态最终整数刻度_XY=3;
公共静态最终整数旋转=4;
公共静态最终整数不透明度=5;
公共静态最终内部色调=6;
@凌驾
公共int getValues(Sprite目标、int-tweenType、float[]返回值){
开关(二十种类型){
案例位置:
returnValues[0]=target.getX();
returnValues[1]=target.getY();
返回2;
案例CPO_XY:
returnValues[0]=target.getX()+target.getWidth()/2;
returnValues[1]=target.getY()+target.getHeight()/2;
返回2;
案例规模_XY:
returnValues[0]=target.getScaleX();
returnValues[1]=target.getScaleY();
返回2;
大小写旋转:returnValues[0]=target.getRotation();返回1;
大小写不透明度:returnValues[0]=target.getColor().a;返回1;
箱色:
returnValues[0]=target.getColor().r;
returnValues[1]=target.getColor().g;
returnValues[2]=target.getColor().b;
返回3;
默认值:assert false;返回-1;
}
}
@凌驾
公共void设置值(精灵目标、int-tweenType、float[]newValues){
开关(二十种类型){
case POS_XY:target.setPosition(newValues[0],newValues[1]);break;
case CPOS_XY:target.setPosition(newValues[0]-target.getWidth()/2,newValues[1]-target.getHeight()/2);break;
case SCALE_XY:target.setScale(newValues[0],newValues[1]);break;
大小写旋转:target.setRotation(newValues[0]);break;
病例不透明度:
Color c=target.getColor();
c、 set(c.r、c.g、c.b、newValues[0]);
目标色(c);
打破
箱色:
c=target.getColor();
c、 集合(newValues[0]、newValues[1]、newValues[2]、c.a);
目标色(c);
打破
默认值:assert false;
}
}
}

展示你的
精灵助手
classHie,@Abhishek Aryan我在上面有更新并添加了精灵助手类