2

私は現在、mingw の下でスプライト エンジンをクロスコンパイルしています。したがって、私は2つの質問があります。

SDL の動作は、WebGL レイヤーを介して Emscripten によってエミュレートされます。emcc でコンパイルするときに、SDL ライブラリをリンクする必要さえありません。

  1. 質問は:

    このようにアプリを初期化すると:

    if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) == -1)return -1;
    SDL_Surface *screen= SDL_SetVideoMode(640, 480,  24, SDL_SWSURFACE);
    SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 255, 0, 0));
    SDL_Flip(screen);
    

    次に、ブラウザのテキストフィールドにテキストを入力できませんが、SDL_Events を取得しています。チェックボックスや選択ボックスなどの他のすべてのブラウザ入力は機能しています。

    このようにアプリを初期化すると (Emscripten は SDL_Init なしでも動作します!):

    SDL_Surface *screen= SDL_SetVideoMode(640, 480,  24, SDL_HWSURFACE);
    SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 255, 0, 0));
    SDL_Flip(screen);
    

    その後、ブラウザーのテキスト フィールドに tet を入力できますが、SDL_Events を取得できません。

    ブラウザのテキスト入力フィールドと SDL_Events を機能させるための回避策はありますか?

  2. 質問

    私のWIN32システムでコンパイルされたこのコード行は、画面を青く塗りつぶします

    SDL_FillRect(screen,NULL, SDL_MapRGB(screen->format, 255, 0, 0));
    

    Emscripten でコンパイルされた同じ行が画面を赤く塗りつぶします。

    Emscripten または SDL ヘッダーで SDL の色を切り替える方法はありますか?

4

3 に答える 3

2

Emscripten はデフォルトで、すべてのユーザー イベントをページにキャプチャします。これは、たとえばフルスクリーンのゲームでは理にかなっています。あなたのユース ケースでは、Emscripten の SDL_Init を変更して重要なイベントをリッスンしないようにしたり、 receiveEvent の戻り値を変更したりすることをお勧めします。

于 2012-12-16T02:20:40.540 に答える