不完全是。使用 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 处理游戏中键盘输入的正确方法是什么? 的相关文章

  • 从 cocoa 编辑系统偏好设置

    有没有办法使用可可以编程方式编辑系统首选项 是否需要一些框架 我需要这样做来更改全局代理设置 另外 我的应用程序是沙盒的 有关于如何执行此操作的示例代码吗 感谢您的帮助 您正在寻找系统配置框架 但这并不容易 我认为沙盒应用程序不可能这样做
  • VLCJ 无法在 Mac 上运行 - 插件 libvlccore.5.dylib

    我正在尝试让 VLCJ 在 Mac 和 PC 上运行 它在 Windows 7 64 位 下运行良好 但当我尝试在 Mac 上运行它时 它崩溃了 我指向 VLC dylib 文件的正确目录 但收到 使用 libvlccore 5 dylib
  • 使用 NSError 检查错误的正确结构

    我正在编写各种例程 并尽力保持其整洁和重构 我正在创建的方法开始看起来与此代码类似 IBAction buttonPress id sender Create Document Shopping List with this documen
  • 无法连接到 macOS 上的 Docker 守护进程

    我通常更喜欢使用brew 来管理我的OSX 上的应用程序 我能够安装 docker docker compose 和 docker machine docker version Docker version 17 05 0 ce build
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • Sqlite代码28“文件在打开时重命名”

    这是一个推论这个问题 https stackoverflow com questions 27784704 sqlite deadlock across multiple threads with different files nored
  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 如何通过辅助功能 API 获取当前所选文本的全局屏幕坐标。

    我需要帮助来了解字典应用程序如何在任何应用程序上按 CMD CTRL D 时显示所选文本的以下弹出对话框 我想实施 我的可可应用程序具有相同的功能 我的应用程序将在后台运行 并显示有关所选文本的一些热键的建议 我已经实现了热键捕获 我只需要
  • XCode 4.2.1 在 Lion 10.7.2 上启动时崩溃

    这周我买了大约 10 年来的第一台 Mac 是的 这是一台二手 Mac Pro 2x2GHz 双核 Xeon 2GB RAM 它全新安装了 Mac OS X Lion 10 7 2 我只安装了 OmniOutlner Pro Textmat
  • 错误:执行 gem 时... (Gem::FilePermissionError)

    我检查了所有其他类似的答案 没有一个与我的完全一样 这些解决方案也不适合我 gem environment and sudo gem environment给出相同的结果 RubyGems Environment RUBYGEMS VERS
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • macOS Pluginkit 输出中的前缀是什么意思?

    执行中pluginkit match在终端中产生以下输出 跳过不重要的行 com apple ncplugin weather 1 0 com apple share SinaWeibo post 1 0 H com apple Inter
  • 使用 Webkit 的调试版本运行 Safari

    我通过运行以下命令编译了 webkit 的调试版本 工具 脚本 build webkit debug 成功构建后 我尝试通过运行以下命令来使用已编译的 Webkit 调试版本来运行 safari sudo Tools Scripts run
  • gdb 声称它不知道如何运行

    我在 Mac Pro 上的 Mac OS X 10 6 6 上使用 Xcode 3 2 3 来构建 GrowlTunes 的修订版 5fd480ef577f咆哮开发存储库 http growl info hg growl developme
  • 在开发过程中自动允许访问 MacOS 辅助功能 API

    我正在开发一个使用辅助功能 API 的应用程序 每次我进行更改和重建时 我都必须删除该应用程序并将其重新添加到下面的 安全和隐私 可访问性 视图中 一段时间后这会变得非常烦人 有没有什么方法可以在开发时禁用此安全检查 或者即使应用程序本身正
  • 使用不同的苹果帐户更新 XCODE

    我的操作系统是 MAC 10 7 3 xcode 4 3 1 使用不同的 apple id 安装 因为我的 macbook pro 以前被我的朋友使用过 现在 当我尝试将 Xcode 升级到 4 3 2 时 它会询问我朋友帐户的凭据 不幸的
  • NSView 鼠标跟踪

    我在 Mac OS X 上遇到了 Cocoa NSView 的奇怪行为 我在 NSView 容器中有一个自定义 NSView 这个自定义 NSView 跟踪鼠标移动 点击 并有一个工具提示 当我在所描述的视图上方添加 NSView 时 即使
  • OS X Cocoa 自动布局隐藏元素

    我正在尝试使用新的自动布局 http developer apple com library mac documentation UserExperience Conceptual AutolayoutPG Articles Introdu
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58

随机推荐

  • 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