【軽量】godot engine【無料】 part5at GAMEDEV
【軽量】godot engine【無料】 part5 - 暇つぶし2ch14:名前は開発中のものです。
25/11/04 14:17:10.57 Mk8eOtM6.net
ローグ作りたいが道は遠い

15:名前は開発中のものです。
25/11/04 21:12:47.46 AqohUvOo.net
ローグみたいな有名でオープンソースの元ネタも豊富なものは
「ローグスタイルのゲームつくって」ってAIに言えばサクッとつくってくれるんじゃないの

16:名前は開発中のものです。
25/11/05 12:06:45.40 BBV6eM8H.net
そりゃ作ってはくれるでしょ(作ってくれるとは言っていない)
そのあとが問題なんだよな

17:名前は開発中のものです。
25/11/05 13:16:51.05 hChDyjhf.net
さわれないからな、、

18:名前は開発中のものです。
25/11/07 01:44:01.02 NCON4E65.net
IMEの入力中(文字に下線ある状態)にそのTextEditを削除するとその次のキー入力が押下イベントだけ発火して解放イベントが来ない
っていう現象に見舞われてるけどこれどうにかなる?
apply_imeやcancel_ime、release_focusしても無駄でした

19:名前は開発中のものです。
25/11/07 02:27:51.26 lnTYGdBs.net
言っている意味が良く判らんかった
解放イベントはfocus_exitedと仮定すると
TextEdit(内のテキスト)を削除してもカレットはそこにあるのだから解放イベントは発生しないであってるんじゃないのかな?
解放イベントとはなんぞ?

20:名前は開発中のものです。
25/11/07 12:47:12.11 NCON4E65.net
すみませんもうちょっと詳細に書きます
例えば以下のスクリプトを適当なノードに貼り、その子にTextEditを持たせるとします

func _physics_process(_delta: float) -> void:
if Engine.get_physics_frames() == 500: #時間経過で$TextEditを削除
$TextEdit.queue_free()

func _input(event: InputEvent) -> void:
if event is InputEventKey: #キー入力を記録
print(event)

この状態で適当なキー(たとえば右矢印キー)を押して離すと下記のように出力されます
InputEventKey: keycode=4194321 (Right), mods=none, physical=false, location=unspecified, pressed=true, echo=false
InputEventKey: keycode=4194321 (Right), mods=none, physical=false, location=unspecified, pressed=false, echo=false
自分が解放イベントと呼んでいるのはpressed=falseなInputEventKeyの事です

TextEditに何かしら日本語を入力して確定せず待機し、TextEditがqueue_freeで削除されるまで待ちます
その後に右矢印キーを押して離すと下記のように出力されます
InputEventKey: keycode=4194321 (Right), mods=none, physical=false, location=unspecified, pressed=true, echo=false
見ての通りpressed=falseなInputEventKeyが出力されません、
同様にインプットマップの組み込みアクションであるui_rightなども入力され続ける状態になっています
次に何かしらキーを離した時は通常の挙動に戻ります

削除そのものが原因ではなく、コードによりIMEの確定待ち状態が解除されることが原因のようです
上記コードのqueue_freeをapply_imeやcancel_ime、release_focusに変更しても同じ現象が起こります
TextEditに限らずLineEditでも同じ現象が起こります

21:名前は開発中のものです。
25/11/07 12:52:58.37 NCON4E65.net
コードのインデント消えちゃったけど雰囲気で読み取ってください
修正待ちバグ案件な気もしてきた

22:名前は開発中のものです。
25/11/07 14:02:09.22 lnTYGdBs.net
現象は確認できたけど対応策は判んないな
Linux環境では起きなかったのでWindows環境限定と思う
入力中のTextEditを削除する要件ってのが良く判らんがそこら辺から対策できるんじゃないのかね?

23:名前は開発中のものです。
25/11/07 15:51:14.73 c4lPyYM9.net
はーおもしろいバグ見つけたね
これはチケット切りましょ、なんなら自分でプルリク送りましょ

24:名前は開発中のものです。
25/11/07 22:41:42.71 NCON4E65.net
やっぱりキツいですかねー
やりたいのが制限時間尽きたら入力ダイアログ閉じるみたいなシンプルな動作なんだけどバグ回避するのも結構難しそう

バグ報告とかやったことないけどどうにか調べてやってみますわ……

25:名前は開発中のものです。
25/11/07 23:47:34.19 lnTYGdBs.net
IME制御がOSの管理下でGodotEngineから制御しきれてないのが原因と仮定して
win32apiのkeybd_eventでVK_ESCAPEを下げ上げしてIME操作を取り消した所、問題の回避に成功したと思われ
ui_rightが押されっぱなしの挙動はなくなりました

ログはこんな感じ(IMEオン→1キー入力→取り消し操作の時間まで待機→右カーソル入力)
InputEventKey: keycode=8388607 (Unknown), mods=none, physical=false, location=unspecified, pressed=false, echo=false
InputEventKey: keycode=8388607 (Unknown), mods=none, physical=false, location=unspecified, pressed=true, echo=false
InputEventKey: keycode=4194321 (Right), mods=none, physical=false, location=unspecified, pressed=true, echo=false
InputEventKey: keycode=4194321 (Right), mods=none, physical=false, location=unspecified, pressed=false, echo=false

26:名前は開発中のものです。
25/11/08 08:56:20.17 ZjDMOKGY.net
小さなモックはサクッと作れるようになりたい

27:名前は開発中のものです。
25/11/08 09:57:55.85 0lkI1PxY.net
>>25
質問者です
ちょっと俺のスキル足りなくて理解し切れてないんだけど希望ありそうなのはありがたい
ありがとう

28:名前は開発中のものです。
25/11/08 10:19:28.84 DnZpcrSa.net
>>27
IMEの候補ウインドウが表示されている時に人がエスケープキーを押して取り消す操作を
Windowsに備わってるAPI呼び出し関数を使って再現する方法を取っています

Windowsの機能を呼ぶためのDLL群の事をWin32APIと呼び
今回はキーボードの入力イベントを再現するkeybd_event関数を利用しています
Win32APIはGDScriptよりもC#からの方が呼び出すのが容易なのでC#で機能を作りました
やってる事はありきたりな方法なのでブラウザのAIにでも聞けば教えてくれると思います

29:名前は開発中のものです。
25/11/08 10:26:53.09 DnZpcrSa.net
Godotのプロジェクト内でGDScriptとC#は同時に利用できるので
keybd_eventを呼び出す為だけの.csファイルを用意してGDScriptから呼び出しました
提示ソースのqueue_free()がkeybd_eventの呼び出し関数に置き代わりになります
問題の発生しないcance_ime()代替関数と言えるかもしれません

30:名前は開発中のものです。
25/11/09 06:23:31.32 tZtmJDi3.net
C#とGDscriptどちら使うもんなの

31:名前は開発中のものです。
25/11/09 14:15:38.48 yrrBSKKL.net
ワナビ2057の場合は、GDScript。
それ以外の人は、好きな方を使う。

以上、次の質問どうぞ。

Choosing Between C# and GDScript in Godot | Patrick T Coakley
URLリンク(patricktcoakley.com)

32:名前は開発中のものです。
25/11/10 19:32:24.87 A216r14H.net
godot用のvscode拡張で、高機能なやつなんだっけ
ピエロみたいなマークのやつ

33:名前は開発中のものです。
25/11/11 05:45:35.64 Yis2Hx0Z.net
コードって全て型つけしたほうがわかりやすくなるんやろ?
untyped decralationをエラーにしといたほうがいいのかい?

34:名前は開発中のものです。
25/11/13 13:19:49.42 S8ZzI1Dx.net
配列の型なんだけど、variant使うのがいいのかね?
intにすると空の[]すら入れられないみたい。
色々面倒やな


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch