Как правильно вернуть обратные вызовы из движка C ++ в программу obj-c? - PullRequest
0 голосов
/ 26 сентября 2011

Первая ситуация:

В программе Objective C реализован написанный на C ++ движок.iPhone Xcode, чтобы быть точным.Он использует OpenGL, чтобы нарисовать все.У него есть метод renderFrame, который вызывается каждый кадр (примерно 50 раз в секунду).У пользователя есть много кнопок, которые перемещаются к другим представлениям Objective C.Эти кнопки нарисованы и обработаны в движке C ++.Когда пользователь нажимает один из них, механизм C ++ отправляет вызов программе, которую нажимают на кнопку (чтобы программа могла изменять представления).

Мой способ заставить эту работу:

Поскольку существуетметод renderFrame, я сделал так, чтобы каждый раз возвращать целочисленное значение.В большинстве случаев это 0. Но когда он возвращает что-то еще, это имеет значение.Например, если «renderFrame» возвращает 2, это означает, что нажата вторая кнопка.Чтобы обработать все эти возвращаемые значения, я должен построить довольно большой кусок IF.

Так что мой вопрос:

Поскольку я - молодой программист, я хочу знать, является ли это хорошим подходом или это так?что-то, что может придумать только младший.Этот движок будет перенесен на многие другие системы, включая Android и даже ПК, поэтому я не знаю, смогу ли я и должен ли я внедрить систему обратного вызова другого типа.Я также хотел бы знать, может ли это вызвать у меня проблемы с производительностью и каков будет более профессиональный подход.

PS На данный момент я реализовал более 20 таких обратных вызовов, и все работает просто отлично.Я могу реагировать мгновенно и точно на каждый кадр.

Спасибо за ваши предложения.

1 Ответ

1 голос
/ 26 сентября 2011

Это плохой дизайн по ряду причин.Во-первых, что произойдет, если произошло более одного события?Два нажатия кнопки одновременно?Вы отправляете 2 + 3?Вы игнорируете один и надеетесь, что это не важно?

Что происходит, когда то, что вам нужно отправить, это не просто двоичный факт?Что делать, если вы хотите отправить, какая кнопка была нажата и где это произошло?Или вам нужно передать число или символ?

У вас должен быть класс обратного вызова, что-то вроде MyGraphicsCallbacks с функциями, такими как Button1Clicked (int locationX, int locationY), и затем вызов этих функций при возникновении соответствующих событий.1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...