Android 无法在Libgdx中的TextButton上执行缩放动画
我想使用Tween引擎在文本按钮上执行缩放动画。 我对精灵和字体及其各自的访问器使用了相同的代码。但仅对于TextButton,代码不起作用。代码如下:Android 无法在Libgdx中的TextButton上执行缩放动画,android,opengl-es,libgdx,tween,Android,Opengl Es,Libgdx,Tween,我想使用Tween引擎在文本按钮上执行缩放动画。 我对精灵和字体及其各自的访问器使用了相同的代码。但仅对于TextButton,代码不起作用。代码如下: private void initLevelUpAnimation() { Log.d("Runnable", "animation method called"); Skin skin = new Skin(); //empty constructor causes it not to load yet. ski
private void initLevelUpAnimation() {
Log.d("Runnable", "animation method called");
Skin skin = new Skin(); //empty constructor causes it not to load yet.
skin.add("level_new", levelUpBG);
levelupButtonStyle = new TextButton.TextButtonStyle();
levelupButtonStyle.font = game.levelUpFont;
levelupButtonStyle.up = skin.getDrawable("level_new");
levelupButtonStyle.down = skin.getDrawable("level_new");
levelupButtonStyle.over = skin.getDrawable("level_new");
levelupButtonStyle.disabled = skin.getDrawable("level_new");
levelupButton = new TextButton("LEVEL " + (baseLevel + 1) + "\n" + "KEEP GOING", levelupButtonStyle);
levelupButton.setSize(265, 180);
levelupButton.setPosition(gamePlayBG.getWidth() / 2 - levelupButton.getWidth() / 2,
gamePlayBG.getHeight() / 2 - levelupButton.getHeight() / 2);
Log.d("TWEEN", "Read to animate: ");
Tween.to(levelupButton, ButtonAccessor.SCALE_XY, 0.01f)
.ease(Elastic.INOUT)
.target(0.1f, 0.1f)
.setCallback(new TweenCallback() {
@Override
public void onEvent(int type, BaseTween<?> source) {
stopGameObjects = true;
Log.d("TWEEN", "First completed : 0.3");
Tween.to(levelupButton, ButtonAccessor.SCALE_XY, 0.7f)
.ease(Elastic.INOUT)
.target(1.1f, 1.1f)
.setCallback(new TweenCallback() {
@Override
public void onEvent(int type, BaseTween<?> source) {
Log.d("TWEEN", "Second completed : 0.3");
Tween.to(levelupButton, ButtonAccessor.SCALE_XY, 0.7f)
.ease(Elastic.INOUT)
.target(0.8f, 0.8f)
.setCallback(new TweenCallback() {
@Override
public void onEvent(int type, BaseTween<?> source) {
Log.d("TWEEN", "Third completed : 0.3");
Tween.to(levelupButton, ButtonAccessor.SCALE_XY, 1.0f)
.ease(Elastic.OUT)
.target(1.3f, 1.3f)
.setCallback(new TweenCallback() {
@Override
public void onEvent(int type, BaseTween<?> source) {
Log.d("TWEEN", "Fourth completed : 0.7");
Tween.to(levelupButton, ButtonAccessor.ROTATION, 1.0f)
.ease(Elastic.OUT)
.target(1.0f, 1.0f)
.setCallback(new TweenCallback() {
@Override
public void onEvent(int type, BaseTween<?> source) {
Log.d("TWEEN", "Fifth completed : 1.0");
stopGameObjects = false;
updateScoreTime();
}
})
.start(game.tweenManager);
}
})
.start(game.tweenManager);
}
})
.start(game.tweenManager);
}
})
.start(game.tweenManager);
}
})
.start(game.tweenManager);
}
按钮在屏幕中绘制,但未设置动画。有人能告诉我这里做错了什么吗?添加:
按钮.setTransform(true)代码>到您的init方法
更多信息如下:(文本按钮扩展表格)
然而,我建议使用一个舞台,观察场景2D的动作。这与通用tween引擎的作用相同,但更易于用于scene2D演员(如您已经使用的按钮)
此处的详细信息:默认情况下,大多数scene.ui元素上的变换由于性能原因设置为false,因此您需要使用任何容器或表进行相同的变换
TextButton button = new TextButton("Text Button", skin);
Container wrapper = new Container(button);
wrapper.setTransform(true);
wrapper.setOrigin(wrapper.getPrefWidth() / 2, wrapper.getPrefHeight() / 2);
wrapper.setRotation(45);
wrapper.setScaleX(1.5f);
您可以使用TweenAccessor中的容器,然后应用动画
public class ContainerAccessor implements TweenAccessor<Container> {
public static final int SCALE_XY = 3;
@Override
public int getValues(Container target, int tweenType, float[] returnValues) {
switch (tweenType) {
case SCALE_XY:
returnValues[0] = target.getScaleX();
returnValues[1] = target.getScaleY();
return 2;
default:
assert false;
return -1;
}
}
@Override
public void setValues(Container target, int tweenType, float[] newValues) {
switch (tweenType) {
case SCALE_XY:
target.setScale(newValues[0], newValues[1]);
break;
default:
assert false;
}
}
}
公共类ContainerAccessor实现TweenAccessor{
公共静态最终整数刻度_XY=3;
@凌驾
public int getValues(容器目标、int-tweenType、float[]返回值){
开关(二十种类型){
案例规模_XY:
returnValues[0]=target.getScaleX();
returnValues[1]=target.getScaleY();
返回2;
违约:
断言错误;
返回-1;
}
}
@凌驾
公共void setValues(容器目标、int-tweenType、float[]newValues){
开关(二十种类型){
案例规模_XY:
target.setScale(newValues[0],newValues[1]);
打破
违约:
断言错误;
}
}
}
太好了,那你就浪费了我们的时间!请张贴所有相关代码。。可能是.draw()方法在没有使用stage.updated答案(未测试)的情况下不使用scale。如果这不起作用,您需要一个stagebutton.setTransform(true);很好。但它只对字体进行缩放。背景仍然是。我需要为整个按钮制作动画,包括背景和字体。有什么建议吗?我试着从下载这个类,但是我正在使用的Libgdx版本缺少很多东西。为什么不将您的项目更新到Libgdx的最新版本?如果您依赖gradle,那么您可以轻松地将项目升级到最新版本。我尝试了多次更新.jar。但我一直收到这个错误:java.lang.NoClassDefFoundError:com.badlogic.gdx.backends.android.AndroidGL10在这个方法“initializeForView”上,我在整个应用程序中将GL10改为GL20。仍然会得到相同的错误.updateing.jar或.jars(libgdx有很多jar),因此它不会手动更新所有jar,只需在rootbuild.gradle
文件中更新版本并刷新项目,而是使用给定的verion自动更新到您的项目模块。
TextButton button = new TextButton("Text Button", skin);
Container wrapper = new Container(button);
wrapper.setTransform(true);
wrapper.setOrigin(wrapper.getPrefWidth() / 2, wrapper.getPrefHeight() / 2);
wrapper.setRotation(45);
wrapper.setScaleX(1.5f);
public class ContainerAccessor implements TweenAccessor<Container> {
public static final int SCALE_XY = 3;
@Override
public int getValues(Container target, int tweenType, float[] returnValues) {
switch (tweenType) {
case SCALE_XY:
returnValues[0] = target.getScaleX();
returnValues[1] = target.getScaleY();
return 2;
default:
assert false;
return -1;
}
}
@Override
public void setValues(Container target, int tweenType, float[] newValues) {
switch (tweenType) {
case SCALE_XY:
target.setScale(newValues[0], newValues[1]);
break;
default:
assert false;
}
}
}