WikiトップAugust Framework 2.0>AF2_tutorial9

August Framework 2.0 : チュートリアル 9 ~ エ○ゲっぽい画面を作ってみる

ここまでのチュートリアルの合わせ技+αでエ○ゲっぽい画面でも作ってみようかと思います。

  1. #include "mglaugust2.h"
  2. #define MESSAGE \
  3. "とある宇宙の果てに、おじいさんとおばあさんが居ました。 \n" \
  4. "おじいさんとおばあさんは空気が無くて死んでしまいました。"
  5. #define MSG_WAIT (2)
  6. class CMyFrame : public CAugustWindowFrame2
  7. {
  8. private:
  9. CAugustImage2 m_imgBack;
  10. CAugustImage2 m_imgWindow;
  11. CAugustText2 m_txtName;
  12. CAugustText2 m_txtMsg;
  13. int m_nCounter;
  14. public:
  15. // 初期化時に呼ばれる
  16. bool OnGraphicInitEnded()
  17. {
  18. RegistControl(&m_imgBack);
  19. RegistControl(&m_imgWindow);
  20. RegistControl(&m_txtName);
  21. RegistControl(&m_txtMsg);
  22. m_imgBack.Load("back.jpg");
  23. m_imgWindow.Load("window.bmp");
  24. m_imgWindow.SetAlpha(180);
  25. m_txtName.SetText("ナレーター");
  26. m_txtName.SetPos(40,285);
  27. m_txtName.SetFontSize(24);
  28. m_txtMsg.SetPos(45,350);
  29. m_txtMsg.SetFontSize(22);
  30. m_txtMsg.SetColor(AGHCOLOR_WHITE);
  31. m_nCounter = 0;
  32. return true;
  33. }
  34. // ウインドウ生成前に呼ばれる
  35. void OnCreateWindow(agh::CREATE_WINDOW_INFO *pWindowInfo){
  36. pWindowInfo->strWindowTitle = "おじいさんとおばあさんプログラム";
  37. }
  38. bool OnFrameDoUser()
  39. {
  40. if ( (m_nCounter/MSG_WAIT) <= (int)strlen(MESSAGE) ){
  41. m_nCounter++;
  42. if ( m_nCounter % (MSG_WAIT*2) == 0 )
  43. m_txtMsg.SetText(std::string(MESSAGE,(m_nCounter/MSG_WAIT)).c_str());
  44. }
  45. return true;
  46. }
  47. };
  48. // WinMain
  49. int APIENTRY WinMain(HINSTANCE hInstance,
  50. HINSTANCE hPrevInstance,
  51. LPSTR lpCmdLine,
  52. int nCmdShow )
  53. {
  54. CMyFrame frame;
  55. frame.Start();
  56. return 0;
  57. }

何故かおじいさんとおばあさんが出てきてしまいました。全然エ○ゲなんかじゃないですね。(何


今回のチュートリアルでは、こちら側で使用する画像ファイルを用意しておいてあります。

今回はこちらを使用してください。その方が説明が手っ取り早いので・・・。

こちら側で用意したサンプルだと何がどう違うのか?・・・と言いますと、「window.bmp」の方がそれに当たります。
見て貰えると、何やら気付かれるかと思われますが、矢鱈とピンクくて、目がチカチカしてしまいそう・・・と言ったように思われるかと思います。
しかしこの画像ファイルを使用していざ実行してみると・・・その部分が何故か透明になるのです!!


今回のチュートリアルの肝は、この「カラーキー」と呼ばれる機能です。

通常のBMP等の画像ファイルでは、「透明色」と言うものを表現する事が出来ません。(*1)
このため、特定の色を「この色は透明な色だよ」として扱うのが、カラーキーと呼ばれる技術です。

Open-MGLでは、目がチカチカするような完全なピンク(RGB値で言うと #FF00FF)をデフォルトのカラーキーとしています。
何故こんなケバケバした色を使っているのかと言うと・・・誰もこんな色使わないからです。(苦笑
白や、黒だと、その色を使おうとした際、困ってしまいます。
ちなみに仮に、かなりどぎついピンク色を使いたい場合、#FF00FE のように、ちょっと異なる色にする事により、透過されずに済みます。
(白とかをカラーキーにしていると、#010101 とかでも結構な差になる事がありますが、どぎついピンクだと、それほど差は分らない)


それからもう一つついでに。画像やテキスト等が表示される順番は、登録された順です。
これはどういう事かと言いますと、画像やテキストに重なっている所があった場合、そこに表示されるのは、後の方に登録されたコントロールの方である、
と言う事です。よって、うっかり背景画像等のように全体を覆ってしまうような画像を一番最後に登録してしまうと、それ以外の画像やテキストが一切見えなくなってしまう事があります。
気をつけてくださいね・・・。

*1 : 透過GIF、透過PNG、DDX、TGAファイル等のファイルでは、透明色を表現する事が出来ますが。