首页 > 解决方案 > 如何在通用补间引擎 libgdx java 上使用 2 个值

问题描述

我想让 2 个值同时工作例如:我想让X从 0 到 100 和Y从 500 到 -200 变量

我的代码仅适用于X_startX_end它从 (0, 1,2...100) 开始,但Y_startY_end不能那样工作,它会转到 (500,500...500,-200) 和我需要它做的是 (500,499,498...-199,-200)

float X_start = 0;
float X_end = 100;
float Y_start = 500;
float Y_end = -200;

Tween.set(skeleton, SkeletonAcessor.P_Z).target(X_start,Y_start).start(tweenManager);
Tween.to(skeleton,SkeletonAcessor.P_Z, 5.0f).target(X_end,Y_end).setCallback(new TweenCallback(){

        @Override
        public void onEvent(int arg0, BaseTween<?> arg1) {


        }

    }).start(tweenManager);
tweenManager.update(Float.MIN_VALUE);

我的公共类 SkeletonAcessor 实现了 TweenAccessor

public class SkeletonAcessor implements TweenAccessor<Skeleton> {
    // tween the position
    public static final int P_X = 1;
    public static final int P_Y = 2;

    // tween the scale
    public static final int P_Z = 3;
    public static final int P_TREME =4;

    @Override
    public int getValues(Skeleton target, int tweenType, float[] returnValues) {
        switch(tweenType){
            case P_X:
                returnValues[0] = target.getRootBone().getX();
               // returnValues[1] = target.getRootBone().getY();
                return 1;
            case P_Y:
                returnValues[0] = target.getRootBone().getY();
                return 1;
            case P_Z:
                returnValues[0] = target.getRootBone().getScaleX();
                returnValues[0] = target.getRootBone().getScaleY();
                returnValues[1] = target.getRootBone().getY();
               // System.out.println("get valor "+returnValues[0]+"\n");
                return 1;
            case P_TREME:
             returnValues[1] = target.getRootBone().getX();

            return 1;
            default:
                assert false;
                return -1;

        }
    }

    @Override
    public void setValues(Skeleton target, int tweenType, float[] newValues) {
        switch(tweenType){
            case P_X:
                target.getRootBone().setX(newValues[0]);
                // dá o efeito andar
                //target.getRootBone().setY(((float)(0.1*Math.cos(newValues[0]))*20) +400);
                break;

            case P_Y:
                target.getRootBone().setY(newValues[0]);
                break;
            case P_Z:


                target.getRootBone().setScaleX( newValues[0]/2);
                target.getRootBone().setScaleY( newValues[0]/2);
                target.getRootBone().setY(newValues[1]);

            //  System.out.println("newValues[1] "+newValues[1]+" \n");
                break;
            case P_TREME:
                int random = (int)(Math.random() * 20 + 1);
              //  System.out.println("rand "+random+" valor "+newValues[0]+"\n");
                target.getRootBone().setX(newValues[1]+random);

                break;
            default:
                assert false;
        }

    }
}

标签: javalibgdxtween

解决方案


getValues上只需将return 1更改为return 2即可


推荐阅读