【軽量】godot engine【無料】 part5 (73レス)
上下前次1-新
15: 名前は開発中のものです。 [sage] 2025/11/04(火) 21:12:47.46 ID:AqohUvOo(1) AAS
ローグみたいな有名でオープンソースの元ネタも豊富なものは
「ローグスタイルのゲームつくって」ってAIに言えばサクッとつくってくれるんじゃないの
16: 名前は開発中のものです。 [sage] 2025/11/05(水) 12:06:45.40 ID:BBV6eM8H(1) AAS
そりゃ作ってはくれるでしょ(作ってくれるとは言っていない)
そのあとが問題なんだよな
17: 名前は開発中のものです。 [] 2025/11/05(水) 13:16:51.05 ID:hChDyjhf(1) AAS
さわれないからな、、
18: 名前は開発中のものです。 [sage] 2025/11/07(金) 01:44:01.02 ID:NCON4E65(1/4) AAS
IMEの入力中(文字に下線ある状態)にそのTextEditを削除するとその次のキー入力が押下イベントだけ発火して解放イベントが来ない
っていう現象に見舞われてるけどこれどうにかなる?
apply_imeやcancel_ime、release_focusしても無駄でした
19: 名前は開発中のものです。 [sage] 2025/11/07(金) 02:27:51.26 ID:lnTYGdBs(1/3) AAS
言っている意味が良く判らんかった
解放イベントはfocus_exitedと仮定すると
TextEdit(内のテキスト)を削除してもカレットはそこにあるのだから解放イベントは発生しないであってるんじゃないのかな?
解放イベントとはなんぞ?
20: 名前は開発中のものです。 [sage] 2025/11/07(金) 12:47:12.11 ID:NCON4E65(2/4) AAS
すみませんもうちょっと詳細に書きます
例えば以下のスクリプトを適当なノードに貼り、その子に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: 名前は開発中のものです。 [sage] 2025/11/07(金) 12:52:58.37 ID:NCON4E65(3/4) AAS
コードのインデント消えちゃったけど雰囲気で読み取ってください
修正待ちバグ案件な気もしてきた
22: 名前は開発中のものです。 [sage] 2025/11/07(金) 14:02:09.22 ID:lnTYGdBs(2/3) AAS
現象は確認できたけど対応策は判んないな
Linux環境では起きなかったのでWindows環境限定と思う
入力中のTextEditを削除する要件ってのが良く判らんがそこら辺から対策できるんじゃないのかね?
23: 名前は開発中のものです。 [sage] 2025/11/07(金) 15:51:14.73 ID:c4lPyYM9(1) AAS
はーおもしろいバグ見つけたね
これはチケット切りましょ、なんなら自分でプルリク送りましょ
24: 名前は開発中のものです。 [sage] 2025/11/07(金) 22:41:42.71 ID:NCON4E65(4/4) AAS
やっぱりキツいですかねー
やりたいのが制限時間尽きたら入力ダイアログ閉じるみたいなシンプルな動作なんだけどバグ回避するのも結構難しそう
バグ報告とかやったことないけどどうにか調べてやってみますわ……
25(1): 名前は開発中のものです。 [sage] 2025/11/07(金) 23:47:34.19 ID:lnTYGdBs(3/3) AAS
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: 名前は開発中のものです。 [] 2025/11/08(土) 08:56:20.17 ID:ZjDMOKGY(1) AAS
小さなモックはサクッと作れるようになりたい
27(1): 名前は開発中のものです。 [sage] 2025/11/08(土) 09:57:55.85 ID:0lkI1PxY(1) AAS
>>25
質問者です
ちょっと俺のスキル足りなくて理解し切れてないんだけど希望ありそうなのはありがたい
ありがとう
28: 名前は開発中のものです。 [sage] 2025/11/08(土) 10:19:28.84 ID:DnZpcrSa(1/2) AAS
>>27
IMEの候補ウインドウが表示されている時に人がエスケープキーを押して取り消す操作を
Windowsに備わってるAPI呼び出し関数を使って再現する方法を取っています
Windowsの機能を呼ぶためのDLL群の事をWin32APIと呼び
今回はキーボードの入力イベントを再現するkeybd_event関数を利用しています
Win32APIはGDScriptよりもC#からの方が呼び出すのが容易なのでC#で機能を作りました
やってる事はありきたりな方法なのでブラウザのAIにでも聞けば教えてくれると思います
29: 名前は開発中のものです。 [sage] 2025/11/08(土) 10:26:53.09 ID:DnZpcrSa(2/2) AAS
Godotのプロジェクト内でGDScriptとC#は同時に利用できるので
keybd_eventを呼び出す為だけの.csファイルを用意してGDScriptから呼び出しました
提示ソースのqueue_free()がkeybd_eventの呼び出し関数に置き代わりになります
問題の発生しないcance_ime()代替関数と言えるかもしれません
30: 名前は開発中のものです。 [] 2025/11/09(日) 06:23:31.32 ID:tZtmJDi3(1) AAS
C#とGDscriptどちら使うもんなの
31: 名前は開発中のものです。 [sage] 2025/11/09(日) 14:15:38.48 ID:yrrBSKKL(1) AAS
ワナビ2057の場合は、GDScript。
それ以外の人は、好きな方を使う。
以上、次の質問どうぞ。
Choosing Between C# and GDScript in Godot | Patrick T Coakley
外部リンク:patricktcoakley.com
32: 名前は開発中のものです。 [] 2025/11/10(月) 19:32:24.87 ID:A216r14H(1) AAS
godot用のvscode拡張で、高機能なやつなんだっけ
ピエロみたいなマークのやつ
33: 名前は開発中のものです。 [] 2025/11/11(火) 05:45:35.64 ID:Yis2Hx0Z(1) AAS
コードって全て型つけしたほうがわかりやすくなるんやろ?
untyped decralationをエラーにしといたほうがいいのかい?
34: 名前は開発中のものです。 [] 2025/11/13(木) 13:19:49.42 ID:S8ZzI1Dx(1) AAS
配列の型なんだけど、variant使うのがいいのかね?
intにすると空の[]すら入れられないみたい。
色々面倒やな
35: 名前は開発中のものです。 [sage] 2025/11/18(火) 11:30:55.19 ID:dZjxXGEg(1) AAS
var a :Array[int] = [1, 2, 3]
print(a.size()) # Prints 3
a = []
print(a.size()) # Prints 0
36: 名前は開発中のものです。 [] 2025/11/19(水) 13:30:03.17 ID:v8zT46RE(1/3) AAS
ArrayをArray[int]に簡単に変換する方法あったりするの?
for文で回して配列作り直すしかないんかな
as Array[int]はダメっぽいし
37(2): 名前は開発中のものです。 [] 2025/11/19(水) 13:30:04.56 ID:v8zT46RE(2/3) AAS
ArrayをArray[int]に簡単に変換する方法あったりするの?
for文で回して配列作り直すしかないんかな
as Array[int]はダメっぽいし
38: 名前は開発中のものです。 [sage] 2025/11/19(水) 14:15:48.17 ID:kHRrMfdl(1/4) AAS
>intにすると空の[]すら入れられないみたい。
は嘘と提示してるだけなので違う話を持ち出されても困る
らしいではなく自分で試せ
>ArrayをArray[int]に簡単に変換する方法あったりするの?
型指定をするのは自分で型を管理できるからなので不用意な変換が発生する設計をしない
変換そのものはできる、自分で調べろ
39(1): 名前は開発中のものです。 [sage] 2025/11/19(水) 14:15:55.11 ID:RIPT4Gyy(1) AAS
>>37
var array: Array = [1,2,3]
var int_array: Array[int]
int_array.assign(array)
上下前次1-新書関写板覧索設栞歴
あと 34 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.020s