temporizador, que é chamado em cada quadro
enquanto está ativo. Uma classe de extensão deve
substituir o identificador de método (longo),
que será chamado em cada quadro.
Os métodos start () e stop ()
que pertencem a classe,
permitem iniciar e parar o temporizador.
Para criarmos uma animação,
precisamos alterar as propriedades do nó,
como tamanho, localização, cor, etc...
Conforme o tempo passa, a animação
da timeline (linha do tempo),
atualiza os valores da propriedade.
Aqui estamos mostrando um simples exemplo
de animação usando a classe abstrata
AnimationTimer, onde um lindo falcão
voa tranquilamente no céu,
ele voa nos limites da tela e faz seu retorno
antes de colidir nas margens.
Mas isto é coisa muito simples perto
do que se pode fazer com a riqueza de recursos
das classes de animação.
Veja abaixo uma imagem do programa em execução:
Veja abaixo o código do programa:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class PROJETO extends Application {
Canvas canvas = new Canvas ( 600, 360 );
GraphicsContext ctx = canvas.getGraphicsContext2D
( );
Pane root = new Pane ( );
Scene scene = new Scene ( root );
//retorna o valor atual do timer do sistema
//disponível mais preciso, em nanossegundos
final long startNanoTime = System.nanoTime ( );
Boolean a = false;
Text t = new Text ( );
Text t_1 = new Text ( );
//
/////////////////////////////////////////////////////////////////////////
public void Informe ( ) {
t.setFont ( Font.font ( null, FontWeight.BOLD,
FontPosture.ITALIC, 22 ) );
t.setCache ( true );
t.setX ( 120.0 );
t.setY ( 40.0 );
t.setFill ( Color.BLACK );
t.setText ( "JAVAFX -
USANDO AnimationTimer" );
t_1.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
t_1.setX ( 240 );
t_1.setY ( 290 );
t_1.setFill ( Color.BLACK );
t_1.setText ( "Por: Samuel
Lima\n"
+ "sa_sp10@hotmail.com\n\n"
+" MUITO OBRIGADO");
}
//
////////////////////////////////////////////////////////////////////////
public void flyingFalcao ( ) throws FileNotFoundException {
// Carregando a imagem
Image falcao_1 = new Image ( new FileInputStream (
"H:\\eclipse
luna_two\\" + "PROJETO\\PROJETO\\src\\"
+ "Foto\\flyingEagle_1.gif" ) );
Image falcao_2 = new Image ( new FileInputStream (
"H:\\eclipse
luna_two\\" + "PROJETO\\PROJETO\\src\\"
+ "Foto\\flyingEagle_2.gif" ) );
Image ceu = new Image ( new FileInputStream (
"H:\\eclipse
luna_two\\" + "PROJETO\\PROJETO\\src\\"
+ "Foto\\céu.png" ) );
new AnimationTimer ( ) {
public void handle ( long currentNanoTime ) {
double timer = ( currentNanoTime - startNanoTime ) / 1000000000.0;
//Estes casts foram
necessário para calcular-mos
//as corrdenadas para
a troca das imagens do falcão
int x = ( int ) ( 155 + 260 * Math.cos ( timer ) );
int y = ( int ) ( 150 + 50 * Math.sin ( timer ) );
ctx.drawImage ( ceu, 15, 15, 570, 330 );
if ( a == false && x <= 414 ) {
ctx.drawImage ( falcao_2, x + 110, y, 53, 53 );
if ( x < -100 )
a = true;
}
if ( a == true ){
ctx.drawImage ( falcao_1, x + 110, y, 53, 53 );
if ( x == 414 )
a = false;
}
//System.out.println (
x );
}
}.start ( );
}
//
/////////////////////////////////////////////////////////////////////////
public void start ( Stage stage ) throws FileNotFoundException {
stage.setTitle ( "JAVAFX -
USANDO AnimationTimer" );
// 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, 340, 10, 10 );
flyingFalcao ( );
Informe ( );
root.getChildren ( ).addAll ( canvas, t, t_1 );
stage.setScene ( scene );
stage.show ( );
}
//
/////////////////////////////////////////////////////////////////////////
public static void main ( String [ ] args ) {
launch ( );
}
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.