【问题标题】:No TweenAccessor was found for the target未找到目标的 TweenAccessor
【发布时间】:2015-07-17 14:23:13
【问题描述】:

我在我的 libGdx 程序中实现补间时遇到问题。我的问题与this 相似但不同。我正在关注关于此的视频指南,代码看起来确实相同,但是我收到错误 No TweenAccessor was found for the target - 我尝试在网上寻找解决方案,但没有一个有效,并且大多错误地将补间设置为类。

代码:

public class SplashScreen implements Screen {

...

    private Sprite splash;
    private TweenManager tweenManager;

...

    @Override
    public void show() { 
        batch = new SpriteBatch();
        tweenManager = new TweenManager();
        Tween.registerAccessor(SplashScreen.class, new SpriteAccessor());

        System.out.println(Tween.getRegisteredAccessor(SplashScreen.class));

        Texture splashTexture = new Texture(Gdx.files.internal("img/splash.png"));
        splash = new Sprite(splashTexture);
        splash.setSize(Constants.APP_WIDTH, Constants.APP_HEIGHT);

        Tween.set(splash, SpriteAccessor.ALPHA).target(0).start(tweenManager); // This throws the error
        Tween.to(splash, SpriteAccessor.ALPHA, 2).target(1).start(tweenManager);
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        tweenManager.update(delta);

        batch.begin();
        splash.draw(batch);
        batch.end();
    }
...

访问者:

public class SpriteAccessor implements TweenAccessor<Sprite> {



public static final int ALPHA = 0;

    @Override
    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;
        }
    }

    @Override
    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;
        }
    }

Logcat:

tween.SpriteAccessor@1b3a40d // note
Exception in thread "LWJGL Application" java.lang.RuntimeException: No TweenAccessor was found for the target
    at aurelienribon.tweenengine.Tween.build(Tween.java:787)
    at aurelienribon.tweenengine.Tween.build(Tween.java:79)
    at aurelienribon.tweenengine.BaseTween.start(BaseTween.java:85)
    at aurelienribon.tweenengine.TweenManager.add(TweenManager.java:61)
    at aurelienribon.tweenengine.BaseTween.start(BaseTween.java:98)
    at screens.SplashScreen.show(SplashScreen.java:36)
    at com.badlogic.gdx.Game.setScreen(Game.java:61)
    at com.simcas.game.RunGame.create(RunGame.java:12)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)

如您所见(如链接问题中所示),补间设置为我的打印显示的类。我在这里做错了什么?

【问题讨论】:

  • 你制作了一个精灵访问器,这样你就可以对精灵进行补间。但是您将其注册到 SplashScreen.class 是没有意义的。只需关注code.google.com/p/java-universal-tween-engine/wiki/GetStarted
  • 这只是糟糕的命名,但我确实有一个访问器(我将在帖子中编辑它)。
  • 我不明白,你为什么不直接改变 Tween.registerAccessor(SplashScreen.class, new SpriteAccessor());到 Tween.registerAccessor(Sprite.class, new SpriteAccessor());
  • 因为我需要我的启动画面的访问器。我正在对飞溅而不是精灵进行褪色。名字不好叫SpriteAccessor,应该叫SplashScreenAccessor
  • 是的,这就是我要说的。您是否尝试更改 Tween.registerAccessor(SplashScreen.class, new SpriteAccessor());到 Tween.registerAccessor(Sprite.class, new SpriteAccessor());

标签: java libgdx tween


【解决方案1】:

您需要将 SpriteAccessor 注册到 Sprite 类而不是 SplashScreen 类。您正在执行的补间是在精灵上而不是在屏幕上。

改变

Tween.registerAccessor(SplashScreen.class, new SpriteAccessor());

Tween.registerAccessor(Sprite.class, new SpriteAccessor());

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多