transition - javafx using translatetransition and keyevent to move image around screen -
i trying make simple tile based movement system when direction pressed translate transition played smoothly move character 1 tile over. problem running when play animation image transition fine after transition completes, image jumps spot further intended. if take out portion of code onfinished animation plays pressing directions after cause image move previous place not current location.
here code
import javafx.animation.translatetransition; import javafx.application.application; import javafx.scene.group; import javafx.scene.scene; import javafx.scene.image.image; import javafx.scene.image.imageview; import javafx.scene.paint.color; import javafx.stage.stage; import javafx.util.duration; public class controltranslateimage extends application { final int step_size = 64; final duration duration = duration.millis(500); group player; public static void main(string[] args) { launch(args); } @override public void start(stage stage) { final imageview image0 = new imageview(new image("http://opengameart.org/sites/default/files/styles/medium/public/slime_idle.gif")); player = new group(image0); player.getchildren().setall(image0); final scene scene = new scene(player, 900, 600, color.white); moveonkeypressed(scene, player); stage.setscene(scene); stage.show(); } private void moveonkeypressed(scene scene, group player) { final translatetransition transition = new translatetransition(duration, player); scene.setonkeypressed(e -> { switch(e.getcode()) { case up: { transition.setfromx(player.getlayoutx()); transition.setfromy(player.getlayouty()); transition.settox(player.getlayoutx()); transition.settoy(player.getlayouty() - step_size); transition.playfromstart(); transition.setonfinished(t -> { player.setlayoutx(player.getlayoutx()); player.setlayouty(player.getlayouty() - step_size); }); } break; case down: { transition.setfromx(player.getlayoutx()); transition.setfromy(player.getlayouty()); transition.settox(player.getlayoutx()); transition.settoy(player.getlayouty() + step_size); transition.playfromstart(); transition.setonfinished(t -> { player.setlayoutx(player.getlayoutx()); player.setlayouty(player.getlayouty() + step_size); }); } break; case left: { transition.setfromx(player.getlayoutx()); transition.setfromy(player.getlayouty()); transition.settox(player.getlayoutx() - step_size); transition.settoy(player.getlayouty()); transition.playfromstart(); transition.setonfinished(t -> { player.setlayoutx(player.getlayoutx() - step_size); player.setlayouty(player.getlayouty()); }); player.setlayoutx(player.getlayoutx() - step_size); player.setlayouty(player.getlayouty()); } break; case right: { transition.setfromx(player.getlayoutx()); transition.setfromy(player.getlayouty()); transition.settox(player.getlayoutx() + step_size); transition.settoy(player.getlayouty()); transition.playfromstart(); transition.setonfinished(t -> { player.setlayoutx(player.getlayoutx() + step_size); player.setlayouty(player.getlayouty()); }); } break; default:break; } }); } }
fixed code
import javafx.animation.translatetransition; import javafx.application.application; import javafx.scene.group; import javafx.scene.scene; import javafx.scene.image.image; import javafx.scene.image.imageview; import javafx.scene.paint.color; import javafx.stage.stage; import javafx.util.duration; public class controltranslateimage extends application { final int step_size = 64; final duration duration = duration.millis(500); group player; public static void main(string[] args) { launch(args); } @override public void start(stage stage) { final imageview image0 = new imageview(new image("http://opengameart.org/sites/default/files/styles/medium/public/slime_idle.gif")); player = new group(image0); final scene scene = new scene(player, 900, 600, color.white); moveonkeypressed(scene, player); stage.setscene(scene); stage.show(); } private void moveonkeypressed(scene scene, group player) { final translatetransition transition = new translatetransition(duration, player); scene.setonkeypressed(e -> { switch(e.getcode()) { case up: { transition.setfromx(player.gettranslatex()); transition.setfromy(player.gettranslatey()); transition.settox(player.gettranslatex()); transition.settoy(player.gettranslatey() - step_size); transition.playfromstart(); } break; case down: { transition.setfromx(player.gettranslatex()); transition.setfromy(player.gettranslatey()); transition.settox(player.gettranslatex()); transition.settoy(player.gettranslatey() + step_size); transition.playfromstart(); } break; case left: { transition.setfromx(player.gettranslatex()); transition.setfromy(player.gettranslatey()); transition.settox(player.gettranslatex() - step_size); transition.settoy(player.gettranslatey()); transition.playfromstart(); } break; case right: { transition.setfromx(player.gettranslatex()); transition.setfromy(player.gettranslatey()); transition.settox(player.gettranslatex() + step_size); transition.settoy(player.gettranslatey()); transition.playfromstart(); } break; default:break; } }); } }
Comments
Post a Comment