【问题标题】:How can I use 2 values on Universal Tween Engine, libgdx java如何在通用补间引擎 libgdx java 上使用 2 个值
【发布时间】:2019-05-23 23:51:46
【问题描述】:

我想让 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;
        }

    }
}

【问题讨论】:

    标签: java libgdx tween


    【解决方案1】:

    case P_Z: 下的第二行和第三行在 getter 和 setter 中都有拼写错误。数组索引错误。

    getValues:

    case P_Z:
                returnValues[0] = target.getRootBone().getScaleX();
                returnValues[0] = target.getRootBone().getScaleY();
                returnValues[1] = target.getRootBone().getY();
    

    应该是

    case P_Z:
                returnValues[0] = target.getRootBone().getScaleX();
                returnValues[1] = target.getRootBone().getScaleY();
                returnValues[2] = target.getRootBone().getY();
    

    setValues 中的同样问题。

    【讨论】:

    • 这不是问题
    【解决方案2】:

    getValues 上只需将 return 1 更改为 return 2 就可以了

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多