在OS X游戏中,建议将其称为获取键盘和鼠标事件的方法.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for(;;)
{
NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES];
if(!event) break;
processevent(event);
...
}
[pool release];
Run Code Online (Sandbox Code Playgroud)
这是在游戏主循环(它的跨平台)中调用的.
由于OSX 10.5.X的最新版本,当有可用事件时,此调用会突然占用每个事件几毫秒,并且在事件出现时游戏的帧速率会受到影响.如果有多个事件,则在较慢的mac上每帧可能需要10毫秒.
任何人都知道为什么这是?或者我可以做什么来获得事件而不会如此影响游戏?
我尝试通过手动获取鼠标位置来自己管理鼠标事件,当它接近屏幕边缘时将其扭曲到中心,但这会导致动作出现故障(仅当光标被隐藏时).
其他替代方案可能是从HID经理那里得到的东西,我们已经为操纵杆做了这些东西,但是HID并不是非常清楚.
mac越快,获得事件的这些障碍就越明显.
顺便说一句,我不知道为什么该方法需要这么长时间才能返回。这值得在cocoa-dev 列表或其他 Apple 论坛资源上进行调查。我的猜测是,自己管理事件是一个坏主意 \xe2\x80\x94 AppKit 对此进行了优化,并且你可以放心地打赌它会比组合在一起的自定义代码快得多。
\n\n但是,您可以采取一些措施来防止它影响您的游戏:将其放在单独的线程中。这是一种建议的方法,可以防止 UI 在长时间方法调用期间冻结。Apple 发布了线程编程简介指南,可以帮助您快速了解所需的关键概念。
\n| 归档时间: |
|
| 查看次数: |
3050 次 |
| 最近记录: |