2

我正在使用 cocos2d-javascript 创建一个跨平台游戏,并想创建一个看起来很原生的 PC 版本。我知道只需稍加修改,我就可以让我的 cocos2d-javascript 程序在浏览器中运行,但我希望程序在它自己的(非浏览器)窗口中运行,能够创建多个窗口,具有本机访问权限到文件系统而不通过浏览器安全控制等。本质上,我想让我的 Python 程序提供一个 JavaScript 引擎以及一个可以运行 cocos2d-html5 的画布标签。一个非常精简的浏览器,如果你愿意的话。

我的问题是,以跨平台(即 PC、Mac 和 Linux)方式完成此任务的最简单方法是什么?我可以将 python-spidermonkey 或 python-v8 用于 javascript 引擎,但我不确定如何最好地提供可以绘制的画布标签。

4

1 回答 1

1

如果您正在寻找“我可以编写的最少代码”方面最简单的方法,那么嵌入完整的浏览器实际上比从头开始编写精简的浏览器更容易。

因此,最简单的解决方案可能是使用QWebView.

在幕后,这远非你所能得到的简单(或“精简”):你正在使用一个强大、复杂的跨平台 GUI 库,它有一个深度集成的 WebKit 包装器,它公开自定义对象诸如 URL 甚至网页之类的东西一直到对象模型。

但从您的代码中,只需将 Web 视图粘贴到窗口中,创建带有canvas标签和 JS 应用程序的 HTML 页面,然后将所有内容连接起来。

一个缺点是学习曲线。Qt 很大,你必须至少学习基本概念,然后才能做任何有用的事情。幸运的是,如果你做过 ObjC 编程,信号槽、QObject 模型等应该都感觉很熟悉……但并不完全相同。

另一个缺点是分布。您要么需要 Qt 和 PySide(或 PyQt)以及 Python(这是一个沉重的要求,除非你只关心 linux 用户),要么学习/ / /etc打包PySide的细节。cx_freezepy2exepy2app


从外部与画布或 JS 代码交谈非常容易。QWebView包含 a ,其中QWebPage包含 a ,它是由包装器QWebFrame组成的完整 DOM :QWebElement

frame = view.page().mainFrame()
canvas = frame.findFirstElement("#cocos-canvas')

然后,您可以调用evaluateJavaScriptDOM 本身或任何元素,就像您在 ObjC 的 WebKit 包装器中发现的那样熟悉。

换一种方式,虽然您可以执行注入 JS 或评估回调代码的函数定义的相同技巧,但您也可以将QActions 附加到网页,然后您可以以与您相同的方式连接正常操作(菜单项、按钮点击等)。当然,JS 可以像用户一样轻松地触发它们。

或者您可以QObject通过调用直接将任何子类公开给 JS addToJavaScriptWindow,这允许您的 JS 代码调用对象上的方法,包括附加回调的方法。有关详细信息,请参阅QtWebKit 桥

于 2013-04-29T19:41:25.233 回答