在Python程序中包装画布标记+javascript的最简单方法是什么?

2024-09-27 00:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用cocos2djavascript创建一个跨平台的游戏,并希望创建一个看起来像本地的PC版本。我知道只要稍加修改,我就可以让我的cocos2d javascript程序在浏览器中运行,但我希望该程序在自己的(非浏览器)窗口中运行,能够创建多个窗口,在不通过浏览器安全控制的情况下对文件系统进行本机访问,等等,我想让我的Python程序提供一个javascript引擎和一个可以运行cocos2d-html5的画布标记。一个非常精简的浏览器,如果你愿意的话。在

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


Tags: 标记引擎程序版本游戏画布跨平台情况
1条回答
网友
1楼 · 发布于 2024-09-27 00:23:01

如果你在寻找最简单的“我能写最少的代码”,那么嵌入一个完整的浏览器比从头开始编写一个精简的浏览器要容易得多。在

所以,最简单的解决方案可能是使用^{}。在

实际上,这远不是您所能得到的简单(或“精简”)的:您使用的是一个功能强大、复杂的跨平台GUI库,它有一个深度集成的WebKit包装器,它向对象模型公开url甚至web页面的自定义对象。在

但是从你的代码来看,这只是把一个web视图粘贴到一个窗口中,创建一个带有canvas标记的HTML页面和你的JS应用程序,然后把所有的东西都连接起来。在

一个缺点是学习曲线。Qt很大,在做任何有用的事情之前,您至少要学习基本概念。幸运的是,如果你做过ObjC编程,信号和插槽,QObject模型等等,你会觉得很熟悉…但并不完全相同。在

另一个缺点是分配。您要么需要将Qt和PySide(或PyQt)与Python一起使用(这是一个很重的要求,除非您只关心linux用户),要么学习使用cx_freeze/py2exe/py2app/等打包的细节


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

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

然后可以对DOM本身或任何元素调用evaluateJavaScript,方法与ObjC的WebKit包装器中的方法相同。在

另一方面,虽然您可以使用相同的技巧来注入JS或评估调用代码的函数定义,但您也可以将QAction附加到网页上,这样您就可以像正常操作(菜单项、按钮单击等)那样连接起来。当然,JS可以像用户一样容易地触发它们。在

或者您可以通过调用^{}将任何QObject子类直接暴露给JS,这允许JS代码调用对象上的方法,包括附加回调的方法。有关详细信息,请参见The QtWebKit Bridge。在

相关问题 更多 >

    热门问题