gpt4 book ai didi

javascript - 使用 require 在 JavaScript 中访问匿名函数之外的全局变量

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:23 25 4
gpt4 key购买 nike

我正在开发一个 HTML5 实时多人游戏,我有一个 game_core.js 文件,它使用 p2 库运行游戏物理。我想在客户端和权威服务器上运行此文件以进行预测。这是构造函数和 module.exports:

function gameCore() {
this.world = new p2.World({gravity:[0, 0]});
this.players = {};
this.step = 1/60;
}

...

module.exports = gameCore;

因为我在 index.html 中加载 p2.js 文件

<script type="text/javascript" src="lib/p2.js"></script>
<script type="text/javascript" src="game_client.js"></script>
<script type="text/javascript" src="game_core.js"></script>

构造函数找到 p2 对象,一切正常。但我的问题是当我尝试在服务器上运行这个文件时,因为我找不到访问 p2 对象的正确方法,它是 game_server.js 上的全局变量:

var
io = require('socket.io'),
express = require('express'),
UUID = require('node-uuid'),
p2 = require('p2'),
verbose = false,
http = require('http'),
app = express(),
config = require('./config.json'),
gameCore = require('./game_core.js'),
server = http.createServer(app);

var world = new gameCore();

我收到这个错误:

this.world = new p2.World({gravity:[0, 0]});
^
ReferenceError: p2 is not defined

如果我在 gameCore 上创建一个 p2 属性,在构造函数中将 world 保留为 null,将全局 p2 分配给 gameCore 的 p2,然后使用 init 函数将正确的值分配给 world

function gameCore() {
this.p2 = null;
this.world = null;
this.players = {};
this.step = 1/60;
}

gameCore.prototype.init = function() {
this.world = new this.p2.World({gravity:[0, 0]});
}

它可以工作,但由于我需要在其他 gameCore 类上执行此操作,所以我遇到了堆栈溢出。如果我使用

var p2 = require('p2');

在 gameCore 上它可以工作,但客户提示使用 require。

初学JavaScript,看了闭包、匿名函数等很多类似的疑惑。不幸的是,我还不能解决这个问题。

最佳答案

browserify允许您在客户端 js 文件中使用 require。

如果你想在构造函数中使用 p2,你还需要 game_core.js require p2。

你使用 browserify 的客户端文件应该是这样的

<script src="bundle.js"></script> <!-- browserify p2 game_core.js config.json --->
<script>
var p2 = require('p2 ');
var game_core= require('game_core.js');
var config= require('config.json');
/* ... */
</script>

关于javascript - 使用 require 在 JavaScript 中访问匿名函数之外的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30470581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com