Libgdx ScaleToAction未调整大小

Libgdx ScaleToAction未调整大小,libgdx,image-resizing,Libgdx,Image Resizing,我正在尝试使用MoveToAction、RotateToAction和ScaleToAction来移动、旋转和调整精灵的大小。前两个很好,但我对ScaleToAction有一个问题。 我将动作添加到演员中,就像我对两个有效的角色所做的一样。我想问题可能出在@Override?当我运行代码时,精灵会移动和旋转,但不会进行缩放 我尝试使用下面答案中建议的sprite.setscale,但仍然没有成功。我在这里添加类中的代码: public class Prizes extends Actor { p

我正在尝试使用MoveToAction、RotateToAction和ScaleToAction来移动、旋转和调整精灵的大小。前两个很好,但我对ScaleToAction有一个问题。 我将动作添加到演员中,就像我对两个有效的角色所做的一样。我想问题可能出在@Override?当我运行代码时,精灵会移动和旋转,但不会进行缩放

我尝试使用下面答案中建议的sprite.setscale,但仍然没有成功。我在这里添加类中的代码:

public class Prizes extends Actor {
private LearnToRead game;
private TextureAtlas atlas;
private TextureRegion prizepic;
private Sprite sprite;
private RotateToAction rta;
private ScaleToAction sta;
private MoveToAction mta;

public Prizes(LearnToRead game) {
    this.game = game;
    atlas = new TextureAtlas("prizes.pack");
    prizepic = atlas.findRegion("haxhatt");

    sprite = new Sprite(prizepic);
    sprite.setPosition(450 - sprite.getWidth() / 2, 450 * Gdx.graphics.getHeight() / Gdx.graphics.getWidth() - sprite.getHeight() / 2);
    //setBounds(sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight());

    setTouchable(Touchable.enabled);

    rta = new RotateToAction();
    sta = new ScaleToAction();
    mta = new MoveToAction();

    rta.setRotation(180f);
    sta.setScale(2f);
    mta.setPosition(0, 0);
    mta.setDuration(5f);
    rta.setDuration(5f);
    sta.setDuration(5f);
    Prizes.this.addAction(rta);
    Prizes.this.addAction(sta);
    Prizes.this.addAction(mta);

}

@Override
public void draw(Batch batch, float parentAlpha) {
    sprite.draw(batch);
}

@Override
public void act(float delta) {
    super.act(delta);
}

@Override
protected void positionChanged() {
    sprite.setPosition(getX(), getY());
}

@Override
protected void rotationChanged() {
    sprite.setRotation(getRotation());
}

@Override
protected void sizeChanged() {
    sprite.setScale(getScaleX(), getScaleY());
}
}

If也尝试移除雪碧,只使用纹理区域,但没有成功。纹理已绘制,但未移动。我也发布了该代码,但我承认我对该代码非常不确定:

public class Prizes extends Actor {
private LearnToRead game;
private TextureAtlas atlas;
private TextureRegion prizepic;
private RotateToAction rta;
private ScaleToAction sta;
private MoveToAction mta;

public Prizes(LearnToRead game) {
    this.game = game;
    atlas = new TextureAtlas("prizes.pack");
    prizepic = atlas.findRegion("haxhatt");

    Prizes.this.setBounds(450 - Prizes.this.getX(), Prizes.this.getY(), Prizes.this.getWidth(), Prizes.this.getHeight());

    setTouchable(Touchable.enabled);

    rta = new RotateToAction();
    sta = new ScaleToAction();
    mta = new MoveToAction();

    rta.setRotation(180f);
    sta.setScale(2f);
    mta.setPosition(0, 0);
    mta.setDuration(5f);
    rta.setDuration(5f);
    sta.setDuration(5f);
    Prizes.this.addAction(rta);
    Prizes.this.addAction(sta);
    Prizes.this.addAction(mta);

}

@Override
public void draw(Batch batch, float parentAlpha) {
    game.batch.begin();
    game.batch.draw(prizepic, Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
    game.batch.end();
}

@Override
public void act(float delta) {
    super.act(delta);
}

@Override
protected void positionChanged() {
    Prizes.this.setPosition(getX(), getY());
}

@Override
protected void rotationChanged() {
    Prizes.this.setRotation(getRotation());
}

@Override
protected void sizeChanged() {
    Prizes.this.setScale(getScaleX(), getScaleY());
}
}


也许有人知道我做错了什么?

使用
sprite.setScale
而不是
sprite.scale
。不同之处在于,您将其设置为特定值,而不是将当前比例乘以某个值

但将Sprite与Actor一起使用是多余的,因为这两个类都存储位置、旋转、缩放和颜色。与演员一起使用纹理区域更有意义。或者您可以使用Image类,它已经为您处理了这个问题

编辑:


我看到了问题的另一部分。您正在覆盖
sizeChanged
,但您使用ScaleToAction更改的是比例,而不是大小。Actor没有用于缩放更改的回调。您可以覆盖
setScale
方法来将您的更改应用于精灵,但正如我上面所说的,使用精灵进行此操作没有意义。您应该引用一个TextureRegion,并使用
draw()
方法中的所有适当参数绘制它。

为什么不使用Image而不是Sprite+Actor?感谢您花时间回答!不幸的是,我的代码仍然不能按预期工作。我会用更多的代码更新,也许会更容易找出我的错误。我尝试用sprite覆盖setScale,但没有成功,所以我选择了其他解决方案。我删除了覆盖并添加了:game.batch.draw(prizepic,getX(),getY(),prizepic.getRegionWidth()/2,prizepic.getRegionHeight()/2,prizepic.getRegionWidth(),prizepic.getRegionHeight(),getScaleX(),getScaleY(),getRotation());当像这样绘制时,一切都会工作:)