gpt4 book ai didi

java - 使用通用补间引擎动态更改 Sprite

转载 作者:行者123 更新时间:2023-12-02 05:58:31 24 4
gpt4 key购买 nike

在我的 Tile 类中,我使用 TextureAtlas 的 createSprite()sprites 分配给每个图 block 。现在,从我的 screenLauncher 类中,我想更改图 block 的 Sprite ,即单击图 block 时的图像。如何实现此目的? Tile 类使用 TweenEngine 来实现图 block 的动画。

我的瓷砖类:

public class Tile {
private final float x, y;
public String title;
Sprite sprite;
private final Sprite interactiveIcon;
private final Sprite veil;
private final OrthographicCamera camera;
private final BitmapFont font;
private final TweenManager tweenManager;
private final MutableFloat textOpacity = new MutableFloat(1);

public Tile(float x, float y, float w, float h, String title, String spriteName, TextureAtlas atlas, TextureAtlas launcherAtlas, OrthographicCamera camera, BitmapFont font, TweenManager tweenManager) {
this.x = x;
this.y = y;
this.title = title;
this.camera = camera;
this.font = font;
this.tweenManager = tweenManager;
this.sprite = launcherAtlas.createSprite(spriteName);
this.interactiveIcon = atlas.createSprite("interactive");
this.veil = atlas.createSprite("white");

sprite.setSize(w, h);
sprite.setOrigin(w/2, h/2);
sprite.setPosition(x + camera.viewportWidth, y);

interactiveIcon.setSize(w/10, w/10 * interactiveIcon.getHeight() / interactiveIcon.getWidth());
interactiveIcon.setPosition(x+w - interactiveIcon.getWidth() - w/50, y+h - interactiveIcon.getHeight() - w/50);
interactiveIcon.setColor(1, 1, 1, 0);

veil.setSize(w, h);
veil.setOrigin(w/2, h/2);
veil.setPosition(x, y);
veil.setColor(1, 1, 1, 0);
}

public void draw(SpriteBatch batch) {
sprite.draw(batch);

float wrapW = (sprite.getWidth() - sprite.getWidth()/10) * Gdx.graphics.getWidth() / camera.viewportWidth;

font.setColor(1, 1, 1, textOpacity.floatValue());
font.drawWrapped(batch, title,
sprite.getX() + sprite.getWidth()/20,
sprite.getY() + sprite.getHeight()*19/20,
wrapW);

if (veil.getColor().a > 0.1f) veil.draw(batch);
}

public void enter(float delay) {
Timeline.createSequence()
.push(Tween.to(sprite, SpriteAccessor.POS_XY, 0.7f).target(x, y).ease(Cubic.INOUT))
.pushPause(0.1f)
.push(Tween.to(interactiveIcon, SpriteAccessor.OPACITY, 0.4f).target(1))
.delay(delay)
.start(tweenManager);
}
public boolean isOver(float x, float y) {
return sprite.getX() <= x && x <= sprite.getX() + sprite.getWidth()
&& sprite.getY() <= y && y <= sprite.getY() + sprite.getHeight();
}

public String getTitle()
{
return this.title;
}
}

我想知道在 LibGdx 中是否可以使用通用补间引擎来动态更改 Sprites。

最佳答案

如果你让你的瓷砖延伸,这对你来说会容易得多 Actor并将它们添加到 Stage而不是手动调用 draw()

  • 位置变量已经存在。您仍然可以以相同的方式为其设置动画,并且看起来完全相同。
  • 此外,由于您现在有 Actor ,您可以添加 ClickListener给他们。当点击Tile时,您可以更改Sprite成员的值并重新加载它。

您甚至可以引用How to detect when an actor is touched in libgdx?

祝你好运。

关于java - 使用通用补间引擎动态更改 Sprite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com