【问题标题】:How to correctly return callbacks from C++ engine to obj-c program?如何正确地将 C++ 引擎的回调返回到 obj-c 程序?
【发布时间】:2011-09-26 12:39:42
【问题描述】:

首先是情况:

Objective C 程序中实现了 C++ 编写的引擎。准确地说是 iPhone xcode。它使用 OpenGL 来绘制一切。它有“renderFrame”方法,每帧调用一次(大约每秒 50 次)。用户有许多按钮可以导航到其他 Objective C 视图。这些按钮也是在 C++ 引擎中绘制和处理的。当用户按下其中一个按钮时,C++ 引擎会向程序发送一个按钮被按下的回调(因此程序可以更改视图)。

我的工作方式:

由于有一个“renderFrame”方法,我让它每次都返回整数值。大多数时候它是0。但是当它返回别的东西时,它就有意义了。例如,如果“renderFrame”返回 2,则表示按下了第二个按钮。为了处理所有这些返回值,我必须构建大量的 IF。

所以我的问题:

由于我是一名新程序员,我想知道这是否是一种好方法,还是只有初级人才可能想出的方法。这个引擎将被移植到包括android甚至PC在内的许多其他系统上,所以我不知道我是否可以以及是否应该实现其他类型的回调系统。我也想知道这是否会给我带来性能问题以及更专业的方法。

附:目前我已经实现了 20 多个这样的回调,一切正常。我可以在每一帧中立即准确地做出反应。

感谢您的建议。

【问题讨论】:

  • 如果这个问题不好,至少告诉我原因。

标签: c++ objective-c coding-style opengl-es callback


【解决方案1】:

这是一个糟糕的设计,原因有很多。首先,如果发生了不止一个事件会发生什么?一次点击两个按钮?你送2+3吗?你会忽略一个并希望它不重要吗?

当您需要发送的不仅仅是一个二进制事实时会发生什么?如果您想发送单击了什么按钮以及发生的位置怎么办?或者您需要传输一个数字或字符?

你应该有一个回调类,比如 MyGraphicsCallbacks 和 Button1Clicked(int locationX, int locationY) 之类的函数,然后在它们各自的事件发生时调用这些函数。

【讨论】:

  • 感谢您的回答。虽然目前禁用了多点触控,但以后可能会启用它。最好在较小的时候尽早更改样式。我现在将朝着正确的方向前进。
猜你喜欢
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多