em 3D, agora precisamos dar vidas a eles,
precisamos fazê-los movimentar,
e o movimento escolhido, é de giro,
poderíamos fazê-los percorrer os quatros cantos
da tela, indo e vindo, subindo e descendo,
mas deixaria o exemplo muito confuso,
então por enquanto assim será melhor.
Veja abaixo um vídeo com os cubos em movimento:
Veja abaixo uma imagem do programa em execução
Veja abaixo o código do programa:
import javafx.animation.RotateTransition;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;
public class PROJETO extends Application {
Canvas canvas = new Canvas ( 600, 360 );
GraphicsContext ctx = canvas.getGraphicsContext2D ( );
//
Criando um Group object
Group root = new Group ( );
//
Criando o scene object
Scene scene = new Scene ( root, 600, 340 );
//Desenhando as caixas
Box box_1 = new Box ( );
Box box_2 = new Box ( );
Box box_3 = new Box ( );
// Criando os materiais
PhongMaterial cria_material_1 = new PhongMaterial ( );
PhongMaterial cria_material_2 = new PhongMaterial ( );
PhongMaterial cria_material_3 = new PhongMaterial ( );
RotateTransition rot_1 = new RotateTransition ( );
RotateTransition rot_2 = new RotateTransition ( );
RotateTransition rot_3 = new RotateTransition ( );
Rotate rotateX_1 = new Rotate ( 20.0, Rotate.X_AXIS );
Rotate rotateZ_1 = new Rotate ( 10.0, Rotate.Z_AXIS );
Rotate rotateY_1 = new Rotate ( 30.0, Rotate.Y_AXIS );
Rotate rotateX_2 = new Rotate ( 20.0, Rotate.X_AXIS );
Rotate rotateZ_2 = new Rotate ( 10.0, Rotate.Z_AXIS );
Rotate rotateY_2 = new Rotate ( 30.0, Rotate.Y_AXIS );
Rotate rotateX_3 = new Rotate ( 20.0, Rotate.X_AXIS );
Rotate rotateZ_3 = new Rotate ( 10.0, Rotate.Z_AXIS );
Rotate rotateY_3 = new Rotate ( 30.0, Rotate.Y_AXIS );
//
/////////////////////////////////////////////////////////////////////////
public void Informe ( ) {
ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
ctx.setFill ( Color.RED );
ctx.fillText ( "Por: ", 250, 275 );
ctx.setFill ( Color.BLUE );
ctx.fillText ( "Samuel
Lima", 280, 275 );
ctx.setFill ( Color.BLACK );
ctx.fillText ( "sa_sp10@hotmail.com", 250, 290 );
ctx.setFill ( Color.RED );
ctx.fillText ( "MUITO
OBRIGADO", 250, 320 );
}
//
////////////////////////////////////////////////////////////////////////
public void cria_cubo_1 ( ) {
cria_material_1.setDiffuseColor ( Color.BLUE);
cria_material_1.setSpecularColor ( Color.LIGHTBLUE );
box_1.setMaterial ( cria_material_1 );
box_1.setWidth ( 50.0 );
box_1.setHeight ( 50.0 );
box_1.setDepth ( 50.0 );
box_1.setTranslateX ( 80 );
box_1.setTranslateY ( 80 );
box_1.setTranslateZ ( 140 );
box_1.setLayoutX ( 80 );
box_1.setLayoutY ( 100 );
// Definindo a duração da transição
rot_1.setDuration ( Duration.millis ( 1000 ) );
// Configurando o nó para a transição
rot_1.setNode ( box_1 );
// Ajustando o eixo da rotação
rot_1.setAxis ( Rotate.X_AXIS );
// Ajustando o ângulo da rotação
rot_1.setByAngle ( 360 );
// Definindo a contagem de ciclos
// para finalizar em 50 segundos
rot_1.setCycleCount ( 50 );
// Configurando o valor do reverso automático
// para falso
rot_1.setAutoReverse ( false );
// Iniciando a rotaão
rot_1.play ( );
}
//
/////////////////////////////////////////////////////////////////////////
public void cria_cubo_2 ( ) {
cria_material_2.setDiffuseColor ( Color.RED );
cria_material_2.setSpecularColor ( Color.LIGHTCORAL );
box_2.setMaterial ( cria_material_2 );
box_2.setWidth ( 50.0 );
box_2.setHeight ( 50.0 );
box_2.setDepth ( 50.0 );
box_2.setTranslateX ( 150 );
box_2.setTranslateY ( 80 );
box_2.setTranslateZ ( 150 );
box_2.setLayoutX ( 150 );
box_2.setLayoutY ( 100 );
// Definindo a duração da transição
rot_2.setDuration ( Duration.millis ( 1000 ) );
// Configurando o nó para a transição
rot_2.setNode ( box_2 );
// Ajustando o eixo da rotação
rot_2.setAxis ( Rotate.Z_AXIS );
// Ajustando o ângulo da rotação
rot_2.setByAngle ( 360 );
// Definindo a contagem de ciclos
// para finalizar em 50 segundos
rot_2.setCycleCount ( 50 );
// Configurando o valor do reverso automático
// para falso
rot_2.setAutoReverse ( false );
// Iniciando a rotaão
rot_2.play ( );
}
//
/////////////////////////////////////////////////////////////////////////
public void cria_cubo_3 ( ) {
cria_material_3.setDiffuseColor ( Color.YELLOW );
cria_material_3.setSpecularColor ( Color.LIGHTYELLOW );
box_3.setMaterial ( cria_material_3 );
box_3.setWidth ( 50.0 );
box_3.setHeight ( 50.0 );
box_3.setDepth ( 50.0 );
box_3.setTranslateX ( 220 );
box_3.setTranslateY ( 80 );
box_3.setTranslateZ ( 220 );
box_3.setLayoutX ( 220 );
box_3.setLayoutY ( 100 );
// Definindo a duração da transição
rot_3.setDuration ( Duration.millis ( 1000 ) );
// Configurando o nó para a transição
rot_3.setNode ( box_3 );
// Ajustando o eixo da rotação
rot_3.setAxis ( Rotate.Y_AXIS );
// Ajustando o ângulo da rotação
rot_3.setByAngle ( 360 );
// Definindo a contagem de ciclos
// para finalizar em 50 segundos
rot_3.setCycleCount ( 50 );
// Configurando o valor do reverso automático
// para falso
rot_3.setAutoReverse ( false );
// Iniciando a rotaão
rot_3.play ( );
}
//
/////////////////////////////////////////////////////////////////////////
public void start ( Stage stage ) {
stage.setTitle ( "JAVAFX -
CRIANDO E GIRANDO CUBOS 3D" );
// Usando fonte em italic
ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 15 ) );
// Criando uma moldura retangular em canvas
ctx.setStroke ( Color.BLACK );
ctx.setLineWidth ( 10.0 );
ctx.strokeRoundRect ( 10, 10, 580, 325, 10, 10 );
ctx.setFill ( Color.RED );
ctx.fillText ( "JAVAFX -
CRIANDO E GIRANDO CUBOS 3D", 160, 50 );
cria_cubo_1 ( );
cria_cubo_2 ( );
cria_cubo_3 ( );
Informe ( );
// Adicionando os ângulos das rotações as suas
rspectivas caixas
box_1.getTransforms ( ).addAll ( rotateX_1, rotateZ_1, rotateY_1 );
box_2.getTransforms ( ).addAll ( rotateX_2, rotateZ_2, rotateY_2 );
box_3.getTransforms ( ).addAll ( rotateX_3, rotateZ_3, rotateY_3 );
root.getChildren ( ).addAll ( canvas );
// Adicionando as caixas ao layout
root.getChildren ( ).addAll ( box_1, box_2, box_3 );
// Adicionando o scene para o satge
stage.setScene ( scene );
// Exibindo 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.