2014-09-03 215 views
0

嗨我想在JavaFx中創建一個簡單的遊戲,但我遇到了問題。我用backgorund和人的圖像創建場景。JavaFX - 每兩秒刷新一次場景

此源放置在隨機地方背景3人的圖像。 不幸的是,我不能讓圖像移動。

現在我想每2秒鐘刷新一次場景,人們將在新的地方。

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; 
    } 
} 

任何想法?

+0

我不JavaFX的工作。但我所知道的是,您應該利用定時器來刷新您的場景,因爲您執行重寫包含遊戲畫面的組件的paint方法的場景。在計時器中,它應該具有遊戲邏輯的更新並由此產生修改的繪製。我爲我的遊戲使用了java.util.Timer,但我並不專業,它適合我的解決方案。 – 2014-09-03 17:02:45

回答

1

現在是這個問題: 在JavaFX中沒有像Swing一樣的重繪()或驗證()的void。

但是你可以編寫自己的void來刷新整個窗口。

每2秒:

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

    } 
}, 2000, 2000);