如何将场景缩放至全屏?

2024-02-07

我目前正在学习 Phaser 3。但是,我能找到的所有文档都是关于 Phaser2 的。

创建游戏时,您必须在配置中设置宽度和高度:

var config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
};

如何将场景缩放至全屏?


UPDATE

Phaser 3.16现已发布(2019年2月),内置了规模经理。它提供了各种方法来扩展您的游戏。在尝试下面的代码之前先检查一下。Phaser.Scale 文档 https://photonstorm.github.io/phaser3-docs/Phaser.Scale.html 秤管理器注意事项 https://rexrainbow.github.io/phaser3-rex-notes/docs/site/scalemanager/


旧答案

您可以调整大小canvas元素使用resize代码片段中提到的函数,并在开始游戏之前以及每当调整屏幕大小时执行该函数。这样你就可以保持800:600(4:3)的宽高比,并根据屏幕比例使canvas元素适合全屏。

在全页模式下运行代码片段并调整浏览器大小以查看画布元素的大小如何调整。蓝色矩形的大小是画布(游戏)的大小。

var game;
var gameWidth = 800;
var gameHeight = 600;

window.onload = function() {
  var config = {
    type: Phaser.CANVAS,
    width: gameWidth,
    height: gameHeight,
    scene: [intro]
  };
  game = new Phaser.Game(config);
  resize();
  window.addEventListener("resize", resize, false);
};

function resize() {
  var canvas = document.querySelector("canvas");
  var windowWidth = window.innerWidth;
  var windowHeight = window.innerHeight;
  var windowRatio = windowWidth / windowHeight;
  var gameRatio = game.config.width / game.config.height;
  if (windowRatio < gameRatio) {
    canvas.style.width = windowWidth + "px";
    canvas.style.height = (windowWidth / gameRatio) + "px";
  } else {
    canvas.style.width = (windowHeight * gameRatio) + "px";
    canvas.style.height = windowHeight + "px";
  }
}

var intro = new Phaser.Scene('intro');
intro.create = function() {
  var rect = new Phaser.Geom.Rectangle(0, 0, 800, 600);

  var graphics = this.add.graphics({
    fillStyle: {
      color: 0x0000ff
    }
  });

  graphics.fillRectShape(rect);
};
<!DOCTYPE html>
<html>

<head>
  <style type="text/css">
    body {
      background: #000000;
      padding: 0px;
      margin: 0px;
    }
    
    canvas {
      display: block;
      margin: 0;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/dist/phaser.min.js"></script>
</head>

<body>
</body>

</html>

你应该检查一下这个帖子 http://www.emanueleferonato.com/2018/02/16/how-to-scale-your-html5-games-if-your-framework-does-not-feature-a-scale-manager-or-if-you-do-not-use-any-framework/。它详细解释了这段代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将场景缩放至全屏? 的相关文章

随机推荐

  • 在 Java 中将两个整数相除得到 0 或 100?

    我试图除两个整数并乘以 100 但它始终只给出 0 或 100 有人可以帮助我吗 int x a b 100 如果 a 是 500 b 是 1000 它会给我 0 唯一一次它会给我 100 是如果 a gt b 我怎样才能解决这个问题 Th
  • 无法打开本地文件 - Chrome:不允许加载本地资源

    测试浏览器 Chrome 版本 52 0 2743 116 这是一个简单的 JavaScript 用于从本地打开图像文件 如 C 002 jpg function run var URL file C 002 jpg window open
  • JasperReports API 中的 FileResolver 被什么替代?

    我们的一个软件实用程序使用一个类来实现net sf jasperreports engine util FileResolver加载驻留在与报表相关的路径或要通过专有文件服务器协议加载的报表元素 例如图像 从最新版本 6 6 0 开始 我看
  • Android NDK 未定义引用

    我正在尝试实现代码 here https github com webjb myrobot 当尝试编译它时 我收到以下错误 Error 339 undefined reference to ANativeWindow fromSurface
  • 单向一对多关系的 NHibernate 配置

    我正在尝试建立如下关系 每个Master项目有一个或多个Detail items public class Detail public virtual Guid DetailId get set public virtual string
  • .net core如何将内容范围添加到标题

    我没有找到如何将 Content Range 添加到我的 odata 请求的标头中 我的 api 需要这样的格式来进行分页 Content Range posts 0 24 319 我能找到的最接近的是 HTTP 字节范围支持 从这里 ht
  • 如何使用 htaccess 仅在某些页面上启用 https?

    我有一个电子商务网站 我想仅在位于以下位置的网站的电子商务部分启用 https https mysite com buy https mysite com buy 由于我的页面上的所有链接都是相对的 当有人访问时http mysite co
  • python组合26个不同时间戳和相同列的数据帧

    美国的一个数据库接收来自世界各地的一日信息 csv格式 有15天的数据 来自26个地方 总共 15x26 390 个数据帧 此外 还有26个地方有共同的参考数据框 现在 我想将 390 1 个参考数据帧合并为一个 我在这里给出了我的问题的示
  • 如何返回列表切片的最大元素

    我想最大限度地简化这个功能 我该怎么办 def eleMax items start 0 end None if end is None end len items return max items start end 我想到了 def e
  • 是否可以从mysql中的别名中进行选择?

    我创建了一个名为的表别名tbl 我想从中选择 但我无法做到这一点 我知道我的代码不正确也不优化 但我只是测试 MySQLCASE select case when exists select username from tbl then U
  • 非聚集索引中的行定位器

    我正在读关于Non Clustered Index其中说 Nonclusteredindex 仅包含指向实际数据行的索引列和行定位器中的值 而不包含数据行本身 这意味着查询引擎必须采取额外的步骤才能找到实际数据 Query 我不清楚Row
  • iOS:同步相机帧和运动数据

    我正在尝试从相机捕获帧和相关的运动数据 为了同步 我使用时间戳 视频和动作被写入文件然后进行处理 在这个过程中 我可以计算每个视频的运动帧偏移 事实证明 相同时间戳的运动数据和视频数据彼此偏移不同的时间 从 0 2 秒到 0 3 秒不等 该
  • 事件驱动编程是如何实现的?

    我正在研究twisted 和node js 框架是如何工作的 我是 试图准确理解操作系统如何支持 I O 使用回调的操作 我知道这很好 因为我们需要更少的线程 因为我们不需要 需要阻塞线程等待 I O 操作 但有些东西 I O 完成后必须调
  • 计算数字数组的可能排列

    我有一个带有数字 0 1 2 3 的 NSArray 计算 4 的阶乘 数组的计数 我有 24 种可能的排列 0 1 2 3 我想知道是否有一种方法可以计算所有这些可能的排列并将它们放在一个单独的数组中 例如 给定上面的数字 0 1 2 3
  • 在 C# 中将对象转换为 int 会引发 InvalidCastException

    我有这个方法 private static Dossier PrepareDossier List
  • DynamoDB:条件写入与 CAP 定理

    使用 DynamoDB 两个独立的客户端尝试同时写入同一个项目 使用条件写入 并尝试更改条件引用的值 显然 这些写入之一注定会因条件检查而失败 没关系 假设在写入操作期间发生了一些不好的事情 并且某些 DynamoDB 节点出现故障或彼此失
  • Python:使用单词交集而不是字符交集的杰卡德距离

    我没有意识到 Python set 函数实际上将字符串分隔成单个字符 我为Jaccard编写了python函数并使用了python交集方法 我将两个集合传递到此方法中 在将这两个集合传递到我的 jaccard 函数之前 我在设置环上使用 s
  • MVVM 和导航服务

    实现任何模式的众多好处之一是在应用程序的不同层之间分离关注点 对于 Silverlight 和 MVVM 我认为 NavigationService 属于 UI 如果 NavigationService 属于 UI 那么它应该在后面的 XA
  • Ruby 数组 concat 与 + 速度?

    我对 Ruby 数组进行了小型性能测试concat vs 操作和concat 太快了 然而我不清楚为什么concat 有那么快吗 有人可以帮忙吗 这是我使用的代码 t Time now ar for i in 1 10000 ar ar 4
  • 如何将场景缩放至全屏?

    我目前正在学习 Phaser 3 但是 我能找到的所有文档都是关于 Phaser2 的 创建游戏时 您必须在配置中设置宽度和高度 var config type Phaser AUTO width 800 height 600 如何将场景缩