Buscar este blog

martes, 9 de diciembre de 2008

Pelotita en JavaFX

Aqui otro ejemplo, se trata de una pelotita que va rebotando, tanto en el piso, como en las paredes. en el caso del movimiento en y, la "gravedad" reduce su velocidad o aumenta, y se le puso un efecto para que "lata", cambiando su radio en cada iteracion
/*
 * Main.fx
 *
 * Created on 08/12/2008, 11:23:36 PM
 */

package rebotes;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.scene.effect.*;

/**
 * @author GaSK
 */

var pelota : pelota[]=[pelota{}];

var timeline : Timeline = Timeline {
    repeatCount: Timeline.INDEFINITE
    keyFrames: KeyFrame {
        time: 1ms
        canSkip: true
        action: function() {
            update();
        }
    }
};

function update() : Void {
    pelota[0].update();
}

Stage {
    scene: Scene {
        width: 400
        height: 400
        fill: Color.BLACK
        content: bind pelota
    }
    title: "Pelotita"
}

timeline.play();

class pelota extends CustomNode {
    var x : Number;
    var y : Number;
    var cx : Number;
    var cy : Number;
    var ccy : Number;
    var radio: Number;
    var cradio:Number;
    override function create(): Node {
        radio=25;
        cx=1;
        cy=1;
        cradio=1;
        x=radio;
        y=radio;
        return Group {
            content: [
                Circle {
                    centerX: bind x, 
                    centerY: bind y
                    radius: bind radio
                    fill: Color.WHITE
                    effect: bind InnerShadow{radius:radio*0.8}
                },
            ]

        };
    }
    function update(): Void {
        x += cx;
        if (x+radio>400){
            cx *= -1;
            x=-radio+400;
        }
        if ((x400){
            y=400-radio;
            cy *= -0.8;
            if((cy<0)and(cy>-2)){
                cy = -(400+radio)/50;
            }
        }
        radio+=cradio;
        if((radio>26)or(radio<25)){
            cradio*=-1;
        }
    }
}

No hay comentarios.: