お知らせ掲示板 | 質問掲示板 | 不具合報告掲示板 | 機能要望掲示板 | 雑談掲示板

  新規投稿 ┃全記事一覧 ┃検索 ┃設定 ┃サポートフォーラムトップ  
262 / 401 ツリー ←次へ | 前へ→

テキスト画面中に独立した機能を持つボタンを作成したいのですが… ふなむし 2011/11/5(土) 22:50
Re:テキスト画面中に独立した機能を持つボタンを作成... ふなむし 2011/11/6(日) 3:22
新規追加は難しい。 KT 2011/11/6(日) 14:26
Re:新規追加は難しい。 KT 2011/11/6(日) 15:34
参考にした箇所 KT 2011/11/6(日) 15:47
Re:新規追加は難しい。 ふなむし 2011/11/6(日) 16:04
(注意)バージョンUP時の対応は自己管理が必要です... KT 2011/11/6(日) 23:29
Re:新規追加は難しい。 KT 2011/11/7(月) 0:41
Re:新規追加は難しい。 ふなむし 2011/11/7(月) 21:43
Re:新規追加は難しい。 穂乃井 2011/11/11(金) 21:36
Re:新規追加は難しい。 ふなむし 2011/12/9(金) 18:37
Re:新規追加は難しい。 穂乃井 2011/12/10(土) 12:39
Re:新規追加は難しい。 ふなむし 2011/12/10(土) 15:10
Re:新規追加は難しい。 穂乃井 2011/12/10(土) 15:44
ご回答、ありがとうございます! ふなむし 2011/12/10(土) 17:03

テキスト画面中に独立した機能を持つボタンを作成...
 ふなむし  - 2011/11/5(土) 22:50 -
  
掲示板で調べたところ、難しい事だけがわかりました……><


新規でボタンを作成する場合、
ERISの中身をいじらなければならないという事はわかったのですが、
どれをどういう風に変更したらいいのか、というところからサッパリわかりません。


こちらが想定しているのは、
テキストメッセージ表示中にそのボタンを押すと
分岐するようなものを考えています。

ですので、メッセージ表示とボタンの表示が同居した状態でなくてはなりません。
※今のところは、メインメニューの「セーブ」とかと一緒のレイヤーに表示させたらできるんじゃないのか……な? と思ってます。
-------------------------------------------------------
 分岐方法は、セリフ直前ローカルフラグ1に会話内容に対応した数値を入れ、
 ボタンが押された際にローカルフラグ1の数値をローカルフラグ2に反映し、
 ローカルフラグ2の結果に遷移するというものを考えています。
-------------------------------------------------------

独自の機能を持つボタンを新規で作成する方法の例を
ひとつ教えてもらえないでしょうか。

また、私のやり方が非効率であったら修正頂けると助かります。

先生方、どうぞよろしくお願いいたします。m(_ _)m
引用なし
パスワード

Re:テキスト画面中に独立した機能を持つボタンを作...
 ふなむし  - 2011/11/6(日) 3:22 -
  
すみません、1点追記させていただきます。

一応、コンパイラ時のエラーに怒られながら手探りでやってみて、
ボタンを作成して配置するところまでたどり着いたのですが

 1.中身が機能していない
 2.他のボタンと同じように暗転中非表示にならない

という問題点にあたりました……。
このあたりについても教えてくれると助かります。

あれやこれやと聞いてしまって恐縮ですが、よろしくお願いいたします。


>掲示板で調べたところ、難しい事だけがわかりました……><
>
>
>新規でボタンを作成する場合、
>ERISの中身をいじらなければならないという事はわかったのですが、
>どれをどういう風に変更したらいいのか、というところからサッパリわかりません。
>
>
>こちらが想定しているのは、
>テキストメッセージ表示中にそのボタンを押すと
>分岐するようなものを考えています。
>
>ですので、メッセージ表示とボタンの表示が同居した状態でなくてはなりません。
>※今のところは、メインメニューの「セーブ」とかと一緒のレイヤーに表示させたらできるんじゃないのか……な? と思ってます。
>-------------------------------------------------------
> 分岐方法は、セリフ直前ローカルフラグ1に会話内容に対応した数値を入れ、
> ボタンが押された際にローカルフラグ1の数値をローカルフラグ2に反映し、
> ローカルフラグ2の結果に遷移するというものを考えています。
>-------------------------------------------------------
>
>独自の機能を持つボタンを新規で作成する方法の例を
>ひとつ教えてもらえないでしょうか。
>
>また、私のやり方が非効率であったら修正頂けると助かります。
>
>先生方、どうぞよろしくお願いいたします。m(_ _)m
引用なし
パスワード

新規追加は難しい。
 KT  - 2011/11/6(日) 14:26 -
  
 実は私も、諸事情によりメッセージのボタンに新ルーチンを割り当てるため、解析してる最中です。
 この辺り、ラベルの単純なGREPだけではほとんど解析がやりにくい所で、ボタンタスク処理・マウス操作の検知(多分タスク)処理・メッセージ窓の表示(多分タスク)処理など解析する必要がありますが、どうされましたか?

 メニュー画面設計.txtの\BT.SETで、既存ボタンの処理ルーチンを置き換えられないか? とは思っていますが確認はできていません。

 ちなみに、GOSUB先のルーチンブロック内で、変数にメッセージやフラグ値を予め保存しておくことは可能ですが、メッセージを直接書くことはできません。恐らく\GOで抜けるのも禁止だと思われます。
引用なし
パスワード

Re:新規追加は難しい。
 KT  - 2011/11/6(日) 15:34 -
  
1.多分ですが、メイン画面設計.txtで「\BT.SET(BTN.TEST)」とした場合、
#=ES.GAMEMAIN.BTN.TEST.ONをユーザー側に作ればコールされると予想されます。

#=ES.GAMEMAIN.BTN.TEST.ON
{
  ・
  \GO ← 恐らく使用禁止
  ・
 return[]
}

 ただ問題は、GOSUBルーチン構造でなければなりません。また、一般プログラム思考的に内部からGOで外へ抜けることはできないと思われます。
 また、ルーチン内にメッセージを書く場合、return[]の動作が保障外となります。

 メッセージ処理タスクを操作すればできる可能性はあるでしょうが、現段階では\GOSUBの登場を待つしか無いと思います。
引用なし
パスワード

参考にした箇所
 KT  - 2011/11/6(日) 15:47 -
  
メニュー画面設計.txtの\BT.SET
\data\script\ERIS\Scene\GAMEMAIN\ES_Gamemain.ystの#=ES.GAMEMAIN.BTN.??????.ON
引用なし
パスワード

Re:新規追加は難しい。
 ふなむし  - 2011/11/6(日) 16:04 -
  
ご返答有難うございます^^

◆まず、現状の私の手元をご報告いたしますと、

■■■■■ES_Gamemain.yst内に
//■[PARTY]ボタン --------------------------------------------------
//
#=ES.GAMEMAIN.BTN.PARTY.ON
{
\LET.IF(@L(2)> 1,\LET(@L(3)=@L(2)))
    return[]
}

■■■■メイン画面設計.txt内に


        \BT.NAME("■PARTY")//パーティボタン
        \BT.GROUP(1)
        \BT.CGSYS("main/button/btn_party_bt3")
        \BT.XY(279+50*00, 425-50)
        \BT.Z(020)
        \BT.MAP.A(128)
        \BT.SET(BTN.PARTY)


いじったのは以上のみです。
このような@L(2)の数値を@L(3)に引越しさせるだけのボタンが作成出来ました。


そして、私が今つきあたっている問題として

1.暗転中でも何でも表示されている。
2.本当だったらその後「ボタン入力をトリガーとした分岐」を行いたかったのですが
 ※サブルーチンでの以降後はテキストによる演出が不可能であるという事ですので
  こちらは現状出来ない仕様である事が分かりました。

------------------------------------------------------------
◆とりあえず、敷居の高さだけはわかりました!

ボタンの作成は
KTさんのようなお詳しい方でも手間だというのであれば
私では到底自力で何とか出来そうにありません(゜Д゜;)

そもそも、サブルーチンに入った先でメッセージの表示が出来ないとなると
考えている機能そのものが再現出来ないという事になりますので
諦めて別の機能で処理できるよう、考えてみます!


------------------------------------------------------------
◆困っている事

せめて1.だけでも解決できたら応用も出来そうかなと考えています。
ERISの中にもボタンの表示回りとか挙動の部分を見つけたのですが
全く理解出来なかったので手出し出来ず、泣いて逃げ帰ってきた次第です(.ω.;)

どのファイルのどのあたりをいじれば、
表示優先度がメイン画面に表示されている「セーブ」とかのボタンと同じようになってくれるのでしょうか……???

あれこれと長文となりましたがご教示いただけたらと思います。
どうぞよろしくお願いいたします^^


> 実は私も、諸事情によりメッセージのボタンに新ルーチンを割り当てるため、解析してる最中です。
> この辺り、ラベルの単純なGREPだけではほとんど解析がやりにくい所で、ボタンタスク処理・マウス操作の検知(多分タスク)処理・メッセージ窓の表示(多分タスク)処理など解析する必要がありますが、どうされましたか?
>
> メニュー画面設計.txtの\BT.SETで、既存ボタンの処理ルーチンを置き換えられないか? とは思っていますが確認はできていません。
>
> ちなみに、GOSUB先のルーチンブロック内で、変数にメッセージやフラグ値を予め保存しておくことは可能ですが、メッセージを直接書くことはできません。恐らく\GOで抜けるのも禁止だと思われます。
引用なし
パスワード

(注意)バージョンUP時の対応は自己管理が必要で...
 KT  - 2011/11/6(日) 23:29 -
  
>◆困っている事
>
>せめて1.だけでも解決できたら応用も出来そうかなと考えています。
>ERISの中にもボタンの表示回りとか挙動の部分を見つけたのですが
>全く理解出来なかったので手出し出来ず、泣いて逃げ帰ってきた次第です(.ω.;)
>
>どのファイルのどのあたりをいじれば、
>表示優先度がメイン画面に表示されている「セーブ」とかのボタンと同じようになってくれるのでしょうか……???

そっか、ES_Gamemain.yst無改造でのボタン機能変更は無理そうですね。
これは多分ES_Gamemain.yst内の

    //------------------------------------------------------------
    //●その他のボタン
    //------------------------------------------------------------
以降にある、
            \BT.ES1($BID+"BTN.??????")
            \BT.ES0($BID+"BTN.??????")
 を変更しなければならないのかもしれません。

 よって、バージョンアップの時変更し忘れない様に注意が必要です。
 自信がない場合はラベル名を変更せず、ES_Gamemain.yst内の該当ボタンルーチンをユーザー側に引越しさせて下さい。(変更し忘れた場合、エラーで分かると思います)
引用なし
パスワード

Re:新規追加は難しい。
 KT  - 2011/11/7(月) 0:41 -
  
>ちなみに、GOSUB先のルーチンブロック内で、変数にメッセージやフラグ値を予め保存しておくことは可能ですが、
 しまった…こう書きましたが、メッセージ中に記述できる\Cや\Rや\TC他は、恐らく変数に保存できないと予想されます。それを考えると、メッセージの扱いは無理そうですね。
引用なし
パスワード

Re:新規追加は難しい。
 ふなむし  - 2011/11/7(月) 21:43 -
  
ボタンの表示の件、教えていただいた通りに変更したら
言う事を聞いてくれるようになりました!(´ω`*)
ありがとうございます!!

メッセージに関してはやはり\GOSUBをゆっくり待とうと思います。
本当に助かりました! 有難うございます^^

>>ちなみに、GOSUB先のルーチンブロック内で、変数にメッセージやフラグ値を予め保存しておくことは可能ですが、
> しまった…こう書きましたが、メッセージ中に記述できる\Cや\Rや\TC他は、恐らく変数に保存できないと予想されます。それを考えると、メッセージの扱いは無理そうですね。
引用なし
パスワード

Re:新規追加は難しい。
 穂乃井 WEB  - 2011/11/11(金) 21:36 -
  
どうもです。独自ボタンの追加ですが、
KTさんの説明の通りにしていただければ、ボタンを押したときに
そのラベルへジャンプされます。
ただERISの改造に関しては、
バージョン毎に ERIS 内部が少しずつ変化しているため、
バージョンアップしていくうちに ERIS 内部の大幅変更により、
改造部分の移植が難しくなってしまう可能性があることだけ、どうかご容赦ください。

それと、ボタンを押した瞬間に特定のラベルにジャンプさせることは
\GO や近日実装予定の \GOSUB を書いても実現できず、現状のβ4では
説明も難しい程度にいろいろと複雑面倒な処理が必要になります。

ただ現在β5に向けて ERIS を整理中なのですが、特定のラベルへ GO ジャンプする機能
(ただし GOSUB ジャンプはできません)を専用に実装することは
簡単にできるようになりそうなので、近日中に試験的に仮実装します。
仮実装したらここでお知らせします。

また、独自ボタンや独自画面の追加に関しては、
β5で正式機能となる予定で、ある程度簡単になると思いますので、
申し訳ないですがそれまでお待ちいただければと思います。
引用なし
パスワード

Re:新規追加は難しい。
 ふなむし  - 2011/12/9(金) 18:37 -
  
お忙しいところ、GOSUBの実装、ありがとうございます^^

早速ですが、GOSUBでサブルーチンの動きについての質問になります。

\GOSUBで指定した先の内容がテキストだった場合は、
\RETURNで正常に\GOSUBが作動した直後に遷移するのですが、

\GOSUBで指定した先の内容に
\CM.SXYZ等の命令が含まれていた場合、
サブルーチンの内容は正常に動作するのですが、
\RETURNでの戻り先が
\GOSUBが作動した直後ではなく、
\GOSUBが作動したラベルのトップになります。

意図した挙動なのか否かがわかりませんので教えていただけると助かります。


まだ実装したばかりの機能でマニュアルへの記載が先になるべきなのでしょうが、
万が一意図していない動作であるのも良くないので念の為、ご連絡しました。
時間のある時にでも確認頂ければと思います^^
引用なし
パスワード

Re:新規追加は難しい。
 穂乃井 WEB  - 2011/12/10(土) 12:39 -
  
いろいろ検証してみましたが、ちょっとこちらでは再現できませんでした。
以下のサンプルはそちらで正しく動きますでしょうか?
(ファイル名やラベル名は適当に変えてください)
もし可能であれば、再現する簡単なサンプルを頂けますでしょうか。


#SAMPLE

\BG.CMXYZ(80, -80, 080)
\BG(bg_030, , 0, 0)

あいうえお

\GOSUB(サブルーチン)

さしすせそ

\GO.TITLE


#=サブルーチン

\CM.SXYZ(-80, 80, -080, 5000)
\CM.GO

かきくけこ

\RETURN
引用なし
パスワード

Re:新規追加は難しい。
 ふなむし  - 2011/12/10(土) 15:10 -
  
お忙しい中、お早い返答ありがとうございます!
すみません、とても大事な事が抜けていたみたいです。

\GOSUBについては、正常な挙動を確認しました。
誤報告でお騒がせしてすみません><

私が確認しましたのは
\LET.IFで代入式に\GOSUBを用いた際に発生していました。

最新のダウンロードファイルで下記のコマンドが実行された際、
「あいうえお」「かきくけこ」が繰り返されるので、
\RETURNの際に#SAMPLEに戻っているかと思われます。

//------------------------------------
#SAMPLE

あいうえお

@L(1)=1
\LET.IF(@L(1)==1,\GOSUB(サンプル))

さしすせそ

\GO.TITLE

#サンプル

\CM.SXYZ(-80, 80, -080, 5000)
\CM.GO

かきくけこ

\RETURN
//------------------------------------

たびたびお手数をおかけして恐縮ですが、
確認頂ければと思います。

よろしくお願いいたしますm(。 。)m
引用なし
パスワード

Re:新規追加は難しい。
 穂乃井 WEB  - 2011/12/10(土) 15:44 -
  
//------------------------------------
#SAMPLE

あいうえお

@L(1)=1
\LET.IF(@L(1)==1,\GOSUB(サンプル))

さしすせそ

\GO.TITLE

#サンプル

\CM.SXYZ(-80, 80, -080, 5000)
\CM.GO

かきくけこ

\RETURN
//------------------------------------


なるほどそういう使い方でしたか。
見たところ、\LET.IF の使い方が間違っているようです。
マニュアルにありますが、\LET.IF の記述は

\LET.IF(条件式,代入式1,代入式2)

でして、

代入式:変数へ代入する式を記述します。

という感じなので、@A=1 などの代入式はかけますが、
\GOSUB などの命令を書くことは出来ません。


では条件を満たした場合だけ \GOSUB で飛ぶには
どうしたらいいか、ということになりますが、
まだ正式命令ではないのですがじっくり動作確認してから開放しようと思っていた
\GOSUB.IF という命令が、実は最新版の 0.455/0.06a で利用可能な状態になっていますので、
よければそちらを試してみてください。

記述の仕方は \GO.IF と同じで、

\GOSUB.IF( 条件式, ラベル1, ラベル2 )

となり、
条件式が満たされたときはラベル1へ GOSUB ジャンプし、
満たされなかったらラベル2へ GOSUB ジャンプします。

サンプルを書き直すとしたら、

//------------------------------------
#SAMPLE

あいうえお

@L(1)=1
\GOSUB.IF(@L(1)==1,サンプル)

さしすせそ

\GO.TITLE

#サンプル

\CM.SXYZ(-80, 80, -080, 5000)
\CM.GO

かきくけこ

\RETURN
//------------------------------------

このようになります。
参考になれば幸いです。
引用なし
パスワード

ご回答、ありがとうございます!
 ふなむし  - 2011/12/10(土) 17:03 -
  
なるほど、使い方が間違っているのに頑張って動いていてくれていたんですね!

>\GOSUB.IF という命令が、実は最新版の 0.455/0.06a で利用可能な状態になっていますので、
「さすが!」と口をついて出てしまいました@@
ご教示頂きました通りで正常に稼働することを確認しました。

当初に質問させて頂いた独自のボタンの件ですが、
こちらも\GOSUB.IFを使用することでどうにかなりそうです。

何度もお手間をかけさせてしまって申し訳ないです(・ω・`)
本当にありがとうございます!
引用なし
パスワード

  新規投稿 ┃全記事一覧 ┃検索 ┃設定 ┃サポートフォーラムトップ  
262 / 401 ツリー ←次へ | 前へ→
59,455
(SS)C-BOARD v3.8.1β4 is Free.