补间引擎 - Tween.to 忽略目标值

Tween engine - Tween.to ignores target value

我正在尝试更改精灵的 y 位置,翻译有效,我的问题是它忽略了我的目标并且每次都转到一个特定点,我不明白为什么

精灵访问代码:

public class SpriteAccessor implements TweenAccessor<Sprite>{
    public static final int ALPHA = 1;
    public static final int POSITION_X = 2;
    public static final int POSITION_Y = 3;

    @Override
    public int getValues(Sprite target, int tweenType, float[] returnValues) {
        switch (tweenType) {
            case ALPHA:
                returnValues[0] = target.getColor().a;
                return 1;

            case POSITION_X:
                returnValues[1] = target.getX();
                return 2;

            case POSITION_Y:
                returnValues[2] = target.getY();
                return 3;

            default:
                return 0;
        }
    }

    @Override
    public void setValues(Sprite target, int tweenType, float[] newValues) {
        switch (tweenType) {
            case ALPHA:
                target.setColor(1, 1, 1, newValues[0]);
                break;

            case POSITION_X:
                target.setX(newValues[1]);
                break;

            case POSITION_Y:
                target.setY(newValues[2]);
                break;
        }
    }
}

以及我进行翻译的功能:

private void setupTween() {
        Tween.registerAccessor(Sprite.class, new SpriteAccessor());
        manager = new TweenManager();

        TweenCallback cb = new TweenCallback() {
            @Override
            public void onEvent(int type, BaseTween<?> source) {

            }
        };

        Tween.to(menuLogoSprite, SpriteAccessor.POSITION_Y, 2f)
                .target()//any value i put here is ignored
                .ease(TweenEquations.easeInOutQuint)
                .setCallback(cb).setCallbackTriggers(TweenCallback.COMPLETE)
                .start(manager);
    }

看来您误解了 TweenAccessor 的工作原理。在 getValue() 方法中,您应该在 returnValues 数组中从元素零开始放置值,结果应该是放置的值的数量。

这允许您使用一种补间类型处理多个值。

要解决您眼前的问题,试试这个...

    switch (tweenType) {
        case ALPHA:
            returnValues[0] = target.getColor().a;
            return 1;

        case POSITION_X:
            returnValues[0] = target.getX();
            return 1;

        case POSITION_Y:
            returnValues[0] = target.getY();
            return 1;

        default:
            return 0;
    }
}

@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
    switch (tweenType) {
        case ALPHA:
            target.setColor(1, 1, 1, newValues[0]);
            break;

        case POSITION_X:
            target.setX(newValues[0]);
            break;

        case POSITION_Y:
            target.setY(newValues[0]);
            break;
    }
}

警告 - 这是我的记忆,我实际上并没有尝试过你的代码。