我正在创建游戏并尝试设置启动画面。
每当我使用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);
}
答案 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)
)将它绘制在正确位置的原因是这种绘制方法忽略了这样一个事实:它是一个精灵,只是在任何位置绘制精灵所拥有的纹理区域给它。并且这个方法不会淡化精灵,因为它忽略了它是一个精灵(它有一个颜色)的事实。