gpt4 book ai didi

javascript - 在 nw.js 中使用 Liquidfun.js

转载 作者:行者123 更新时间:2023-12-03 07:57:24 27 4
gpt4 key购买 nike

我正在编写一个应用程序,该应用程序使用两个似乎相互冲突的组件。

liquidfun.js 和 node.js/NW.js

我正在使用 Liquidfun 进行流体模拟。我在 NW.js 中使用 window.get() 来设置窗口缩放级别。每个都可以独立工作。

这是我同时运行两者时出现的错误。

Uncaught ReferenceError: module is not defined      liquidfun.js:3
Uncaught TypeError: undefined is not a function liquidfun.js:1443

我怀疑 Node 有一些函数属性与liquidfun库中的某些东西共享名称“模块”。

如何阻止 NW.js 处理 Liquidfun 脚本?

其他信息:

这些页面是从同一台计算机上的 xampp 服务器提供的,因此我必须使用“node-remote”来设置缩放级别。

编辑:

nw.js 加载的 HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>html5canvas</title>


<script src="libs/liquidfun.js"></script>
<script>
var gui = require('nw.gui');
win = gui.Window.get();
win.zoomLevel =[-10];

</script>
</head>

<body onload="init();" style="background-color:#D4D4D4">
<canvas id="canvas" width="2160" height="3840" style="background-color:#B1D1B1"></canvas>

</body>
<script>
var world = null;
var gravity = new b2Vec2();
function init(){

world = new b2World(gravity);

}
</script>

NW.js Package.json

{

"main": "main.html",
"name": "Fun Editor",
"node-remote" : "127.0.0.1"

}

这样做的结果就是原帖中提到的模块错误。当 Node 远程被删除时,液体乐趣报告加载成功。没有 Node 远程还有另一个错误

UncaughtReferenceError: require is not defined    (program):1 

最佳答案

问题是liquidfun首先评估它运行的环境,并且由于定义了require,它期望moduleexports如此以及。由于 nw.js 的特殊性,事实并非如此。因此,您需要像这样require您的库:

<script>
var lf = require("./libs/liquidfun.js");
var world = null;
var gravity = new lf.b2Vec2();

function init(){
world = new lf.b2World(gravity);
}
</script>

现在,虽然这适用于几乎所有情况,但在这种情况下它本身并没有帮助,因为 Liquidfun 似乎没有导出必要的类(我不熟悉这个库,所以可能有一个这样做的方法)。正在关注this answer ,您可以在库末尾添加必要的导出:

module.exports = {
b2Vec2 : b2Vec2,
b2BodyDef : b2BodyDef,
b2PolygonShape : b2PolygonShape,
b2FixtureDef : b2FixtureDef,
b2World : b2World,
b2_dynamicBody : b2_dynamicBody,
setWorld : function(_world){ world=_world; }
};

解决这个问题的另一种方法(因为无论如何你都需要编辑liquidfun.js)是欺骗库以常规网络模式运行。您可以通过替换第一行中的这一位来完成此操作:

...process==="object"&&typeof require==="function";...

这样:

...process==="object"&&false;...

然后您可以按预期使用该库:

<script src="libs/liquidfun.js"></script>
<script>
var world = null;
var gravity = new b2Vec2();
function init(){
world = new b2World(gravity);
}
</script>

不用说,这两种解决方案都有点“hacky”并且不是最佳的。

关于javascript - 在 nw.js 中使用 Liquidfun.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745386/

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