Libgdx补间问题

时间:2015-05-15 21:43:35

标签: java libgdx sprite scaling tween

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

每当我使用sprite.draw方法呈现我要补间的sprite时,它就像这样:

@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类的初始化:

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

}

精灵/纹理的初始化:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

splash_spr_bg.setPosition(0, 0);

你展示的第二种方法(spriteBatch.draw(sprite, x, y))将它绘制在正确位置的原因是这种绘制方法忽略了这样一个事实:它是一个精灵,只是在任何位置绘制精灵所拥有的纹理区域给它。并且这个方法不会淡化精灵,因为它忽略了它是一个精灵(它有一个颜色)的事实。