calcitem / chaosclock

C++ implementation of the "Chaos Clock" game invented by ejsoon, related information: https://quanquan.space/viewtopic.php?t=852
https://ejsoon.win/chaosclock/
1 stars 1 forks source link

用 JavaScript 写 UI 交互如何 #25

Open calcitem opened 1 year ago

calcitem commented 1 year ago

在JavaScript中调用C++库,可以使用WebAssembly技术。WebAssembly是一种新的低级字节码,可以在Web浏览器中运行,并且可以与JavaScript代码进行交互。下面是一个简单的示例:

1.首先,需要编译C++代码为WebAssembly格式。可以使用Emscripten编译器,它是一个将C/C++代码编译为WebAssembly的工具。例如,假设有一个名为"mylib.cpp"的C++库文件,可以使用以下命令将其编译为WebAssembly模块:

emcc mylib.cpp -s WASM=1 -o mylib.wasm

该命令将生成一个名为"mylib.wasm"的WebAssembly模块。

2.接下来,在JavaScript中加载WebAssembly模块,并将其实例化为一个对象。可以使用JavaScript的WebAssembly API来加载模块。例如,以下代码将加载"mylib.wasm"模块,并实例化它:

fetch('mylib.wasm')
  .then(response => response.arrayBuffer())
  .then(bytes => WebAssembly.instantiate(bytes))
  .then(results => {
    const mylib = results.instance.exports;
    // 可以调用C++函数了
    console.log(mylib.myFunction());
  });

上面的代码将加载WebAssembly模块,然后将其实例化为一个对象。该对象包含C++库中的所有导出函数。在此示例中,C++库中的一个名为"myFunction"的函数被调用,并在控制台上输出结果。

需要注意的是,由于WebAssembly是一种低级字节码,因此在JavaScript和C++之间进行交互可能会涉及到一些底层的概念,如内存地址和指针。因此,需要非常小心地处理这些细节,以确保正确地进行交互。

参考资料:https://developer.mozilla.org/en-US/docs/WebAssembly/C_to_wasm

ejmoog commented 1 year ago

js的ui已經寫好了。

問題是這個web模塊,用的是瀏覽器的內存,還是本機的內存。

如果是瀏覽器,恐怕性能不行。

我覺的用qt寫個界面更靠譜一些。

calcitem commented 1 year ago

Qt跨平台,也是不错的选择。不过我Qt不熟,之前直棋的UI界面是借用了其他开源项目,改动不多。