https://linen.dev logo
カスタムボタン下での幕の切り替えについて
# forum
p
種別、行先両方をカスタムボタンで切り替えております。 切り替え時に行先の値と連動した種別のみでしか切り替わらず、解決方法を教えていただきたいです。 下記はその部分の抜き出しになります。 function render_roll(entity) { if (!entity) { return; } var dataMap = entity.getResourceState().getDataMap(); var ikisaki = dataMap.getInt("Button0"); var syubetu = dataMap.getInt("Button1"); var renderFunc = Math.floor(Date.now() / 1000) % 8 < 4 ? render_ikisaki : render_syubetu; renderFunc(ikisaki, syubetu); }
p
切り替え時に行先の値と連動した種別のみでしか切り替わらないと言うのがどういうことかよくわかりません
p
行先と同じcaseの種別が表示されてしまうということです。言葉足らずですいません
p
このコードは自分で書いたものですか?読んでみたところで何をしているコードなのかよく理解できなくてもっと詳細が知りたいと思います
p
恐らく4秒単位で種別単体表示と行き先単体表示をしたいのかと
p
はい。
p
全体的なスクリプトが欲しいですね、
p
一部ChatGPTで記述を行ったため挙動が想定と異なるものになってしましました。
p
私は
Copy code
javascript
    var renderFunc = Math.floor(Date.now() / 1000) % 8 < 4 ? render_ikisaki : render_syubetu;
    renderFunc(ikisaki, syubetu);
がなにをしているのかが分からないのですが
render_ikisakiとrender_syubetuの正体も気になるし
そもそもこれ動くのかって考えてますけど
p
function render_roll(entity) { if (!entity) { return; } var dataMap = entity.getResourceState().getDataMap(); var ikisaki = dataMap.getInt("Button0"); var syubetu = dataMap.getInt("Button1"); var renderFunc = Math.floor(Date.now() / 1000) % 8 < 4 ? render_ikisaki : render_syubetu; renderFunc(ikisaki, syubetu); } function render_ikisaki(ikisaki) { switch (ikisaki) { case 0: no_i.render(renderer); break; case 1: kawa_chu.render(renderer); break; case 2: nishi_ka.render(renderer); break; case 3: kusa.render(renderer); break; case 4: kusa_n.render(renderer); break; case 5: makinogawa.render(renderer); break; case 6: nanto_cho.render(renderer); break; case 7: makinoko.render(renderer); break; case 8: sakano.render(renderer); break; case 9: maikura_chu.render(renderer); break; case 10: kuma.render(renderer); break; case 11: mihara.render(renderer); break; case 12: jin.render(renderer); break; case 13: hagi.render(renderer); break; case 14: kiri.render(renderer); break; case 15: siro.render(renderer); break; case 16: tomi.render(renderer); break; case 17: shiba.render(renderer); break; case 18: aoga.render(renderer); break; case 19: sanda.render(renderer); break; case 20: mizono.render(renderer); break; case 21: shin_saka.render(renderer); break; case 22: kawahama_a.render(renderer); break; default: break; } }
p
お
p
function render_syubetu(syubetu) { switch (syubetu) { case 0: no_s.render(renderer); break; case 1: local.render(renderer); break; case 2: rapid.render(renderer); break; case 3: exp.render(renderer); break; case 4: semi_exp.render(renderer); break; case 5: com_semi_exp.render(renderer); break; case 6: com_exp.render(renderer); break; case 7: rapid_exp.render(renderer); break; case 8: semi_ltd_exp.render(renderer); break; case 9: s_semi_ltd_exp.render(renderer); break; case 10: ltd_rapid.render(renderer); break; case 11: not_s.render(renderer); break; case 12: test_r.render(renderer); break; case 13: extra.render(renderer); break; default:break; } }
p
とりあえず
Copy code
javascript
 var renderFunc = Math.floor(Date.now() / 1000) % 8 < 4 ? render_ikisaki : render_syubetu;
は実際に使えるかと
p
切り替わりはするのですが、種別のカスタムボタンでの操作が不可となってしまいます..
p
if(Math.floor(Date.now()/1000)%8 < 4){ render_syubetu(syubetu) }else{ render_ikiasaki(ikisaki) } が一般的かと
p
```javascript function render_syubetu(ikisaki, syubetu) { … } ```とかでなんとかできそうなきが?
そうですよね
わかりやすい構文にしたほうがいいと思いますよね
p
このコードお借りして試してみます。
p
Copy code
javascript
var ikisaki = entity ? entity.getResourceState().getDataMap().getInt("Button0") : 0;
var syubetu = entity ? entity.getResourceState().getDataMap().getInt("Button1") : 0;
if(Math.floor(Date.now() / 1000) % 8 < 4){
  render_ikisaki(ikisaki);
}else{
  render_syubetu(syubetu);
}
こういう風につかいます。
p
この実装が一般的ではないことには同意しますけど種別のほうが変わらないってのはfunction render_syubetu(syubetu)を renderFunc(ikisaki, syubetu);で呼び出してるから render_syubetu()のsyubetuにはikisakiの値が入ってる
のが原因だと思いました
知らんけど
それでこれを出しました
コードだけ投げといたよりは説明も付けてるほうが見る方に優しいかと思ったので
p
引数の数違くてもクラッシュしないんでしたっけ
p
しますか??
しないと思いますよ
p
そうなんですね
p
function render(entity, pass, par3)とかもpass par3 使わんならfunction render(entity)だけでも動くし
p
まじか
p
1.12.2では違ったりするのかな
p
ところで、送られたスクリプトだと、ikisakiとsyubetuが読み取られていないような
p
最初のものにはありましたけど
下のではなくなってますね
p
ん
p
絵にするとこうなる
私の案
p
こちら試しまして正常に動作いたしました。
p
なるほど 関数の引数の簡単な説明も付けておきます 名前とかとは関係なく前から順番で入ることに注意
p
ありがとうございます。
p
動作すればOKです!
p
お二人ともありがとうございました。
p
上手くできてよかったです
p
ちなみに引数消して、ikisakiとsyubetuでvarなしで宣言をするという手もある()
p
でも本当に普通はこうはしないと思うんだよね
p
その部分をchatGPTに聞いたのかな?
p
機械脳は違うんだな
p
できるだけ短くしたいのかな?と思う
p
chatGPTたまにお世話になってるけどほんと想像もしてなかった方法答えてくるんですよね
p
ChatGPTに聞いたところ今のよりこっちの方がいいぞ!と出てきたのがこれでして.....
p
機械は理解できるけど人間にはできなかったのか
p
function render_syubetu(syubetu)もchatGPTが出したのか?
p
そうですね。おそらく別々に動作させることを考慮していなかったのだと....
自分も気づけませんでしたが......
p
その会話が残ってるのであれば、"function render_syubetu(syubetu)内でもdataMap.getInt("Button0")が読み取られてるんだけど。" とイチャモンつけると修正してくれたかもしれませんねw
p
あーそうだな
そもそもfunction render_syubetuやfunction render_ikisakiの中でdataMapの値取っても行けたんだな
すっごく遠回りしてたなあ