Akane(4)

akane を SDL2 に対応させます。

 akane を全画面表示させるとアスペクトが崩れます。この際、SDL2 に対応させてしまえば問題が解決するんじゃないかと思いました。

 まず、Makefile の CFLAGS と LDFLAGS を SDL2 用に変え、コンパイルしてエラーになる箇所を修正していきます。

 gxmenu.c でエラーが出ました。キー入力のデータの型が変わったようです。SDLKey を SDL_Keycode に変えました。

 main_sdl.c でエラー。これも同じでした。SDLKey を SDL_Keycode に変えました。

 ウィンドウの作成方法が変わったので、SDL_SetVideoMode() は使えません。SDL_CreateWindow() と SDL_GetWindowSurface() に変えました。

 SDL_UpdateRect() を SDL_UpdateWindowSurfaceRects() に変えました。

 SDL_WM_SetCaption() はなくなりました。ウィンドウのキャプションは、SDL_CreateWindow() で設定します。

 これでコンパイルは通りました。しかし、動かしてみても、BGM がなりません。

 いろいろ変えてみましたが、mad を使って音をだすことが出来ないようです。SDL2_mixer は mp3 を扱えるようなので、SDL2_mixer で鳴らすことにします。soundmgr_mad.c を参考に、soundmgr_sdl.c を作りました。もう、mad は必要ないようです。

 今度は、全画面表示ができるように修正していきます。
全画面表示には、SDL_WINDOW_FULLSCREEN と SDL_WINDOW_FULLSCREEN_DESKTOP があります。SDL_WINDOW_FULLSCREEN では解像度が切り替わりますが、ウィンドウが表示されません。何か手順を間違っているようです。SDL_WINDOW_FULLSCREEN_DESKTOP を使って、自前で拡大表示することにしました。マウスの位置もずれるので、拡大率に合わせて調整します。

メニューのクリック位置もずれるので、gxmenu.c を修正しました。

 単純な拡大なので、文字が美しくありませんが、BGM も鳴るし、全画面表示もできました。ただ、アイコン化から復帰したときにウィンドウが再描画さません。イベント処理を追加しなければいけないようです。

 また、一部のエフェクトも全画面表示だとゴミが残るようです。

Akane

Posted by sirius