Java FX制作小游戏

2024-01-29 16:53:26 浏览数 (1)

Java FX制作小游戏

在全栈学习Java中,了解如何使用Java FX创建图形化界面是很重要的一步。本篇文章将向您展示如何使用Java FX制作一个简单的小游戏。我们将使用Java FX的各种功能来创建游戏窗口、处理用户输入和显示游戏元素。

前提条件

在开始之前,确保您具备以下环境:

  • 最新的JDK(Java Development Kit)
  • 一个集成开发环境(IDE),如Eclipse或IntelliJ IDEA

创建一个Java FX项目

首先,我们需要创建一个Java FX项目。按照以下步骤:

  1. 打开您的IDE,并创建一个新的Java项目。
  2. 在项目配置中,选择Java FX作为项目的库和框架。
  3. 创建一个主类 Main ,它将成为我们游戏的入口点。

创建游戏窗口

接下来,我们将创建一个游戏窗口作为游戏的主界面。在 Main 类中,编写以下代码:

代码语言:javascript复制
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 创建一个Pane作为根节点
        Pane root = new Pane();
        // 创建一个Scene,并将根节点作为参数传入
        Scene scene = new Scene(root, 800, 600);
        // 将Scene设置到舞台(Stage)上
        primaryStage.setScene(scene);
        primaryStage.setTitle("小游戏");
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

运行上述代码,将会显示一个大小为800x600的窗口,并在标题栏上显示“小游戏”。

处理用户输入

接下来,我们需要处理用户的输入,以便在游戏中能够对玩家的操作做出响应。我们将使用Java FX提供的 EventHandler 接口来处理用户输入事件。

代码语言:javascript复制
import javafx.event.EventHandler;
import javafx.scene.input.KeyEvent;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        // ...
        // 创建一个键盘事件处理器
        EventHandler<KeyEvent> keyEventHandler = new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                // 处理按键按下的事件
                if (event.getEventType().equals(KeyEvent.KEY_PRESSED)) {
                    // 处理按键按下的逻辑
                }
                // 处理按键释放的事件
                else if (event.getEventType().equals(KeyEvent.KEY_RELEASED)) {
                    // 处理按键释放的逻辑
                }
            }
        };
        // 将键盘事件处理器注册到Scene上
        scene.addEventHandler(KeyEvent.ANY, keyEventHandler);
        
        // ...
    }
    // ...
}

使用上述代码,我们可以在 handle 方法中处理按键按下和按键释放的逻辑。

显示游戏元素

最后,我们需要在游戏窗口中显示游戏元素,比如角色、敌人、道具等。我们将使用Java FX提供的 Node 类来创建和管理游戏中的元素。

代码语言:javascript复制
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        // ...
        
        // 创建一个矩形(角色)
        Rectangle character = new Rectangle(50, 50, Color.BLUE);
        // 将角色添加到根节点中
        root.getChildren().add(character);
        // ...
    }
    // ...
}

使用上述代码,我们创建了一个蓝色的矩形作为游戏的角色,并将其添加到游戏窗口的根节点中。

使用Java FX制作一个基于键盘操作的小游戏,类似于打方块的游戏,让玩家通过操作键盘控制角色移动并消除方块。

代码语言:javascript复制
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Game extends Application {
    private static final int WINDOW_WIDTH = 600;
    private static final int WINDOW_HEIGHT = 400;
    private static final int BLOCK_SIZE = 50;
    private static final int CHARACTER_SIZE = 50;
    private static final int CHARACTER_SPEED = 5;
    
    private Rectangle character;
    private BorderPane root;
    private boolean leftKeyPressed = false;
    private boolean rightKeyPressed = false;
    @Override
    public void start(Stage primaryStage) {
        root = new BorderPane();
        Scene scene = new Scene(root, WINDOW_WIDTH, WINDOW_HEIGHT);
        
        createCharacter();
        createBlocks();
        handleKeyPressEvents(scene);
        handleKeyReleaseEvents(scene);
        primaryStage.setScene(scene);
        primaryStage.setTitle("小游戏");
        primaryStage.show();
    }
    private void createCharacter() {
        character = new Rectangle(CHARACTER_SIZE, CHARACTER_SIZE, Color.BLUE);
        character.setTranslateY(WINDOW_HEIGHT - CHARACTER_SIZE - BLOCK_SIZE);
        root.getChildren().add(character);
    }
    private void createBlocks() {
        HBox blocksContainer = new HBox(10);
        blocksContainer.setAlignment(Pos.CENTER);
        
        for (int i = 0; i < 5; i  ) {
            Rectangle block = new Rectangle(BLOCK_SIZE, BLOCK_SIZE, Color.RED);
            blocksContainer.getChildren().add(block);
        }
        
        root.setBottom(blocksContainer);
    }
    private void handleKeyPressEvents(Scene scene) {
        scene.setOnKeyPressed(event -> {
            KeyCode keyCode = event.getCode();
            
            if (keyCode == KeyCode.LEFT) {
                leftKeyPressed = true;
            } else if (keyCode == KeyCode.RIGHT) {
                rightKeyPressed = true;
            }
        });
    }
    private void handleKeyReleaseEvents(Scene scene) {
        scene.setOnKeyReleased(event -> {
            KeyCode keyCode = event.getCode();
            
            if (keyCode == KeyCode.LEFT) {
                leftKeyPressed = false;
            } else if (keyCode == KeyCode.RIGHT) {
                rightKeyPressed = false;
            }
        });
    }
    private void moveCharacter() {
        if (leftKeyPressed && character.getTranslateX() > 0) {
            character.setTranslateX(character.getTranslateX() - CHARACTER_SPEED);
        }
        if (rightKeyPressed && character.getTranslateX() < WINDOW_WIDTH - CHARACTER_SIZE) {
            character.setTranslateX(character.getTranslateX()   CHARACTER_SPEED);
        }
    }
    @Override
    public void init() {
        Timeline gameLoop = new Timeline(new KeyFrame(Duration.millis(16), event -> {
            moveCharacter();
        }));
        gameLoop.setCycleCount(Animation.INDEFINITE);
        gameLoop.play();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

上述示例代码使用了Java FX创建了一个游戏窗口,并在窗口中显示了一个蓝色的角色和一排红色的方块。通过按下左右键,玩家可以控制角色左右移动。此外,通过使用Timeline和KeyFrame实现了游戏循环,使得角色的移动动画可以持续播放。

JavaFX是用于构建富客户端应用程序的Java技术。它提供了一系列的核心类和API,用于创建和管理图形化用户界面(GUI),处理用户输入、事件处理、多媒体、动画等功能。下面是一些JavaFX的核心类的详细介绍:

  1. Application:
    • Application是JavaFX应用程序的主类,它是所有JavaFX应用程序的入口点。
    • 应用程序必须继承Application类,并实现其start方法,在该方法中初始化应用界面和设置应用的主舞台。
    • Application类还提供其他方法,如init()stop(),用于在应用程序的生命周期中进行初始化和清理操作。
  2. Stage:
    • Stage表示JavaFX应用程序的主舞台,是JavaFX中顶级容器的实例。
    • 通过Stage类,可以设置应用程序的标题、尺寸、图标等属性,并将场景(Scene)设置为舞台的内容。
    • Stage还提供了方法用于显示和关闭舞台,以及处理舞台的相关事件。
  3. Scene:
    • Scene代表了应用程序的一个场景,包含了应用程序的可视组件和布局。
    • Scene可以根据需要设置宽度和高度,并将根节点(Root Node)设置为场景的内容,从而构建应用程序的用户界面。
    • Scene还可以用于处理鼠标和键盘事件,并支持CSS样式和动画效果。
  4. Node:
    • Node是JavaFX中所有GUI组件的基类,代表了一个可视化的节点。
    • Node可以是容器(如Pane),也可以是控件(如Button、Label等)或图形对象(如Shape)。
    • Node可以设置位置、大小、样式和事件处理,可以通过父子关系构建复杂的UI层次结构。
  5. Layout:
    • JavaFX提供了多种布局类,用于定义和管理组件的位置和大小。
    • 常用的布局类包括FlowPaneHBoxVBoxBorderPaneGridPane等。
    • 布局类可以根据不同的规则自动调整组件的位置和大小,以适应不同的窗口尺寸。
  6. Control:
    • Control是JavaFX中的控件类,用于构建用户界面上的可交互组件。
    • 常见的控件包括ButtonLabelTextFieldComboBoxListView等。
    • Control类提供了丰富的属性、样式和事件处理方法,可以根据需要自定义和扩展。
  7. Event:
    • JavaFX提供了一套事件模型,用于处理用户输入、操作和其他类型的事件。
    • 事件由事件源(Event Source)生成,并通过事件传播机制传递到事件目标(Event Target)进行处理。
    • JavaFX中的事件可以是鼠标事件、键盘事件、焦点事件、动画事件等。
  8. Animation:
    • Animation类和相关类用于实现动画效果。
    • JavaFX提供了多种动画类(如TimelineTranslateTransitionRotateTransition等)和插值器(Interpolator),用于控制动画的持续时间、循环、缓动效果等。

总结

通过这篇文章,我们学习了如何使用Java FX创建一个简单的小游戏。我们了解了如何创建游戏窗口、处理用户输入以及显示游戏元素。Java FX提供了丰富的功能和API,使得开发图形化界面变得更加容易和高效。希望本文对您在全栈学习Java中使用Java FX制作小游戏有所帮助。 注:本文所提及的代码和示例仅供参考,并且可能需要根据您的具体需求进行调整和扩展。

0 人点赞