补间引擎 - 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;
}
}
警告 - 这是我的记忆,我实际上并没有尝试过你的代码。
我正在尝试更改精灵的 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;
}
}
警告 - 这是我的记忆,我实际上并没有尝试过你的代码。