我不太了解SpriteAccessor类(通用Tween引擎)

时间:2015-05-24 00:46:10

标签: java libgdx tween

刚刚观看了Dermetfan的第四个LibGDX视频,他使用通用补间引擎来补间启动画面。而且我不完全理解SpriteAccessor类。而且我不想使用一堆我不理解的代码:

public static final int ALPHA = 0;

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;
    }
}

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; 
    }
}

有人可以帮我解释这个课吗?这些方法在哪里使用?它们如何真正起作用?

视频链接:https://www.youtube.com/watch?v=2PqwxYVlivA&list=PLXY8okVWvwZ0JOwHiH1TntAdq-UDPnC2L&index=4

1 个答案:

答案 0 :(得分:0)

当你调用yourTweenManagerVariable.update(deltaTime)时,使用函数来获取和设置de值,在这种情况下是精灵的alpha。

在致电中 Tween.to(spriteVariable,YourTweenType,tweenDuration)         .TARGET(alphaTargetValue)         .ease(TweenEquations                 .easeOutBounce //易方程式                 )         。开始(yourTweenManagerVariable);

你将spriteVariable链接到yourTweenManagerVariable,所以在你发布的函数中,Sprite target是spriteVariable。

这就是所有内容的整合方式。

这是我使用过的一个例子并且有效!

public class Piece {
class PieceTween implements TweenAccessor<Piece> {

    public static final int FALLING     = 1;

    @Override
    public int getValues(Piece piece, int type, float[] values) {
        switch (type) {
        case FALLING:
            values[0] = piece.getPosition().y;
            return 1;
        };
        return 0;
    }

    @Override
    public void setValues(Piece piece, int type, float[] values) {
        switch (type) {
        case FALLING:
            piece.getPosition().y = values[0];
            break;
        };          
    }
};

    // Piece variables
    private TweenManager tweenManager = new TweenManager();

    public Piece() {
        if (Tween.getRegisteredAccessor(Piece.class) == null) {
            Tween.registerAccessor(Piece.class, new PieceTween());
        }
    }

    public void drop(Vector2 position) {
        state = State.Falling;

        Tween.to(this, PieceTween.FALLING, duration)
        .target(position.y)
        .ease(TweenEquations
                .easeOutBounce
                )
        .start(tweenManager);
    }

    public void update(float dt) {
        switch (state) {
        case Falling:
            tweenManager.update(dt);
            if (tweenManager.getRunningTweensCount()==0) {
                state = State.Idle;
            }
            break;
        };
    }       
};