Libgdx 补间问题

Libgdx tweening issue

我正在创建游戏并尝试设置启动画面。

每当我使用 sprite.draw 方法渲染我想要补间的精灵时,如下所示:

@Override
public void render(float delta) 
{
    Gdx.gl20.glClearColor(0.2F, 0.5F, 1F, 1F);

    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);

    tm.update(delta);

    cam.update();

    sb.setProjectionMatrix(cam.combined);

    sb.begin();

    Assets.splash_spr_bg.draw(sb);

    sb.end();

}

补间效果很好,但我只能在屏幕上看到图片的 1/4,完全错位了。

每当我尝试使用此代码通过使用 spritebatch 绘制精灵来渲染它时,它看起来像这样:

@Override
public void render(float delta) 
{
    Gdx.gl20.glClearColor(0.2F, 0.5F, 1F, 1F);

    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);

    tm.update(delta);

    cam.update();

    sb.setProjectionMatrix(cam.combined);

    sb.begin();

    sb.draw(Assets.splash_spr_bg, 0, 0);

    sb.end();

}

我可以看到背景很棒、质量很好、大小和位置正确等等。但是,补间根本不起作用;没有任何反应。

为什么这不起作用?我该如何解决?


这是一些其他代码。

TweenHandler 初始化class:

package com.heavenapps.jumpdodge.handlers;

import com.badlogic.gdx.graphics.g2d.Sprite;

import aurelienribon.tweenengine.TweenAccessor;

public class TweenHandler implements TweenAccessor<Sprite> 
{

public static final int ALPHA = 1;

@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) 
{
    switch(tweenType)
    {
    case ALPHA:
        returnValues[0] = target.getColor().a;
        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;
    }
}

}

初始化 sprite/texture:

 package com.heavenapps.jumpdodge.handlers;

 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.Texture.TextureFilter;
 import com.badlogic.gdx.graphics.g2d.Sprite;

 public class Assets 
 {

    public static Texture splash_tex_bg;

    public static Sprite splash_spr_bg;

    public static void init()
    {
    // Splash Screen

    splash_tex_bg = new Texture(Gdx.files.internal("Splash Screen/Background.png"));

    splash_tex_bg.setFilter(TextureFilter.Linear, TextureFilter.Linear);

    splash_spr_bg = new Sprite(splash_tex_bg);

    splash_spr_bg.setOrigin(splash_spr_bg.getWidth() / 2, splash_spr_bg.getHeight() / 2);

    splash_spr_bg.setPosition(Gdx.graphics.getWidth(),    Gdx.graphics.getHeight());

    splash_spr_bg.setColor(1, 1, 1, 0);


}

}

补间的用法:

public void fadeSplashScreen()
{
    Tween.to(Assets.splash_spr_bg, TweenHandler.ALPHA, 2F).target(1).ease(TweenEquations.easeInBounce).start(tm);
}

如果要使用第一种方法绘制精灵,则需要设置精灵的位置。 (sprite.draw(spriteBatch))。如果你想使用由补间控制的精灵颜色,你需要使用第一种方法。

看起来你确实给了背景精灵一个初始位置,但你把它放在了屏幕之外。所以改变

splash_spr_bg.setPosition(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

splash_spr_bg.setPosition(0, 0);

您展示的第二种方法 (spriteBatch.draw(sprite, x, y)) 将其绘制在正确位置的原因是这种绘制方法忽略了它是精灵的事实,而只绘制精灵拥有的纹理区域你给它的位置。而且此方法不会使精灵褪色,因为它忽略了它是精灵(具有颜色)这一事实。