为什么不能在浏览器的 Phaser 中加载简单图像?

Why won't a simple image load in Phaser in the browser?

现在,我正在学习本教程:https://phaser.io/tutorials/making-your-first-phaser-3-game/index

我按照第一位进行了操作,得到了将 sky.png 渲染到浏览器中的部分,但我的浏览器总是以空白结尾。我什至只是试图打开他们完成的示例,但一片空白。我是否需要 运行 它作为服务器之类的? 我试过 npm install,也没用。

我遵循了这个教程:https://phaser.io/tutorials/making-your-first-phaser-3-game/index

它在 'Requirements' 下引用的 zip 文件不会加载 part1.html、part.html 等页面。

代码如下:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8" />
    <title>Making your first Phaser 3 Game - Part 3</title>
    <script src="//cdn.jsdelivr.net/npm/phaser@3.11.0/dist/phaser.js"></script>
    <style type="text/css">
        body {
            margin: 0;
        }
    </style>
</head>
<body>

<script type="text/javascript">

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

    var game = new Phaser.Game(config);

    function preload ()
    {
        this.load.image('sky', 'assets/sky.png');
        this.load.image('ground', 'assets/platform.png');
        this.load.image('star', 'assets/star.png');
        this.load.image('bomb', 'assets/bomb.png');
        this.load.spritesheet('dude', 'assets/dude.png', { frameWidth: 32, frameHeight: 48 });
    }

    function create ()
    {
        this.add.image(400, 300, 'sky');
    }

    function update ()
    {
    }

</script>

</body>
</html>

您是否尝试直接在浏览器中打开 html 文件?如果是这样,这就是为什么这不起作用。请参阅 Phaser Getting Started Guide 了解有关如何配置本地 Web 服务器以提供文件的详细信息。

是的。您需要一台托管您的 javascript 和 html 的服务器才能使其正常工作。如果您只是将 html 个文件从您的本地目录拖到您的浏览器中,会话将无法访问其他需要的文件,因为它们仍然只保存在您的计算机本地。 Phaser 入门指南更深入,但本质上您不希望网页能够访问您计算机的本地文件。

以上任何解决方案是否适合您?对我来说,我使用了带有 Python 的简单 HTTP 服务器。我正确地引用了我的图像并且正确地托管了我的网络服务器。使用开发人员工具时,没有任何错误消息。我用头撞墙好几个小时。由于某种原因,Phaser API 无法从网页中分辨出本地目录 (http://192.168.0.2:8080/) 是什么。

我通过使用以下图片路径解决了我的问题:

'http://192.168.0.2:8080/assets/sky.png'

其中 192.168.0.2 是我托管服务器的本地 IP 地址 & 8080 是我用于通信的端口

除了为每个图像添加冗长的文件路径之外,您还可以结合已有的内容调用 this.load.setBaseURL('http://192.168.0.2:8080') 函数。

例如看下面的代码:

var config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: { y: 200 }
        }
    },
    scene: {
        
        preload: preload,
        create: create
    }
};
var game = new Phaser.Game(config);

function preload ()
{
    console.log('preload');
    this.load.setBaseURL('http://192.168.0.2:8080');
    this.load.image('bombP','bowmb.png');
    this.load.image('einMary','/bowmb.png');
}

function create ()
{
    console.log('create');
    this.add.image(126, 119, 'bombP');
    this.add.image(222,269,'einMary');
    //var s = game.add.sprite(80,0,'einMary');
    //s.rotation=0.219;
}