FXGL17 - 游戏场景

393 阅读2分钟

PS:禁止拷贝形式转载,转载请以URL形式

PS:FXGL 准备写成一个系列,所以在该系列未完成前,该系列文章除了目录会被修改其他内容均可能被删改。

1. 简介

本章节介绍 FXGL如何渲染游戏场景

Game-Scene

This page covers how high-level rendering is done in FXGL (technically in JavaFX since we use it as the graphics framework).

2. 游戏场景

为了显示一个实体,您需要配置和附加它的视图。这是通过 完成的ViewComponent,如下所示:

// 这可以是任何 JavaFX 节点或一些自定义图形
Node node = new Rectangle(10, 10, Color.BLUE);

ViewComponent viewComponent = entity.getViewComponent();
viewComponent.addChild(node);

大多数情况下,您希望使用图像作为视图。有一个Texture类可以让你做到这一点,此外它也是一个 JavaFX 节点:

Node node = FXGL.getAssetLoader().loadTexture("player.png");

或者,实体构建器提供了一些静态方法来简化构建,包括设置视图:

Entity entity = FXGL.entityBuilder()
                       .view("player.png")
                       .build();

最后,将实体添加到游戏世界:

getGameWorld().addEntity(entity);

2.1. 游戏视图

大部分视图场景下包含实体,游戏视图可以添加不与任何实体关联的视图,只用作UI的渲染

Node node = new Rectangle(10, 10, Color.BLUE);

//使用Translate 进行定位
node.setTranslateX(100);
node.setTranslateY(100);

//0 是 z index
GameView view = new GameView(node, 0);

getGameScene().addGameView(view);

2.2. UI视图

UI视图固定在可见视口中,其坐标系始终在0,0width,height范围内。这意味着UI内容固定在屏幕上,并且不随页面的滚动而滚动等效于WEB开发中的Affix

Node node = new Rectangle(10, 10, Color.BLUE);

//使用Translate 进行定位
node.setTranslateY(200);
node.setTranslateX(200);

getGameScene().addUINode(node);

3. 场景视口

FXGL 中的视口承担了相机的职责。您可以获得对视口的引用,如下所示:

Viewport viewport = getGameScene().getViewport();

您可以通过调用手动更改视口的xy值:

viewport.setX(...);
viewport.setY(...);

最有用的功能之一是将视口绑定到跟随实体:

Entity player = ...;

// distX and distY is how far the viewport origin should be from the entity
viewport.bindToEntity(player, distX, distY);

当视口跟随玩家时,它可能会超出关卡边界。您可以将边界设置为视口可以“游走”多远:

viewport.setBounds(minX, minY, maxX, maxY);

通常提醒用户某些操作我们可以使用视口抖动:

FXGL.getGameScene().getViewport().shake(powerTranslate,powerRotate);