0

Hi I want to create a simple game in JavaFx but I have problem. I create the scene with backgorund and images of people.

This source places 3 images of persons on background in random place. Unfortunately I can't make that images moves.

Now i want refresh scene in every 2 seconds that persons will be places in new place.

package Game;

import java.util.Random;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.effect.BoxBlur;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Game extends Application {
    final static int h = 775;
    final static int w = 523;

    @Override
    public void start(Stage primaryStage) throws InterruptedException {
        Game x = new Game();
        Group root = new Group(x.background, x.persons);
        x.pokaz_tlo.setEffect(new BoxBlur());
        x.pokaz_tlo.setOpacity(0.9);

        primaryStage.setTitle("Good game");
        primaryStage.setScene(new Scene(root, h, w));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }   
}

class Game{
    final static Image background = new Image(Game.class.getResource("background.jpg").toString());
    final static Image person1 = new Image(Game.class.getResource("person1.jpg").toString());
    final static Image person2 = new Image(Game.class.getResource("person2.jpg").toString());
    final static Image person3 = new Image(Game.class.getResource("person3.jpg").toString());

    ImageView show_background = new ImageView(background);
    ImageView show_person1 = new ImageView(person1);
    ImageView show_person2 = new ImageView(person2);
    ImageView show_person3 = new ImageView(person3);

    Group persons = pokaz_ukrywaj_ludzi(show_person1, show_person2, show_person3);

    public int randInt(int min, int max) {
        Random rand = new Random();
        int randomNum = rand.nextInt((max - min) + 1) + min;

        return randomNum;
    }  

    public Group pokaz_ukrywaj_ludzi(ImageView person1, ImageView person2, ImageView person3) {
        final int[] x = {164, 320, 475};
        final int[] y = {75, 270};

        person1.setTranslateX(x[randInt(0,2)]);
        person1.setTranslateY(y[randInt(0,1)]);

        person2.setTranslateX(x[randInt(0,2)]);
        person2.setTranslateY(y[randInt(0,1)]);

        person3.setTranslateX(x[randInt(0,2)]);
        person3.setTranslateY(y[randInt(0,1)]);

        Group l = new Group(person1, person2, person3);              
        return l;
    } 
}

Any idea?

user3740840
  • 15
  • 1
  • 4
  • I don't work in JavaFX. but what I do know is that you should make use of a timer to refresh your scene where the refreshing occurs due to your implementation of overriding the paint method of the component containing the visuals of the game. In the timer, it should have the updating of the game logic and resultant the painting of the modifications. I used java.util.Timer for my game, but I am no professional and it had suited my solution. – Richard Kenneth Niescior Sep 03 '14 at 17:02

2 Answers2

2

Now here's the problem: In JavaFX there is no void to like repaint() or validate() like in Swing.

But you can write your own void to refresh the whole window.

Every 2 sec:

new Timer().scheduleAtFixedRate(new TimerTask() {   
    public void run() {
        // Here comes your void to refresh the whole application.

    }
}, 2000, 2000);
siegy22
  • 4,295
  • 3
  • 25
  • 43
2

You need to use a JavaFX Animation Timer

http://blog.netopyr.com/2012/06/14/using-the-javafx-animationtimer/

Robert3452
  • 1,354
  • 2
  • 17
  • 39