Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2011-02-27

選択肢を選択するよ!

| 12:54

【せんせい】

 と言うわけで、今日は選択肢をじっさいに選択できるようにします。

 は、メッセージ.csvに変更はありません。

 選択肢のマウスオーバー処理は、スマートじゃないもしれませんが、クイズやちょぼいちのときに作った、マウスオーバーボタン関数を使っちゃおうと思います。

 まず、シナリオ解析の選択肢の項目にちょこっと追加関数を呼び出します。

    違えばもし、コマンドが「選択肢」ならば
    	行数=0
    	(選択肢数)
        シナリオ¥番号,回数を「選択肢」の文字高さ取得行数へ選択肢表示。
        行数行数+1

      選択肢をボタン化。
//      選択肢用の0,0を選択肢ボタンで表画面へマウスオーバーボタン表示。
      選択待機オン
      番号=番号+1
//      シナリオ解析

 追加した関数を順に見て行きます。

*選択肢をボタン化
  選択肢用の幅は620*2。選択肢用の高さは「選択肢」の文字高さ取得*選択肢数。

  (選択肢数)
    表画面のテキストウィンドウX+5,テキストウィンドウY+10+*1,620,「選択肢」の文字高さ取得を選択肢用の621,(回数-1)*(「選択肢」の文字高さ取得)へ画像部分コピー。

   選択肢用を画像ネガポジ。
  (選択肢数)
    表画面のテキストウィンドウX+5,テキストウィンドウY+10+*2,620,「選択肢」の文字高さ取得を選択肢用の0,(回数-1)*(「選択肢」の文字高さ取得)へ画像部分コピー

 これは、「選択肢用」という裏画面に、元の選択肢の文章と、それを反転させたものが左右に並ぶようにコピーしたものです。

 通常時は左側の画像が、マウスオーバー時は右側の画像が表示されることになります。


 して、これボタンの設定。

 ボタンのサイズや表示位置などの設定を、二次配列で別途設定するので、なんか面倒なんだけど、管理はしやすい感じ。

選択肢ボタンとは配列。 #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、3ボタン高さ
(選択肢数)
  選択肢ボタン回数,0はテキストウィンドウX+5
  選択肢ボタン回数,1はテキストウィンドウY+10+(回数-1)*(「選択肢」の文字高さ取得+7)
  選択肢ボタン回数,2は620
  選択肢ボタン回数,3は「選択肢」の文字高さ取得+7

 通常ですとボタン設定配列Aの内容にしたがって、マウスオーバーボタン用の裏画面を、任意の画面に配置します。

 の場合は逆に、表示されたものをボタン化しているので、不要でした;

 でも、いままで使ってはいても関数を乗せていなかった気がするので、一応掲載。

●マウスオーバーボタン表示({グループ=?}OBJ1のX,YをAで{グループ=?}OBJ2へ)
  A\0,0=X。A\0,1=Y
  (Aの要素数-1)
    OBJ1のX,Y+(回数-1)*(A¥回数,3),(A¥回数,2),(A¥回数,3)をOBJ2の(A¥回数,0),(A¥回数,1)へ画像部分コピー

 実際に、マウスを動かしたりクリックしたりすると、イベントが発生。

表画面のマウス移動した時は~
  もし、選択待機オンならば
    選択肢用の選択肢ボタンを表画面へマウスインアウト反映。
  
表画面のマウス押した時は~
  もし、改ページ待機オンならば
    もし、表画面の押されたボタン=左ならば
      もし、コマンドが「改ページ」ならば
        テキストウィンドウクリア。
      ブリンクを停止。
      シナリオ解析
    違えば
      戻る
  違えばもし、選択待機オンならば
    もし、前選択ボタン=0でなければ
      「選択肢{前選択ボタン}をクリック」と言う
  
  違えば
    戻る

 実際にマウスカーソルの位置を取得して、どのボタン(選択肢)の上に乗っているかいないか判断して、画像を変える肝心の部分。

 かなり、びみょーなコードですが;;;

●マウスインアウト反映({グループ=?}OBJ1のAを{グループ=?}OBJ2へ)
  (Aの要素数-1)
    もし、((OBJ2→マウスX)>(A¥回数,0))かつ
      ((OBJ2→マウスX)<(A¥回数,0)+(A¥回数,2))かつ
      ((OBJ2→マウスY)>(A¥回数,1))かつ
      ((OBJ2→マウスY)<(A¥回数,1)+(A¥回数,3))ならば
        選択ボタン回数。
    違えばもし、(回数=Aの要素数)かつ(選択ボタン=0)ならば
      選択ボタンは0。
    ここまで

  もし、前選択ボタン<>選択ボタンならば
    もし、前選択ボタン>0ならば
      OBJ1の(A\0,0),(A\0,1)+(前選択ボタン-1)*(A¥(前選択ボタン),3),(A¥(前選択ボタン),2),(A¥(前選択ボタン),3)をOBJ2の(A¥(前選択ボタン),0),(A¥(前選択ボタン),1)へ画像部分コピー。
    もし、選択ボタン>0ならば
      OBJ1の(A\0,0)+(A¥(選択ボタン),2),(A\0,1)+(選択ボタン-1)*(A¥(選択ボタン),3),(A¥(選択ボタン),2),(A¥(選択ボタン),3)をOBJ2の(A¥(選択ボタン),0),(A¥(選択ボタン),1)へ画像部分コピー。
  前選択ボタン=選択ボタン
  選択ボタン=0
  描画処理反映

【でし】

 お~、選択肢にマウスカーソルを合わせると、反転しますね!

 とっても、ゲームっぽいです♪

【せんせい】

 して、選択肢をクリックすると、何番目の選択肢をクリックしたかが分かります。

【でい】

 っていうか・・・本当に、ただ選択しただけでしたね(汗)

*1回数-1)*(「選択肢」の文字高さ取得

*2回数-1)*(「選択肢」の文字高さ取得

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20110227