domingo, 9 de setembro de 2018

JavaFX - movendo esfera 3D com setas do teclado

Já ensinamos a criar animações e efeitos em fontes,
em objetos 2D e 3D, movimentos de objetos em trilhas 
com caminho pré-programado, contadores digitais ascendente,
e descendente, capturas de coordenadas da tela do scene,
desenhar e rotacionar objetos em 3D, pausar e iniciar ciclos, 
 arrastar objetos dentro da tela com o mouse,
arrastar objetos com o mouse e detectar colisões, 
arrastar objetos 2D com as setas do teclado etc...
Agora vamos mostrar como arrastar uma esfera
3D 
com as setas do teclado  e em breve,
ensinaremos a detectar colisões destes objetos,
 
arrastando com as setas do teclado, e também ensinaremos
como arrastar imagens com as setas do teclado e o mouse.
depois disto todos os que acompanharam estes posts
estarão capacitados de criar seus próprios jogos com êxito.


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.application.Application;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.input.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.stage.Stage;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.shape.*;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;

public class PROJETO extends Application {
     private static int MOVE_ESFERA_X = 0;
     private static int MOVE_ESFERA_Y = 0;
     Group root = new Group ( );
     Scene scene = new Scene ( root, 600, 300 );
     Canvas canvas = new Canvas ( 600, 300 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     // 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.BOLD, 13 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "Por: ", 200, 230 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 240, 230 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "sa_sp10@hotmail.com", 200, 245 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " MUITO OBRIGADO", 250, 280 );
     }
     // /////////////////////////////////////////////////////////////////////////
     private void move_esfera ( ) {
         scene.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                   if ( event.getCode ( ) == KeyCode.RIGHT ) {
                        if ( MOVE_ESFERA_X <= 476 ) {       
                            MOVE_ESFERA_X = MOVE_ESFERA_X + 5;
                            esfera.setTranslateX ( MOVE_ESFERA_X );
                        }
                   }
                   else if ( event.getCode ( ) == KeyCode.LEFT ) {
                        if ( MOVE_ESFERA_X >= 10 ) {
                            MOVE_ESFERA_X = MOVE_ESFERA_X - 5;
                            esfera.setTranslateX ( MOVE_ESFERA_X );
                        }
                   }
                   else if ( event.getCode ( ) == KeyCode.UP ) {
                        if ( MOVE_ESFERA_Y >= -10 ) {
                            MOVE_ESFERA_Y = MOVE_ESFERA_Y - 5;
                            esfera.setTranslateY ( MOVE_ESFERA_Y );
                        }
                   }
                   else if ( event.getCode ( ) == KeyCode.DOWN ) {
                        if ( MOVE_ESFERA_Y <= 140 ) {
                            MOVE_ESFERA_Y = MOVE_ESFERA_Y + 5;
                            esfera.setTranslateY ( MOVE_ESFERA_Y );
                        }
                   }   
              }
         } );
     }
     // /////////////////////////////////////////////////////////////////////////
     public int listaFiguras ( ) {
         cria_material.setSpecularColor ( Color.rgb ( 128, 0, 128 ) );
         cria_material.setDiffuseColor ( Color.rgb ( 186, 85, 211 ) );      
         // Posiciona a esfera na horizontal e vertical
         esfera.setLayoutX ( 60 );
         esfera.setLayoutY ( 100 );
         esfera.setMaterial ( cria_material );
         move_esfera ( );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) {
         stage.setTitle ( "JAVAFX - MOVENDO ESFERA 3D COM SETAS DO TECLADO" );
         ctx.setStroke ( Color.PINK );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 5, 5, 590, 290, 5, 5 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 20 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ("JAVAFX - MOVENDO ESFERA 3D COM SETAS DO TECLADO",25,40);           
         listaFiguras ( );
         Informe ( );
         root.getChildren ( ).addAll ( canvas, esfera );
         stage.setScene ( scene );
         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.