e traçamos rotas dentro deste caminho
usando Moveto para o ponto de partida,
e LineTo para as outras rotas,
de sorte que as quatro rotas formam
um quadrado, e nestas estradas invisível,
se move a nossa esfera 3D.
O início dos ciclos depende do acionamento
de um botão (Início), mas podemos
pará-lo a qualquer momento clicando
no botão (Pausa), porém se o botão pausa,
não for acionado, o programa encerra as
operações automaticamente no fim de 60
segundos, e posiciona a esfera no ponto
de partida.
Veja abaixo uma imagem do programa em execução:
Veja abaixo um vídeo com o programa funcionando:
Veja abaixo o código do programa:
import javafx.animation.PathTransition;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.util.Duration;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Sphere;
public class PROJETO extends Application {
// Criando o objecto
Pane
Pane root = new Pane ( );
// Criando o objecto scene
Scene scene = new Scene ( root, 600, 310 );
Canvas canvas = new Canvas ( 600, 310 );
GraphicsContext ctx = canvas.getGraphicsContext2D ( );
// Criando um caminho
(Path)
Path path = new Path ( );
// Movendo-se para o ponto de partida
MoveTo moveTo = new MoveTo ( 10, 160 );
// Criando a primeira linha
LineTo linha_1 = new LineTo ( 460, 160 );
// Criando a segunda linha
LineTo linha_2 = new LineTo ( 460, 10 );
// Criando a terceira linha
LineTo linha_3 = new LineTo ( 10, 10 );
Button botao_Inicio = new Button ( "Inicio" );
Button botao_Pausa = new Button ( "Pausa" );
// Desenhando uma
esfera
final Sphere esfera = new Sphere ( 40 );
// Criando o material da esfera
PhongMaterial cria_material = new PhongMaterial ( );
//
/////////////////////////////////////////////////////////////////////////
public void Informe ( ) {
ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
ctx.setFill ( Color.RED );
ctx.fillText ( "Por: ", 200, 220 );
ctx.setFill ( Color.BLUE );
ctx.fillText ( "Samuel
Lima", 240, 220 );
ctx.setFill ( Color.BLACK );
ctx.fillText ( "sa_sp10@hotmail.com", 200, 235 );
ctx.setFill ( Color.RED );
ctx.fillText ( " MUITO
OBRIGADO", 250, 290 );
}
//
/////////////////////////////////////////////////////////////////////////
public void stop_And_PlayButton ( ) {
cria_material.setDiffuseColor ( Color.DARKBLUE );
cria_material.setSpecularColor ( Color.BLUE );
// Posiciona a esfera na horizontal e vertical
esfera.setLayoutX ( 60 );
esfera.setLayoutY ( 80 );
esfera.setMaterial ( cria_material );
// Criando a transição do path
PathTransition pathTransition = new PathTransition ( );
// Definindo a duração da transição
pathTransition.setDuration ( Duration.millis ( 2000 ) );
// Configurando o nó
para a transição
pathTransition.setNode ( esfera );
// Configurando o caminho para a transição
pathTransition.setPath ( path );
// Configurando a contagem de ciclos para a
transição
pathTransition.setCycleCount ( 60 );
// Configurando o valor de reversão automática
para true
pathTransition.setAutoReverse ( false );
botao_Inicio.setOnMouseClicked ( ( new EventHandler < MouseEvent > ( ) {
public void handle ( MouseEvent event ) {
System.out.println ( "Movimentando!!!" );
pathTransition.play ( );
}
} ) );
botao_Inicio.setStyle (
"-fx-text-fill:
black;"
+ "-fx-background-color:
#DFB951;"
+ "-fx-border-radius:
20;"
+ "-fx-background-radius:
20;"
+ "-fx-padding:
5;"
);
botao_Pausa.setStyle (
"-fx-text-fill:
black;"
+ "-fx-background-color:
#DFB951;"
+ "-fx-border-radius:
20;"
+ "-fx-background-radius:
20;"
+ "-fx-padding:
5;"
);
botao_Inicio.setLayoutX ( 330 );
botao_Inicio.setLayoutY ( 250 );
botao_Pausa.setLayoutX ( 250 );
botao_Pausa.setLayoutY ( 250 );
botao_Pausa.setOnMouseClicked ( (
new EventHandler < MouseEvent > ( ) {
public void handle ( MouseEvent event ) {
System.out.println ( "Parado!!!" );
pathTransition.stop ( );
}
} ) );
}
//
/////////////////////////////////////////////////////////////////////////
@Override
public void start ( Stage stage ) {
// Configurando um título para o stage
stage.setTitle ( "JAVAFX -
DESENHANDO E MOVENDO OBJETOS 3D" );
//Criando uma moldura retangular em canvas
ctx.setStroke ( Color.rgb ( 96, 255, 0 ) );
ctx.setLineWidth ( 10.0 );
ctx.strokeRoundRect ( 10, 10, 580, 290, 10, 10 );
ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 15 ) );
ctx.setFill ( Color.RED );
ctx.fillText ( "JAVAFX -
DESENHANDO E MOVENDO OBJETOS 3D", 125, 40 );
Informe ( );
stop_And_PlayButton ( );
// Adicionando o scene para o stage
stage.setScene ( scene );
// Adicionando todos os elementos ao path
path.getElements ( ).addAll ( moveTo, linha_1, linha_2, linha_3 );
root.getChildren ( ).addAll ( esfera, canvas, botao_Inicio , botao_Pausa );
//Exibindo todo o conteúdo do stage
stage.show ( );
}
//
/////////////////////////////////////////////////////////////////////////
public static void main ( String args [ ] ) {
launch ( args );
}
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.