2015-07-17 3 views
1

У меня проблема с tweening в моей программе libGdx. Моя проблема аналогична, но отличается от this. Я следую видео-руководству по этому вопросу, и код выглядит одинаково, но я получаю сообщение об ошибке No TweenAccessor was found for the target. Я пробовал искать онлайн-решения, но никто из них не работал и в основном неправомерно настраивал анимацию для этого класса.Не найдено ни одного TweenAccessor для цели

Код:

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(); 
    } 
... 

Accessor:

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:

[email protected] // 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) 

Как вы можете видеть (как в связанном вопросе) твин устанавливается в классе, как моя печать показывает. Что я здесь делаю неправильно?

+0

Вы сделали спрайтов аксессор, так что вы можете промежуточные кадры спрайтов. Но вы регистрируете его в SplashScreen.class, который не имеет смысла. Просто следуйте http://code.google.com/p/java-universal-tween-engine/wiki/GetStarted – Barodapride

+0

Это просто плохое имя, но у меня есть помощник (который я буду редактировать в сообщении). – Evilunclebill

+1

Я не понимаю, почему бы вам просто не изменить Tween.registerAccessor (SplashScreen.class, новый SpriteAccessor()); to Tween.registerAccessor (Sprite.class, новый SpriteAccessor()); – Barodapride

ответ

3

Вам необходимо зарегистрировать свой SpriteAccessor в классе Sprite не для класса SplashScreen. Твины, которые вы выполняете, находятся на спрайте не на экране.

Изменить

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

в

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

Еще раз спасибо! – Evilunclebill

Смежные вопросы