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:¶
Interpolation.Bounce: Müntide üles-alla põrkumine.Interpolation.Circle: Kaamera sujuv liikumine (tegelane pöörab ringi enne liikumist, auto liikumine kurvis).Interpolation.Swing: Tegelase "sammumine" kohapeal.Interpolation.Fade: Lõpp ekraani ilmumine või teleportatsioon.Interpolation.Elastic: Peale hüppamist väikese “võnke” andmine tegelasele.Interpolation.Pow2Out: Kiire algus ja sujuv lõpp (kaamera aeglustuv liikumine pidurdava auto puhul).Interpolation.Exp: Järsk kiirendus (tegelase sprintimine, raketi start).Interpolation.Sine: Sujuv edasi-tagasi liikumine (paatidele vee peal või tegelase hingamine).Interpolation.Smooth: Menüü avamine ja sulgemine, stseenivahetus.
Parimad Actionite ja Interpolationite kombinatsioonid¶
Actions.moveTo(x, y, duration, interpolation)ehk liikumine kindlale koordinaadile.
Exp5Out,Exp10Out: kiirenev või pidurdav liikumineBounceOut: põrkumine maandudesSwing: sujuv kõikumine edasi-tagasiElasticOut: venivCircleOut: pehme pidurdus
Actions.moveBy(x, y, duration, interpolation)ehk liikumine kindlale kaugusele.
Sine,Swing: edasi-tagasi liikuminePow2Out,Pow3Out:hüppe-, plahvatuse-laadiElasticOut: venivExp5Out,Exp10Out: kiirenev liikumine
Actions.fadeOut(duration, interpolation)läbipaistvus muutus nähtamatuks.
Smooth,Smooth2,Smoother: pehme fadeExpOut,Pow2Out: kiire fade-out
Actions.fadeIn(duration, interpolation)läbipaistvus muutus nähtavaks.
Smooth,Smoother: pehme fade-inExpIn,Pow2In: kiire fade-inElasticOut: veniv
Actions.scaleTo(xScale, yScale, duration, interpolation)suuruse muutus.
ElasticOut: venivPow2Out,Exp10Out: kiire suurenemineSmooth,Linear: pehme suurenemine
Actions.rotateBy(degrees, duration, interpolation)pööramine kraadides.
Circle,CircleOut: sujuv pöörlemineSwing,Sine: pendeldamineElasticOut: 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.
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: