Interpolation

Enne interpolation-ist rääkimist peab mõistma interpolation``i seosest ``Action-iga, Action-i seost Actor-iga ning Actor-i seost Stage-iga.

Actor ja Action

Kõik Stage-i (ja HUD-i) elemendid on esindatud Actor-itena. Actor-id võivad olla staatilised (näiteks nupud) või dünaamilised kasutades Action-it. Action-id võivad panna Actor-id liikuma, muuta nende läbipaistvust või hoopis suurust.

Interpolatsion

Interpolation on matemaatiline funktsioon, mis määrab, kuidas väärtused ajas muutuvad. Interpolation-iga saab nii staatilistele Actor-itele dünaamilisust anda kui ka dünaamiliste Actor-ite lineaarsetele meetoditele varieeruvust lisada.

Interpolation klassis on üle 40 meetodi, millega saab muuta nii hüppamise füüsikat, kaamera liikumist kui ka rõhutada objekte.

Näiteid Interpolation meetodite rakendusviisidest:

  1. Interpolation.Bounce: Müntide üles-alla põrkumine.

  2. Interpolation.Circle: Kaamera sujuv liikumine (tegelane pöörab ringi enne liikumist, auto liikumine kurvis).

  3. Interpolation.Swing: Tegelase "sammumine" kohapeal.

  4. Interpolation.Fade: Lõpp ekraani ilmumine või teleportatsioon.

  5. Interpolation.Elastic: Peale hüppamist väikese “võnke” andmine tegelasele.

  6. Interpolation.Pow2Out: Kiire algus ja sujuv lõpp (kaamera aeglustuv liikumine pidurdava auto puhul).

  7. Interpolation.Exp: Järsk kiirendus (tegelase sprintimine, raketi start).

  8. Interpolation.Sine: Sujuv edasi-tagasi liikumine (paatidele vee peal või tegelase hingamine).

  9. Interpolation.Smooth: Menüü avamine ja sulgemine, stseenivahetus.

Parimad Actionite ja Interpolationite kombinatsioonid

  1. Actions.moveTo(x, y, duration, interpolation) ehk liikumine kindlale koordinaadile.

  • Exp5Out, Exp10Out: kiirenev või pidurdav liikumine

  • BounceOut: põrkumine maandudes

  • Swing: sujuv kõikumine edasi-tagasi

  • ElasticOut: veniv

  • CircleOut: pehme pidurdus

  1. Actions.moveBy(x, y, duration, interpolation) ehk liikumine kindlale kaugusele.

  • Sine, Swing: edasi-tagasi liikumine

  • Pow2Out, Pow3Out:hüppe-, plahvatuse-laadi

  • ElasticOut: veniv

  • Exp5Out, Exp10Out: kiirenev liikumine

  1. Actions.fadeOut(duration, interpolation) läbipaistvus muutus nähtamatuks.

  • Smooth, Smooth2, Smoother: pehme fade

  • ExpOut, Pow2Out: kiire fade-out

  1. Actions.fadeIn(duration, interpolation) läbipaistvus muutus nähtavaks.

  • Smooth, Smoother: pehme fade-in

  • ExpIn, Pow2In: kiire fade-in

  • ElasticOut: veniv

  1. Actions.scaleTo(xScale, yScale, duration, interpolation) suuruse muutus.

  • ElasticOut: veniv

  • Pow2Out, Exp10Out: kiire suurenemine

  • Smooth, Linear: pehme suurenemine

  1. Actions.rotateBy(degrees, duration, interpolation) pööramine kraadides.

  • Circle, CircleOut: sujuv pöörlemine

  • Swing, Sine: pendeldamine

  • ElasticOut: veniv pöörlemine

Koodinäide Interpolation.bounce kasutamisest

Kõigepealt loome peamise mängu klassi, et hiljem oleks hea täiendada Skin-ide, TextureAtlas´tega.

public class MyGDXGame extends Game {

   @Override
   public void create () {
       this.setScreen(new GameScreen(this));
   }

   @Override
   public void render () {
       super.render();
   }
}

Seejärel loome Screen klassi laiendava klassi, kus loome uue Stage-i ning lisame Stage-ile Soda Actor-i. Soda paneme 5-sekundiga liikuma uuele x- ja y-koordinaadile. Impordime staatiliselt Action-i import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;, et ei peaks Action.moveTo koodi kirjutama.

public class GameScreen implements Screen {

    private final Stage stage;
    public GameScreen(Game game) {
        stage = new Stage(new ScreenViewport());
        Soda coca = new Soda();
        stage.addActor(coca);
        coca.addAction(moveTo(stage.getWidth() - coca.getWidth(), stage.getHeight() / 2, 5f, Interpolation.bounce));
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.act();
        stage.draw();
    }
}

Teeme selged kaustad.

../_images/folder.png

Meie Actor on Image ning pilt soda.png asub assets kaustas.

public class Soda extends Image {

    public Soda() {
        super(new Texture("soda.png"));
    }

    @Override
    public void draw(Batch batch, float initialPosition) {
        super.draw(batch, initialPosition);
    }

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

Tulemus:

../_images/soda.gif