Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2016/03/21 (月)

続・選択肢の怪

| 13:45 | 続・選択肢の怪 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 続・選択肢の怪 - 雪乃☆雫のなでしこ日和 続・選択肢の怪 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 さて・・・現実逃避ばかりもしてられないので、ちょっと、選択肢に関係したところを、抜き出してみる。

#------------------------------------------------------------
#    分岐
#------------------------------------------------------------
違えばもし、コマンドが「選択肢」ならば
  改行確認=オフ
  選択肢数=シナリオ¥行番号,2
   もし、選択肢表示位置固定=オンならば
    保持用を表画面の0,0へ画像コピー。
    メッセージ行数=0
  違えば
    選択肢表示Y=(テキストウィンドウY+メッセージY)+((「あ」の文字高さ取得+メッセージ影+行)*(メッセージ行数+1))

  #選択肢ボタンの設定
  #0ボタン表示位置X、1ボタン表示位置Y、2ボタン幅、3ボタン高さ
  (選択肢数)
    選択肢ボタン回数,0は選択肢表示X
    選択肢ボタン回数,1は選択肢表示Y+(回数-1)*((「あ」の文字高さ取得+メッセージ影+選択肢隔))
    選択肢ボタン回数,2は選択肢幅
    選択肢ボタン回数,3は(「あ」の文字高さ取得+メッセージ影)

  (選択肢数)
    行番号=行番号+1
    もし、シナリオ¥行番号,0=「-」でなければ
      選択肢数=回数-1
      抜ける
    ラベル一覧¥(回数-1)=シナリオ¥行番号,2
    シナリオ¥行番号,1を(「あ」の文字高さ取得+メッセージ影+選択肢隔)*(回数-1)へ選択肢表示。
  選択肢をボタン化。
  選択待機オン

 まず、シナリオの中に「選択肢」のコマンドがあったら、選択肢の表示位置を確認してる。

 これは、選択肢表示Xと、選択肢表示Yを、あらかじめ変数で指定しているんだけど、Yに関しては、サウンドノベル風にまで表示してきた文章の下に選択肢を表示するのか、それまでの文章は消して、毎決まった位置に選択肢を表示するのか選べるようにしているから、前者の場合Yの位置が毎変わるからなんだけど、問題のXの位置は基本固定なんだし、関係ない気がする。(ほんとか?!)

 いずれにしても、選択肢の位置を固定してるか否かに関わりなく怪現象は発生している。

 それから、表示位置とコマンドで指定した選択肢数に基づいて、ボタンの設定。

 画面に実際に選択肢を表示し、それをマウスオーバーボタン化するのは、以下関数

#-----選択肢表示---------------------------------------------
*選択肢表示(Sを{数値=0}Yへ)
  表画面の(選択肢表示X),(選択肢表示Y)+Yへメッセージ色,メッセージ影色,メッセージ影,0でSをノベルテキスト描画。
  テキスト保存

*選択肢をボタン化
  選択肢用の幅は選択肢幅*2。選択肢用の高さは(「あ」の文字高さ取得+メッセージ影)*選択肢数。
  選択肢用を選択肢幅*2,(「あ」の文字高さ取得+メッセージ影)*選択肢数で画像リサイズ。
  
  (選択肢数)
    表画面の選択肢表示X,選択肢表示Y+((回数-1)*(「あ」の文字高さ取得+メッセージ影+選択肢隔)),選択肢幅,(「あ」の文字高さ取得+メッセージ影)を選択肢用の選択肢幅,(回数-1)*(「あ」の文字高さ取得+メッセージ影)へ画像部分コピー。

   選択肢用を画像ネガポジ。
  (選択肢数)
    表画面の選択肢表示X,選択肢表示Y+((回数-1)*(「あ」の文字高さ取得+メッセージ影+選択肢隔)),選択肢幅,(「あ」の文字高さ取得+メッセージ影)を選択肢用の0,(回数-1)*(「あ」の文字高さ取得+メッセージ影)へ画像部分コピー。

#------------------------------------------------------------

 表示は、選択肢表示Xと、選択肢表示Yの位置に、選択肢として設定された文字列を、ほんとにただ表示してるだけだから問題ないでしょ。

 して、表示された選択肢の部分を一行ずつ切り取って、ボタン用の画像を作っている。

 面倒なようだけど、これで半透明に合成された背景なんかもちゃんと反映されたネガポジになるわけ。

 して・・・問題の実際にマウスオーバーを反映する部分は、元のマウスオーバーボタンとほぼ一緒だからね~。

表画面のマウス移動した時は~
  もし、選択待機オンならば
    選択肢用の選択肢ボタンを表画面へ選択肢数でマウスインアウト反映。
#------------------------------------------------------------
●マウスインアウト反映({グループ=?}OBJ1のAを{数値=0}Sで{グループ=?}OBJ2へ)
  (S)
    もし、((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
  描画処理反映
#------------------------------------------------------------

 僅かに変わっているのは、ボタン設定の配列要素数ではなく、引数で選択肢数を与えているところ。

 これは、シナリオの方のミスで、コマンドで指定した選択肢数より、実際に記載されてる選択肢が少なかった時に、表示がへんちくりんになるのを避するためだったような?

 選択肢を表示してから設定を行えば、ふつーに避出来るような気がするけど・・・っていうそれならむしろコマンドで選択肢数を指示する必要あるのか?ってゆう話だけど、何か訳があったような気もするし・・・ちょっとよく覚えておらんね;;;

 なんにしろ、この追加された引数が問題ではないことは、マウスオーバーボタンのサンプルプログラムで、検証済みなのだ。


 やっぱ、よく分からん~~~><

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