0

Mac OS X で動作するアプリケーション、ゲームのポートがあります。make でビルドし、NSApplication、NSWindow、および NSOpenGLView から必要なものにアクセスするためにいくつかの .mm ファイルを追加しただけです。

  1. 現在のコンソール形式ではなく、適切なアプリに「変換」するにはどうすればよいですか? もしそうなら、どうやってそれを何かにバンドルしますか?それとも、ある種のリンカ設定 (Windows の場合など) ですか? XCode を使用してビルドする必要がありますか?
  2. 現在、システムを「チェック」するだけです。つまり、OS X メッセージ ポンプを適切に利用するのではなく、イベントをポーリングします。固定フレームレートで自分のものを「ティック」しながら、それを適切に行う方法を示す基本的なサンプルまたはチュートリアルを教えてください。ドキュメントに関しては目が見えないので、「サンプルまたはチュートリアル」と言います。

ありがとう!

4

2 に答える 2

3

適切な Mac アプリケーションを作成するには、Mac OS X バンドルを作成する必要があります。Apple サイト (こちら) で優れたドキュメントを見つけることができます。それらは標準ツールで作成できます(パックするファイルとファイルの作成方法を説明する単純な.iniファイルからバンドルを作成するための小さなpythonスクリプトを作成しました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 のメッセージ ポンプがどのように機能するかについては、Matt Gallagher によるこの記事を読むことをお勧めします。彼は、NSApplication クラスの実行メッセージがどのように実装されているかを説明しています。次に、保留中のメッセージがある場合にのみ反復するこのメソッド runOnce を記述できます。次に、この関数を定期的に呼び出します (これは、Win32のPeekMessageTranslateMessage、およびシーケンスに非常に似ています)。DispatchMessage

- (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];
}
于 2011-01-08T23:13:19.300 に答える
1

たくさんの Mac 固有の API と XCode を本当に学びたいのでない限り、SDLだけを使用する必要があります。これは、イベント処理、スレッド化、マルチメディアなどを抽象化するクロスプラットフォーム ライブラリです。これには、コードへの変更を最小限に抑えて適切なアプリ バンドルを構築できる XCode テンプレートが含まれています。SDL を使用すると、作成した Mac 固有のコードのほとんどを破棄することになりますが、将来の移植が大幅に簡素化され、複数のプラットフォーム用にアプリを維持しやすくなります。

于 2011-01-08T23:09:22.810 に答える