我正在通过 Adobe AIR (3.1) 将基于 Flash Player 的游戏移植到桌面(OSX 和 Windows)。移植到 AIR 本身进行得相当顺利。我遇到的一个问题是游戏将通过 Steam 网络分发。为了与 Steam 客户端交互,我不得不编写一个 native 扩展以将 Steam SDK API 公开给 AS3。两个平台都已实现 native 扩展支持,我已根据需要启动应用程序并与 Steam 通信。
我遇到麻烦的领域是处理 Steam 的 Overlay,当它被激活时,它会呈现在游戏之上。本质上,当游戏启动时,Steam 客户端会暂停进程,以便将其覆盖库连接到 D3D 或 OpenGL。最初,Overlay 根本无法显示,因为 AIR 应用程序描述符将默认渲染模式设置为“自动”。但是,一旦我将渲染模式切换为“gpu”,叠加层就会按需要出现。
在 OSX 方面,一切都按预期工作。我可以很好地切换进出叠加层。在频谱的窗口端,我在激活覆盖时遇到了一些问题。具体来说,当启用覆盖(它在游戏之上渲染)并且我移动鼠标或生成键盘输入时,覆盖和游戏都会“卡住”(渲染停止)2-3 秒。此外,我注意到当我在游戏运行时打开任务管理器时,CPU 使用率大约为 75-80%。当我第一次激活 Overlay(这是需要的)时,CPU 使用率保持不变。但是,当我移动鼠标光标或按下键盘上的某个键时,cpu 使用率下降到大约 1%。我们测试过的 5 台 Windows 机器中有 4 台(2 台 XP,3 台 Win 7)出现了这个问题。自然地,我首先就此问题联系了 Valve,因为这仅在启用 Overlay 时才会发生。我已经上传了 OSX 和 Windows 版本供他们的开发人员调试;然而,我的联系人建议我也了解更多关于 AIRs 渲染/输入的信息。
以下是 Steam 开发人员的帖子片段,详细介绍了叠加层的工作原理:
"The requirements for the overlay on Windows are as follows:
- Game must use D3D7, D3D8, D3D9, D3D10, D3D11, or OpenGL
- Game must call D3D Present() or OpenGL SwapBuffers() on a fast regular basis (these calls are hooked by the overlay and give it opportunity to do work). For instance 2D games that only call these functions when mouse movement occurs or graphics on screen actually change rather than every frame will not function well.
- Game should use standard Win32 input messages, raw Win32 input messages, or DirectInput for input and the overlay will then detect hotkeys and hide/block input events from the game when active.
It sounds like your game may violate #2 and stops calling Present/SwapBuffers sometimes when the overlay is active. This may happen if you call these functions in response to user input which is now blocked due to the overlay being activated. You should guarantee you keep pumping frames and swapping at a regular interval even if input events aren't occurring."
经过更多的督促,Valve 开发人员对我的应用程序进行了概要分析,以确定 Game Overlay 是否出现了任何特定问题。不幸的是,他们无法在 Overlay 本身中找到任何发生的事情。这几乎意味着 Windows 上的 AIR 不喜欢 Overlay 阻止 Win32 输入消息。以下是 Valve 开发人员的回复:
"I got your depots and did some testing. Nothing unusual happens in the overlay. Profiling your app with xpref while the issue occurs and taking some minidumps to check callstacks it looks like the app just blocks up completely and uses zero CPU during the time it is blocked, when it happens it calls Present() only at roughly 1 second intervals until it recovers (maybe there is a 1 second timeout somewhere in the AIR code). It's hard to get much detail since I don't have any symbols for the AIR runtime libraries.
It does however look like this is somehow related to input state and AIR being unhappy with win32 input messages stopping. If I change our overlay to not block any input at all once activated (which obviously has some pretty big problems for usability, but just for testing purposes.) then the issue does not occur. It's possible that the AIR code has some weird logic where if it's seen some specific WM_WHATVER message it's expecting another right after and blocks on it waiting somehow.
Hopefully you can work out on your side or with Adobe as to why the application behaves badly in these situations and starts blocking and not presenting at regular intervals."
我已经在 Adobe 论坛上发帖,但在那里没有这样的运气。主要是,我希望有人以前处理过这个问题,或者对我如何解决这个问题有想法。如有任何建议、意见或想法,我们将不胜感激!
最佳答案
事实证明,AIR 核心框架中存在一个深层错误,这是导致此问题的根本原因。 Adobe 已确认该错误,他们正在为 Cyril (AIR 3.3) 版本修复。可以在 Adobe AIR 错误列表中查看错误的状态 (#3089755)。
在短期内,我被迫检测 SteamOverlay 使用的 Windows 消息,并传递虚假消息以防止 AIR 锁定。我通过使用 Windows API 完成此操作 SetWindowsHookEx连同 WH_DEBUG 和 WH_GETMESSAGE Hook 。这绝对不是理想的方法,但在 Adobe 发布修复程序之前短期内需要这样做。
关于windows - Adobe AIR 3.1 渲染/输入问题与 Steam 覆盖 (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838839/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac