import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.ArcType; import javafx.stage.Stage; import java.io.FileInputStream; import java.io.FileNotFoundException; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.control.Button; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyCode; //import Bicicleta; public class Something extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { double distancia = 10; Canvas canvas = new Canvas(700, 700); GraphicsContext gc = canvas.getGraphicsContext2D(); gc.setLineWidth(2.0); Pane root = new Pane(); ImageView imagen; Bicicleta bicicleta = new Bicicleta(); try{ //FileInputStream inputstream = new FileInputStream("file:javacleta.png"); FileInputStream inputstream = new FileInputStream("bici.png"); //se setea el tamaño de la imagen! Image img = new Image(inputstream, 50, 50, false, false); //gc.drawImage(img, 0, 0); //es 350 menos porque se toma en cuenta el tamaño de la imagen! //gc.drawImage(img, bicicleta.x, 350-bicicleta.y); imagen = new ImageView(img); imagen.setX(5+bicicleta.x); imagen.setY(bicicleta.y-40); root.getChildren().add(imagen); /* mover(gc, bicicleta, 50); mover(gc, bicicleta, 50, 1.5708); mover(gc, bicicleta, 50, 0); mover(gc, bicicleta, 50, 1.5708); mover(gc, bicicleta, 50, 0); mover(gc, bicicleta, 50, 1.5708); mover(gc, bicicleta, 50, 3.14159); mover(gc, bicicleta, 25, 4.71239); mover(gc, bicicleta, 100, 0.523599); mover(gc, bicicleta, 100, 5.23599); */ //gc.strokeLine(200, 50, 300, 50); //gc.strokeLine(0, 0, 300, 50); //Crea los botones Button boton1 = new Button(); Button boton2 = new Button(); Button boton3 = new Button(); Button boton4 = new Button(); Button boton5 = new Button(); Button boton6 = new Button(); Button boton7 = new Button(); Button boton8 = new Button(); boton1.setText("NO"); boton1.setPrefSize(40, 40); boton1.setLayoutX(0); boton1.setLayoutY(0); boton1.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 2.09439510238807, imagen); } }); boton2.setText("N"); boton2.setPrefSize(40, 40); boton2.setLayoutX(50); boton2.setLayoutY(0); boton2.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 1.570796326791001, imagen); } }); boton3.setText("NE"); boton3.setPrefSize(40, 40); boton3.setLayoutX(100); boton3.setLayoutY(0); boton3.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 0.5235987755970001, imagen); } }); boton4.setText("O"); boton4.setPrefSize(40, 40); boton4.setLayoutX(0); boton4.setLayoutY(50); boton4.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 3.141592653582001, imagen); } }); boton5.setText("E"); boton5.setPrefSize(40, 40); boton5.setLayoutX(100); boton5.setLayoutY(50); boton5.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 0, imagen); } }); boton6.setText("SO"); boton6.setPrefSize(40, 40); boton6.setLayoutX(0); boton6.setLayoutY(100); boton6.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 3.665191429179, imagen); } }); boton7.setText("S"); boton7.setPrefSize(40, 40); boton7.setLayoutX(50); boton7.setLayoutY(100); boton7.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 4.712388980373, imagen); } }); boton8.setText("SE"); boton8.setPrefSize(40, 40); boton8.setLayoutX(100); boton8.setLayoutY(100); boton8.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { mover(gc, bicicleta, distancia, 5.23598775597, imagen); } }); root.setStyle("-fx-border-style: solid inside;" + "-fx-border-width: 2;" + "-fx-border-insets: 5;" + "-fx-border-radius: 5;" + "-fx-border-color: blue;"); root.getChildren().add(canvas); root.getChildren().add(boton1); root.getChildren().add(boton2); root.getChildren().add(boton3); root.getChildren().add(boton4); root.getChildren().add(boton5); root.getChildren().add(boton6); root.getChildren().add(boton7); root.getChildren().add(boton8); Scene scene = new Scene(root); scene.setOnKeyPressed(e -> { if (e.getCode() == KeyCode.NUMPAD1) { mover(gc, bicicleta, distancia, 3.665191429179, imagen); } else if (e.getCode() == KeyCode.NUMPAD2) { mover(gc, bicicleta, distancia, 4.712388980373, imagen); } else if (e.getCode() == KeyCode.NUMPAD3) { mover(gc, bicicleta, distancia, 5.23598775597, imagen); } else if (e.getCode() == KeyCode.NUMPAD4) { mover(gc, bicicleta, distancia, 3.141592653582001, imagen); } else if (e.getCode() == KeyCode.NUMPAD6) { mover(gc, bicicleta, distancia, 0, imagen); } else if (e.getCode() == KeyCode.NUMPAD7) { mover(gc, bicicleta, distancia, 2.09439510238807, imagen); } else if (e.getCode() == KeyCode.NUMPAD8) { mover(gc, bicicleta, distancia, 1.570796326791001, imagen); } else if (e.getCode() == KeyCode.NUMPAD9) { mover(gc, bicicleta, distancia, 0.5235987755970001, imagen); } else if (e.getCode() == KeyCode.PLUS) { //distancia++; } else if (e.getCode() == KeyCode.MINUS) { //distancia--; } }); stage.setScene(scene); stage.setTitle("Óyeme Carlos llévame en tu Bicicleta"); stage.show(); }catch(FileNotFoundException e){ System.out.println("Ocurió un error en la carga de imagen!"); System.out.println(e.getMessage()); }catch(Exception e){ System.out.println("error: no se pudo cargar la imagen"); System.out.println(e.getMessage()); } } //Mueve la bicicleta y dibuja su recorrido //Recibe como parámetro la distancia y dirección de la bicicleta private void mover(GraphicsContext gc, Bicicleta bicicleta, double distancia, double direccion, ImageView imagen){ double xInicial = 10+bicicleta.x; //El 400 se le resta para que aparezca hacia abajo, pues las coordenadas están invertidas double yInicial = 400-bicicleta.y; bicicleta.girar(direccion); bicicleta.avanzar(distancia); double xFinal = 10+bicicleta.x; double yFinal = 400-bicicleta.y; gc.strokeLine(xInicial, yInicial, xFinal, yFinal); System.out.println(bicicleta.x+" "+ bicicleta.y+" elo"); imagen.setX(xFinal); imagen.setY(yFinal-40); } //Mueve la bicicleta y dibuja su recorrido //Recibe como parámetro solo la distancia //Avanza en la dirección que ya tenía private void mover(GraphicsContext gc, Bicicleta bicicleta, double distancia){ double xInicial = 10+bicicleta.x; double yInicial = 400-bicicleta.y; bicicleta.avanzar(distancia); double xFinal = 10+bicicleta.x; double yFinal = 400-bicicleta.y; gc.strokeLine(xInicial, yInicial, xFinal, yFinal); System.out.println(bicicleta.x+" "+ bicicleta.y+"alo"); } }