【问题标题】:JavaFX - how refresh scene in every two seconds [duplicate]JavaFX - 如何每两秒刷新一次场景[重复]
【发布时间】:2014-10-28 02:38:19
【问题描述】:

您好,我想用 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;
    } 
}

有什么想法吗?

【问题讨论】:

  • 我不在 JavaFX 中工作。但我所知道的是,您应该使用计时器来刷新场景,因为您实现了覆盖包含游戏视觉效果的组件的绘制方法。在计时器中,它应该有游戏逻辑的更新和修改的结果。我在游戏中使用了 java.util.Timer,但我不是专业人士,它适合我的解决方案。

标签: java netbeans javafx


【解决方案1】:

现在问题来了: 在 JavaFX 中,没有像 Swing 中那样喜欢 repaint() 或 validate() 的空白。

但你可以编写自己的 void 来刷新整个窗口。

每 2 秒:

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

    }
}, 2000, 2000);

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2011-03-17
      • 2016-03-21
      • 2012-06-13
      • 2014-06-01
      相关资源
      最近更新 更多