Создание приложения для Mac OS X вместо консоли - PullRequest
0 голосов
/ 09 января 2011

У меня есть порт моего приложения, игра, работающая на Mac OS X. Я собираю с помощью make и только добавил несколько файлов .mm для доступа к необходимым из NSApplication, NSWindow и NSOpenGLView.

  1. Как мне "преобразовать его" в правильное приложение в отличие от текущей формы консоли? Связать ли это с чем-то, если да, то как? Или это какой-то тип настройки компоновщика (как в Windows)? Нужно ли строить с использованием XCode?
  2. В настоящее время я просто "ставлю галочку" на систему, то есть опрашиваю ее на наличие событий, а не использую насос сообщений OS X должным образом. Не могли бы вы указать мне какой-нибудь базовый пример или учебник, который покажет мне, как это сделать правильно, и в то же время я могу пометить свои собственные вещи с фиксированной частотой кадров? Я говорю «образец или учебник», так как я слеп, когда дело доходит до документации.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 января 2011

Для создания правильного приложения Mac вам нужно создать пакет Mac OS X. Вы можете найти отличную документацию на сайте Apple, здесь . Вы можете создать их с помощью стандартного инструмента (я написал небольшой скрипт на python для создания пакета из простого файла .ini, который описывает файлы для упаковки и как создать файл Info.plist).

По сути, пакет приложений - это обычный каталог с расширением .app и фиксированной структурой. Необходим следующий файл:

Application.app/
  + Contents/
    + MacOS/
    | + <Executable>
    + Resources/
    | + <Icon>
    + Info.plist

Файл Info.plist является стандартным файлом списка свойств (либо в XML, либо в старом формате), который указывает, как называется исполняемый файл (CFBundleExecutable), как называется файл значка ( CFBundleIconFile), тип пакета (CFBundleType со значением APPL) и некоторые другие сведения (поддерживаемый тип файла, строка версии, язык разработки, ...). Этот файл является строгим минимумом, необходимым для базового приложения Mac OS X.

Для объяснения того, как работает насос сообщений Mac OS X, я рекомендую прочитать эту статью Мэтта Галлахера. Он объясняет, как реализовано сообщение запуска класса NSApplication. Затем вы можете написать этот метод runOnce, который повторяется только при наличии ожидающих сообщений. Затем вы будете периодически вызывать эту функцию (она действительно похожа на последовательность PeekMessage, TranslateMessage и DispatchMessage на Win32):

- (void)runOnce
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    [self finishLaunching];

    for (;;)
    {
        [pool release];
        pool = [[NSAutoreleasePool alloc] init];

        NSEvent *event =
            [self
                nextEventMatchingMask:NSAnyEventMask
                untilDate:nil
                inMode:NSDefaultRunLoopMode
                dequeue:YES];

        if (sender == nil)
            break;

        [self sendEvent:event];
        [self updateWindows];
    }

    [pool release];
}
1 голос
/ 09 января 2011

Если вы действительно не хотите изучать связку специфичных для Mac API и XCode, вам следует просто использовать SDL .Это кроссплатформенная библиотека, которая абстрагирует такие вещи, как обработка событий, многопоточность и мультимедиа.Он включает в себя шаблоны XCode, которые позволяют вам создать правильный пакет приложений с минимальными изменениями в вашем коде.Использование SDL означало бы отбрасывание большей части написанного для Mac кода, но это значительно упростило бы любые будущие порты и упростило бы поддержку вашего приложения для нескольких платформ.

...