刚刚观看了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
答案 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;
};
}
};