2017-03-20 17 views
0

MoveToAction、RotateToAction、およびScaleToActionを使用してスプライトを移動、回転、サイズ変更しようとしています。最初の2つは問題なく動作しますが、ScaleToActionに問題があります。 私は、動作する2つのアクションと同じように、アクタにアクションを追加します。私は問題が@オーバーライドにあるかもしれないと思いますか?コードを実行すると、スプライトは移動して回転しますが、スケーリングは行われません。Libgdx ScaleToActionがサイズ変更されない

私は以下の答えで示唆されているように、sprite.setscaleを使用しようとしましたが、まだ運がありません。また、スプライトを削除し、ちょうどTextureRegionを使用しようとしましたが、それは動作するように取得していない場合は

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

}

:私はここのクラスからのコードを追加します。テクスチャは描画されますが、移動はしません。私もそのコードをポストが、私はこのコードについては非常に不確かだということを告白します:

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

}

たぶん誰か私が間違っているのかについて良いアイデアを持って?

+0

Sprite + Actorの代わりにImageを使用してみませんか? – Aryan

答えて

0

sprite.scaleの代わりにsprite.setScaleを使用してください。違いは、現在のスケールにある値を乗じる代わりに、特定の値に設定していることです。

しかし、両方のクラスが位置、回転、スケール、色を保存するため、Sprite with Actorを使用することは冗長です。 TextureRegionをActorで使用する方が理にかなっています。またはImageクラスを使用することもできます。Imageクラスはすでにこれを処理しています。

編集:

私はこの問題の他の部分を参照してください。 sizeChangedを上書きしていますが、ScaleToActionで変更するのはスケールでありサイズではありません。アクタは、スケールを変更するためのコールバックを持ちません。スプライトに変更を適用するにはsetScaleメソッドをオーバーライドできますが、上記のようにスプライトを使用するのは意味がありません。 TextureRegionを参照し、draw()メソッドのすべての適切なパラメータで描画する必要があります。

+0

お返事いただきありがとうございます!残念ながら、私のコードはまだ意図したとおりに動作しません。私はより多くのコードで更新し、おそらく私の間違いを特定するのが簡単になります。 – Arnulf

+0

@Arnulf別の問題があります。上記の更新を参照してください。 – Tenfour04

+0

setScaleをスプライトでオーバーライドしようとしましたが、動作しませんでしたので、他のソリューションに向いていました。私は上書きを取り除き、以下を追加しました:game.batch.draw(prizepic、getX()、getY()、prizepic.getRegionWidth()/ 2、prizepic.getRegionHeight()/ 2、prizepic.getRegionWidth()、prizepic.getRegionHeight() 、getScaleX()、getScaleY()、getRotation());このように描画されると、すべてが動作します:) – Arnulf

関連する問題