Mostrando entradas con la etiqueta javaFX. Mostrar todas las entradas
Mostrando entradas con la etiqueta javaFX. Mostrar todas las entradas

miércoles, 26 de mayo de 2010

Imagenes en javaFX y juego simple

Bueno, ahora vamos a aprender a introducir una imagen en nuestro programa en javaFX, es muy facil y podemos hacerlo con este trozo de codigo:


ImageView {
image: Image {
url: "{__DIR__}imagen/campo.jpg"
}
}


Por supuesto sobre las imagenes podemos usar las funciones de ratón, teclado y todas las que hemos visto antes, si quereis poner la imagen en un sitio concreto solo tendreis que darle un valor a la x y la y del ImageView.

Bien, una vez visto esto decidí hacer un jueguito rapido, saldrá un plato en la pantalla al cual tendremos que disparar haciendole click con el ratón, una vez hecho esto aparecerá otro plato y asi iremos acumulando puntos, es algo cutre pero bueno, asi juntamos lo poquito que hemos ido viendo, aqui os dejo el codigo y también os dejo el proyecto para descargar "con las imagenes y todo incluido"


/*
* Main.fx
*
* Created on 26-may-2010, 10:35:52
*/

package jueguito;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingButton;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.KeyEvent;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.ext.swing.SwingLabel;

//Incluimos la libreria Math para poder usar numeros aleatorios
import java.lang.Math;

/**
* @author Paco
*/

Stage {
title: "Jueguito de prueba"
scene: Scene {
width: 550
height: 369
//Variables que usaremos para el centro en los ejes X e Y de nuestra mira
var x = 100
var y = 50

//variables para posicion del plato
var xplato = 50
var yplato = 50

//Puntos acumulados
var puntos = 0

//Imagen de nuestra mirilla
var miMira = ImageView {
x: bind x, y: bind y
image: Image {
url: "{__DIR__}imagen/mira.jpg"
}
}

//Variable string que pinta la puntuacion en pantalla
var puntuacion = SwingLabel {
text: "0000000"
}

//Variable que se encarga de dibujar el plato en pantalla
var plato = ImageView {
x: bind xplato, y: bind yplato
image: Image {
url: "{__DIR__}imagen/plato.jpg"
}

//Cuando le hacemos click se lanzará esta funcion
onMouseClicked: function (e: MouseEvent): Void {
puntos= puntos + 10; //suma de puntos
puntuacion.text = puntos.toString(); //refresco del marcador en pantalla
//Colocamos el plato en una nueva posición
xplato = (Math.random() * 500).intValue();
yplato = (Math.random() * 360).intValue()
}

}

//Insertamos todo en nuestro content
content: [

//Dibujamos un fondo
ImageView {
image: Image {
url: "{__DIR__}imagen/campo.jpg"
}

//Funcion para que el raton siempre este en el centro de la mira
onMouseMoved: function (e: MouseEvent): Void {

//Resto estas cantidades porque la mira mide unos 40
x=e.x-21;
y=e.y-20;
}
}

//Coloco las imagenes en el orden que quiero
plato,miMira, puntuacion

]
}
}





Si copypasteais el codigo directamente no funcionará porque no teneis las imagenes que uso en los directorios, asi que como he dicho antes, aqui os dejo la descarga del proyecto:

viernes, 21 de mayo de 2010

Usando el ratón en javaFX

Bueno, ahora vamos a interaccionar con el programita con nuestro ratón "también podemos hacerlo con el teclado de similar forma" lo unico que tenemos que hacer es coger la función que deseemos de la paleta, en este caso onMouseDragged, aqui dejo el código comentado, pero no tiene mayor complicación, aun asi siempre podeis dejarme algun comentario si surge algunda duda:


/*
* Main.fx
*
* Created on 21-may-2010, 12:23:41
*/

package botones;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingButton;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.KeyEvent;

/**
* @author Paco
*/

Stage {
title: "Aplicación de ratón"
scene: Scene {
width: 300
height: 300

var miCirculo = Circle {
//Variables que usaremos para el centro en los ejes X e Y de nuestro circulo
var x = 100
var y = 50

centerX: bind x, centerY: bind y //Posicion del circulo
radius: 20 //Tamaño del radio
fill: Color.BLACK //Color del circulo

//Esta funcion se ejecutará cuando tengamos el boton del raton pulsado y lo tengamos sobre el circulo
onMouseDragged: function (e: MouseEvent): Void {
//El centro del circulo lo situamos en la posicion x,y de nuestro ratón
x=e.x;
y=e.y;
}
}


content: [
//Ponemos el circulo en el content
miCirculo


]
}
}


Hasta otra, espero poder tener algo curiosito pronto.

martes, 18 de mayo de 2010

Añadiendo botones en javaFX

Bueno, sigo indagando poco a poco con javaFX y ahora interactuaremos con el programa, es muy simple pero asi ademas pongo en juego algún concepto nuevo como las variables y como funcionan o los metodos que tienen algunos objetos, el resultado será algo como esto:





Mas simple imposible, lo unico que hago es poner dos botones con los que podemos desplazar nuestro circulo hacia un lado o hacia otro, el código del mismo es este:


/*
* Main.fx
*
* Created on 18-may-2010, 10:44:54
*/

package botones;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingButton;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;

/**
* @author Paco
*/

Stage {
title: "Aplicación con botones"
scene: Scene {
width: 300
height: 80
//Vale vamos a declarar una variable, estas en un principio no tienen un tipo asignado
//el tipo de valor que tendrá dependerá del valor que le asignemos
//declararé un circulo como variable para poder cambiar sus valores mientras se usa el programa
var miCirculo = Circle {
centerX: 100, centerY:50 //Posicion del circulo
radius: 20 //Tamaño del radio
fill: Color.BLACK //Color del circulo
}


content: [
//Vale, pondremos dos botones para poder mover nuestro circulo a la izquierda
//y a la derecha, recuerdo que se puede hacer desde la paleta de netbeans
//algo que es muy comodo
SwingButton {
//Posicion y tamaño del boton
translateX: 0
translateY: 0
width:100
text: "<<" //Texto del boton
//Bien, ahora en action: function() podemos poner lo que queremos que suceda cuando
//pulsemos en el boton
action: function()
{
miCirculo.centerX=miCirculo.centerX-5; //en este caso desplazo el circulo a la izquierda
}
}

//Este botón funciona igual pero para desplazar el circulo en la otra direccion
SwingButton {
translateX: 110
translateY: 0
width:100
text: ">>"
action: function()
{
miCirculo.centerX=miCirculo.centerX+5;
}
}
//Inserto el circulo declarado en la ventana... esto lo hacemos porque si inserto aqui
//un circulo no podria cambiar sus valores pero al tenerlos todos en una variable eso cambia
miCirculo
]
}
}


Estas variables que tenemos que declarar antes del content pueden ser numeros enteros, flotantes, circulos, botones, cadenas de caracteres, etc. Depende de nuestra creativa mente el uso que les queramos dar, comento otra cosa, los objetos que tenemos en el content se dibujaran en ese orden, es decir, en este caso primero el botón <<, después el botón >> y por ultimo el circulo, ¿que quiere decir esto? que si ambos ocupan la misma posición en pantalla el circulo seria el que se veria delante de todos los elementos y el botón << se quedaria detras y por lo tanto invisible e inutilizado.

Para el proximo post intentaré insertar en web el programita que haga con javaFX, ahora mismo netbeans me genera una página html desde la que se accede al programa, asi que no creo que vaya a tener problema para pasar ese codigo al blog y hacer alguna demostración. Hasta otra.

lunes, 17 de mayo de 2010

Tutorial javaFX: Pintando formas simples

Debido a la escasez de material sobre javafx y aun siendo un poco nuevo con el,
voy a intentar hacer un tutorial de javafx, yo usaré NetBeans como IDE, también pensé en eclipse pero me daba muchos problemas a la hora de dejarlo todo listo para usar javafx podeis descargar netbeans para usarlo con javafx de aquí lo suyo para ahorrar en espacio es coger la que incluye solo javafx, pero eso ya al gusto de cada uno.

Bien, una vez tenemos instalado netbeans "Instalarlo es la tipica pantalla siguiente siguiente, sin mas" tendremos todo lo necesario para empezar, pulsamos sobre File/New Proyect y ya tendremos este codigo que nos genera por defecto:

/*
* Main.fx
*
* Created on 17-may-2010, 13:04:09
*/

package javafxapplication1;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

/**
* @author Paco
*/

//Stage es el "main" de la aplicación
Stage {
//Esto es simple, es el titulo de la aplicación, es el texto que aparece
//en la parte superior de la ventanita
title: "Application title"
//La scene que incluimos dentro de la Stage es la ventana de nuestro programa
//y dentro es donde creamos todos los objetos y lo que queramos mostrar
scene: Scene {
//variables para definir el ancho y alto de nuestra ventana
width: 250
height: 80

//En el content es donde tenemos todos los elementos graficos que
//vamos a mostrar
content: [
//Con text insertamos un texto dentro de nuestro content
Text {
font : Font {
size : 16
}
x: 10
y: 30
content: "Application content"
}
]
}
}


Con este código se genera una ventana simple como esta:




Las lineas que tenemos aqui son realmente simples y las he dejado en ese mismo trozo de codigo comentadas, aunque ahora tocaremos un poquito el codigo.

Vamos a insertar en nuestra aplicación algunas formas, para eso nos vamos a la parte derecha a la paleta y pulsamos sobre basic shapes, vereis que tenemos varias formas como pueden ser lineas o circulos, podemos coger la que queramos y arrastrarla sobre el codigo, con lo que ya se genera un codigo genérico que podemos modificar para darle la forma que queramos, en mi caso he cogido el circulo y lo he arrastrado antes del text.

Ya con esto podemos poner varias formas sobre nuestra ventana y modificar tanto la ventana como las demas formas de tamaño y color


/*
* Main.fx
*
* Created on 17-may-2010, 13:04:09
*/

package javafxapplication1;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;

/**
* @author Paco
*/

//Stage es el "main" de la aplicación
Stage {
//Esto es simple, es el titulo de la aplicación, es el texto que aparece
//en la parte superior de la ventanita
title: "Application title"
//La scene que incluimos dentro de la Stage es la ventana de nuestro programa
//y dentro es donde creamos todos los objetos y lo que queramos mostrar
scene: Scene {
//variables para definir el ancho y alto de nuestra ventana
width: 250
height: 250

//En el content es donde tenemos todos los elementos graficos que
//vamos a mostrar
content: [

//Con circle pintamos nuestro circulo
Circle {
centerX: 100, centerY: 100 //Posición central en el eje X e Y de la ventana
radius: 40 //Tamaño del radio
fill: Color.RED //Color del relleno
}


//Con text insertamos un texto dentro de nuestro content
Text {
font : Font {
size : 16
}
x: 10
y: 30
content: "Application content"
}
]
}
}



miércoles, 16 de diciembre de 2009

Bienvenidos a JavaFX

¡¡Buenos días Señores!!

¡Qué ganas tenía de volver a deciros esta frase!. Y es que, las cosas hay que reconocerlas, me encantó daros clase, no sólo porque a muchos os conociera de antes, sino también porque tuve la suerte de poder dar las clases de programación, que es aquello que más me gusta en la Informática, y por supuesto, porque mostrasteis un interés desmesurado por la programación, aunque por desgracia no pudiéramos avanzar con todo el ritmo que a mí me hubiese gustado.

Pero de repente me encuentro que estáis en este blog, ya lo sabía del año pasado pero no esperaba que esto siguiera activo, así que con vuestro permiso, pongo los pies en este rinconcito de la web.

Pero no vengo sólo a leer, sino a intentar aportaros algo y, aunque ya no sea vuestro profesor, procuraré orientaros en lo que considero que debéis conocer, y resolver vuestras dudas, si las tenéis y yo conozco la respuesta.

Bueno, dicho todo esto, y agradeciendo otra vez que me dejéis entrar en el blog, me gustaría empezar con algo bastante bonito dentro de la programación Java. Todos sabéis la gran difusión que está teniendo Flash como herramienta de desarrollo de contenidos multimedia, sobretodo en el ámbito de Internet. Pero también estaréis enterados de que Action Script CS3 (que es, si no me equivoco, la actual herramienta de programación de Flash) despierta muchos recelos entre los desarrolladores, y posee además una cantidad de librerías muy limitada. ¿Qué os parecería si tuvieramos una nueva forma de crear contenidos multimedia para la web, con una apariencia que concuerda con la de la web 2.0?, ¿Qué os parecería, además, si la aplicación que desarrolláis pudiese, con el mismo código, sin necesidad de compilación, funcionar no sólo en multiplataforma, sino en multidispositivo, a través de ordenadores de todo tipo, móviles, PDA's, y hasta la nueva generación de televisores? ¿Pero y si además todo está basado en tecnología Java y se trata, en realidad, de una librería que supera a SWING en todos los sentidos?, ¿y si además la interfaz de las aplicaciones de este tipo se pudiera personalizar simplemente con una hoja de estilos en formato CSS?. Pero esto no es todo, además de lo dicho es que esta nueva tecnología nos pone al alcance de la mano la posibilidad de crear videojuegos de una forma extremadamente sencilla y visual. De manera que estamos hablando de una tecnología que se encuentra naciendo de la mano de Sun Microsystems y apoyada por varias comunidades de código libre, cuyas aplicaciones tienen una apariencia inmejorable, que se puede personalizar a través de CSS, y de carácter tan general que puede funcionar independientemente en ordenadores, PDA's, móviles, televisores de nueva generación, y que tiene en su interior todas las librerías Java actuales, de manera que podemos desde crear un entorno en 3D para un videojuego, a utilizar los puertos de nuestro ordenador, grabar CD's, conectarnos a cientos de BBDD, obtener información y recursos de toda la web para nuestro programa, y un milenario etc de posibles aplicaciones. Pero es que además de todo esto, vosotros hacéis una aplicación en forma de "applet" (es decir, embebido en una página) y si el usuario quiere instalarla en su ordenador para que funcione como aplicación independiente sólo tiene que arrastrar esta ventana desde el navegador al escritorio, y nada más. No contentos con esto, uno de los principales entornos de desarrollo en código libre para Java del panorama (NetBeans) ya incorpora todo lo que necesitamos para crear nuestro programas en la nueva tecnología.

Pues de toda esta monserga, que sepáis que la tecnología de la que estamos hablando tiene algo más de un año de vida, se está imponiendo con rapidez, y se llama JavaFX.

Hoy no tengo mucho más tiempo, pero os dejo un enlace para que vayáis viendo algo de todo esto, y en poco tiempo, empezaremos a explicar los ejercicios que podemos encontrar en la web, y a aprender de ellos.

El que esté interesado en esto, que empiece por:
Para empezar a profundizar:
El que quiera que se le haga la boca agua con lo que se puede hacer con muy poquitas líneas de código:

Por supuesto, no olvidéis que para que podáis utilizar JavaFX como desarrolladores, os haría falta descargar la JDK de referencia:

Un consejo, las páginas que os he puesto están en inglés pero no debéis asustaros, ya que el inglés técnico, además de ser bastante fácil una vez que aprendes lo básico, es necesario para los estudios que estáis realizando, y yo estoy dispuesto a ayudaros en todo lo que no entendáis. ¡Ah!, y por supuesto, no olvidéis que tenéis a vuestra disposición: