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

2011-02-16

選択肢を表示するよ!

| 17:16

【せんせい】

 選択肢の選択と決定と同様のことは、クイズでやりましたね。

 具体的に、何をやるかといえば、

①選択肢となるメッセージを表示

②選択肢上にマウスカーソルがきたら、メッセージの色を変えたり、反転させたりする。

③選択肢上でマウスが左クリックされたら、選択に応じて分岐先のシナリオへ進む。

 という感じになるかと思います。

 単に物語を進めるための改行、改ページの時とは、マウス入力待ちの処理を分けなければなりません。


【でし】

 改行、改ページの時は、「点滅カーソル」って関数を呼んでピカピカさせつつ、改ページ待機のフラグをオンにして、マウス入力を待ったんですよね。

【せんせい】

 のとーりです。

 も、選択肢表示用の関数を呼び、選択待ちのフラグを立てて、マウスの移動やクリックに応じて処理を行うようにすればいいでしょうかね。

 とりあえず、てきとーにメッセージ.csvに、選択肢のコマンドを加えてみます。

メッセージ,ここは函館カトリック教会。
改行,
メッセージ,被害者は、殺される前日に、この付近に
メッセージ,立ち寄った形跡があります。
改ページ,
立ち絵,立ち絵2.bmp
メッセージ,立ち絵をへんこうしました。
改ページ,
メッセージ,ちょっと話を聞いてみましょう。
改ページ,
選択肢,ちょっと名前を聞いてみる,ガイシャの写を見せる

 シナリオ解析関数の中に

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

 を、ちょちょいっと加え・・・

*選択肢表示(Sを{数値=0}Yへ)
  表画面のテキストウィンドウX+10,テキストウィンドウY+10+YへSを0でノベルテキスト描画。

 はいっ、選択肢が表示されました~。

 は簡便に、テキストウィンドウに選択肢を表示していますが、表示位置を変更すれば、別に選択肢用のウィンドウを開いて表示するということも可能かと思います。


 選択肢の表示は、遅延表示でなくてもいいかなーと思った結果、ノベルテキスト描画関数にも、ちょっと手を加えました。

 現状では、遅延スピードAが0であっても、遅延表示されてしまう為です。

●ノベルテキスト描画({グループ=?}OBJのX,YへSを{数値=200}Aで)
  もし、A=0ならば
    文字書体は「MS ゴシック|24|太字」。文字色黒色。
    OBJのX+2,Y+2へSを文字描画。
    文字書体は「MS ゴシック|24|太字」。文字色白色。
    OBJのX,YへSを文字描画。
    描画処理反映
     
  違えば、
    XX=X
    (Sの文字数
      Sの回数から1文字抜き出す。
   
      もしそれ=「{CHR(10)}」ならば
        X=XX
        Y=Y+(それ文字高さ取得)
        続ける

      文字書体は「MS ゴシック|24|太字」。文字色黒色。
      OBJのX+2,Y+2へそれ文字描画。
      文字書体は「MS ゴシック|24|太字」。文字色白色。
      OBJのX,Yへそれ文字描画。
      描画処理反映
      (A/1000)秒待つ。
   
      X=X+(それ文字幅取得

 まあ、遅延0ミリ秒が指定されていたら、文字列Sをのまま表示するってだけのことです。


 あ、あと、どうも時々あらぬところで点滅カーソルがチラッと現れるなーと思っていたら、改行の際には「ブリンク」つまり点滅カーソルのアニメーションを停止していなかったことが判明(テキストウィンドウクリアの中で停止していたため)

 「表画面のマウス押した時は~」の判定内で停止するように直しました。


【でし】

 ・・・マヂで、単に選択肢を表示しただけでしたね(汗)

【せんせい】

 はいぃ~;

 どっちかっていうと、シナリオの選択肢のコマンドをどうするか考え中って言うか。

 選択して次のメッセージにジャンプするためには、の状態ではダメなんですよね。

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

2011-02-04

立ち絵を変更するよ!

| 18:36

【せんせい】

 ではでは、この調子で、立ち絵も変更してみます。

 まず、メッセージ.csvをこんな感じに!

メッセージ,我輩はNAKOである。  
メッセージ,名前はまだない。
改ページ,
メッセージ,ここは百合が原公園。
改行,
メッセージ,死体発見現場ですw
改ページ,
背景,背景2.jpg
メッセージ,背景をへんこうしました。
改ページ,
メッセージ,ここは函館カトリック教会。
改行,
メッセージ,被害者は、殺される前日に、この付近に
メッセージ,立ち寄った形跡があります。
改ページ,
立ち絵,立ち絵2.bmp
メッセージ,立ち絵をへんこうしました。
改ページ,

 だんだん、シナリオが長くなりますね。


 シナリオ解析関数の中に

    違えばもし、コマンドが「立ち絵」ならば
      裏_立ち絵の画像はシナリオ¥番号,1
      ADV画面合成
      番号=番号+1
      シナリオ解析

 を追加

 プログラム自体は、背景の変更と手順は同じなので、何のことはありませんでしたね。

 これで、背景や人物を変えながら、物語を読み進めていくことはできるようになったと思います。

【でし】

 でも、これだけじゃゲームとは言えませんよね?

 選択肢が出て、どれを選ぶかで物語が変わっていく・・みたいなのがないと。

【せんせい】

 そうですね。

 次の、選択肢の表示について考えて見ましょう。

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