在Python程序中包装canvas标签+ javascript的最简单方法?

时间:2013-04-29 19:18:59

标签: javascript python html5 cocos2d-iphone cross-platform

我正在使用cocos2d-javascript创建一个跨平台的游戏,并希望创建一个看起来很原生的PC版本。我明白,经过一点修改,我可以在浏览器中运行我的cocos2d-javascript程序,但我想让程序在自己的(非浏览器)窗口中运行,能够创建多个窗口,具有本机访问权限没有通过浏览器安全控件等等到文件系统。基本上,我想让我的Python程序提供一个javascript引擎以及cocos2d-html5可以运行的canvas标签。一个非常简化的浏览器,如果你愿意的话。

我的问题是,在跨平台(即PC,Mac和Linux)方式中,实现这一目标的最简单方法是什么?我可以使用python-spidermonkey或python-v8作为javascript引擎,但我不确定如何最好地提供可以绘制的canvas标记。

1 个答案:

答案 0 :(得分:1)

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

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

在幕后,这与您可以获得的简单(或“精简”)相差甚远:您正在使用功能强大,复杂的跨平台GUI库,该库具有深度集成的WebKit包装器,可以公开URL,甚至网页之类的自定义对象,一直到对象模型。

但是从您的代码中,只需将Web视图粘贴到窗口中,创建一个带有canvas标记的HTML页面和您的JS应用程序,并将所有内容挂钩。

一个缺点是学习曲线。 Qt很大,在你做任何有用的事情之前,你必须至少学习基本的概念。幸运的是,如果你已经完成了ObjC编程,信号和插槽,QObject模型等应该都非常熟悉......但不完全相同。

另一个缺点是分配。您需要要求Qt和PySide(或PyQt)以及Python(这是一项非常重要的要求,除非您只关心Linux用户),或者了解包装PySidecx_freeze的细节。 } / py2exe / py2app /等


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

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

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

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

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