不完全是。使用 Cocoa 处理游戏中键盘输入的正确方法是什么?

2023-12-19

假设您正在为 Mac OS X 创建游戏。事实上,假设您正在创建 Quake,只是现在是 2011 年,您更愿意只使用现代的、未弃用的框架。

您希望您的游戏在用户按下(或释放)某个键时收到通知,any key,在键盘上。这包括修饰键,例如 Shift 和 Control。编辑添加:另外,您想知道是否按下了修饰键的左侧或右侧版本。

您还希望您的游戏有一个配置屏幕,用户可以在其中检查和修改键盘配置。它应该包含以下内容:

  • 向前移动:W
  • 跳跃:空间
  • 火:LCTRL

你做什么工作?我一直在努力寻找一个good回答这个问题已经一天左右了,但还没有成功。

这就是我想出的:

  • 子类 NSResponder,实现 keyUp: 和 keyDown:,如这个答案 https://stackoverflow.com/questions/275088/how-do-i-collect-key-input-in-a-video-game-style-cocoa-app/275113。这种方法的一个问题是,当用户仅按下修饰键时, keyUp: 和 keyDown: 将不会被调用。要解决这个问题,您可以实现 flagsChanged:,但这感觉就像一个黑客。
  • Use a 石英事件水龙头 http://developer.apple.com/library/mac/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/CGEventTapCreate。仅当应用程序以 root 身份运行或用户启用了辅助设备的访问权限时,此功能才有效。此外,修饰键事件仍然不算作常规键事件。
  • 使用 HI 工具箱。 10.6 开发人员文档中几乎没有提及它。它似乎非常非常不赞成。

那么,执行此操作的正确方法是什么?这确实感觉像是一个应该有一个众所周知的、有详细记录的解决方案的问题。这并不是说游戏是非常小众的。


正如其他人所说,使用没有什么问题-flagsChanged:。还有另一种选择:使用 IOKit HID API。无论如何,您应该将其用于操纵杆/游戏手柄输入,甚至鼠标输入;键盘输入可能方便也可能不方便,具体取决于您在做什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不完全是。使用 Cocoa 处理游戏中键盘输入的正确方法是什么? 的相关文章

随机推荐

  • Automake:构建不被安装的共享模块

    如何告诉Automake构建一个不被安装的动态模块 pkglib LTLIBRARIES mywrapper la mywrapper la LDFLAGS no undefined module avoid version 导致 mywr
  • 如何在 C# 中保存随机生成器的状态? [复制]

    这个问题在这里已经有答案了 出于测试目的 我使用给定的种子创建随机数 即不基于当前时间 因此整个程序是确定性的 如果发生什么事情 我希望能够快速恢复到事件发生 不久之前 的点 因此我需要能够恢复System Random到之前的状态 有没有
  • Babel 对 Object.entries 的支持

    我正在看Object values Object entries 的第 3 阶段提案 https github com tc39 proposal object values entries我真的很想在我当前的 JavaScript 项目中
  • 过桥拼图

    晚上必须有四个人过桥 任何人过桥 无论是一个人还是两个人 都必须随身携带手电筒 必须用手电筒来回走动 每个人行走的速度不同 一个需要 1 分钟 另一个需要 2 分钟 另一个需要 5 分钟 最后 10 分钟 如果两个人一起穿过 他们必须以较慢
  • 将列表中连续出现的相同重复项目分组

    例如 我们有一个这样的列表 L item1 item2 item3 item3 item3 item1 item2 item4 item4 item4 我想将它们打包到以下形式的元组列表中 item1 1 item2 1 item3 3 i
  • 如何过期或重置地理位置

    当用户访问我的网站时 我会检查是否在 PHP 中设置了位置会话 如果没有设置与用户位置的会话 我将它们重定向到 www domain net location 在此页面上有许多选项供用户选择位置 如果浏览器允许 选项之一是使用浏览器进行设置
  • 为什么 `instance_of_object.foo is instance_of_object.foo` 的计算结果为 False? [复制]

    这个问题在这里已经有答案了 如果我有一个 class A def foo self pass 这评估为True getattr A foo is A foo 但这评估为False a A getattr a foo is a foo as
  • Android 自定义轮盘或老虎机实现

    我需要实现如图所示的类似轮子的控件 老虎机 但每个项目的边缘 项目之间的位置 需要平滑 以便它看起来像地球一样的球体 这是从 iPhone 库中获得的 iPhone 应用程序的屏幕截图 我想要安卓版的 我检查了 kankan 轮 Andro
  • 请帮助我解决VHDL编译错误[重复]

    这个问题在这里已经有答案了 library IEEE use IEEE std logic 1164 all entity doorlock is port reset in std logic enable in std logic pa
  • 如何处理 Node.js 中基于 Promise 的业务级函数中的错误返回对象?

    我需要创建一个名为 getLocationById 的业务级函数 它通过 REST API 从远程服务器检索一些数据 然后路由器调用该函数以在网页上显示数据 如果 fetch 调用成功 则将 json 结果作为 Promise 返回 但是
  • 无法在属性前面使用“d:”前缀来启用设计时数据

    我使用时遇到问题d 在 前面attributes 以在 XAML 设计器中显示它们
  • React警告滚动阻塞“touchstart”的非被动事件侦听器

    我有一个带有 Material ui Slider 的 React 组件 每次渲染此组件时 我都会收到此警告 向滚动阻塞 touchstart 事件添加了非被动事件侦听器 考虑将事件处理程序标记为 被动 以使页面响应更快 如何解决这个问题
  • 有没有办法设置全屏覆盖背景不透明度?

    我需要从视图组件内的按钮推送模态视图 但应该只覆盖屏幕高度的下半部分 上半部分是半透明背景 黑色 不透明度 30 在全屏覆盖视图构建器中设置最顶层视图的不透明度不起作用 任何帮助 将不胜感激 struct ContentView View
  • 需要 Windows 安全性时下载文件的臭名昭著但未得到解决的问题

    有一个网站 http site domain com http site domain com它会通过 Windows 安全 对话框提示输入凭据 因此 我设法使用 WebBrowser 控件导航到该页面并发送击键来输入密码 我找不到其他方法
  • Knockout.js - 传递参数

    我的 Knockout js 遇到问题 我想将用户名传递给函数并在警报时显示它 一些奇怪的事情正在发生 每次当我使用正确的用户名刷新页面时 我都会收到警报 但单击它后我没有收到任何响应 这里有什么问题吗 这是我的代码 ul li class
  • 在 Xcode 4.1 中添加自定义字体

    我想在应用程序中使用自定义字体 我已经在 info Plist 文件中声明了 应用程序提供的字体 并将 label font 设置为名称带 不带 TTF 扩展名的字体 将TTF文件拖入项目并将文件复制到项目中 为品牌创造了一个出路 但仍然没
  • 使用 VBA 在电子邮件中嵌入图像

    下面的代码嵌入了照片但不显示 因为 文件可能已被移动 重命名或删除 请验证链接是否指向正确的文件和位置 我知道文件路径是正确的 Sub mail Dim Sig As String Set myOlApp CreateObject Outl
  • Android IntentService 以空意图触发

    我在 Crashlytics 中看到崩溃 致命异常 java lang NullPointerException 尝试调用 虚方法 int android content Intent getIntExtra java lang Strin
  • 如何更改 TinyMce 编辑器中的默认字体调色板?

    我想添加一些与我的网站主题相匹配的预设颜色 如何更改 TinyMce 中的默认字体调色板 截图 with shadow png http img407 imageshack us img407 4526 screenshotwithshad
  • 不完全是。使用 Cocoa 处理游戏中键盘输入的正确方法是什么?

    假设您正在为 Mac OS X 创建游戏 事实上 假设您正在创建 Quake 只是现在是 2011 年 您更愿意只使用现代的 未弃用的框架 您希望您的游戏在用户按下 或释放 某个键时收到通知 any key 在键盘上 这包括修饰键 例如 S