【軽量】godot engine【無料】 part4 (995レス)
上下前次1-新
829(2): 名前は開発中のものです。 [] 2025/08/21(木) 17:37:16.04 ID:zThVp00O(2/3) AA×

外部リンク:pastebin.com
830: 名前は開発中のものです。 [sage] 2025/08/21(木) 18:26:36.99 ID:OYDY07jx(6/8) AAS
 ゲームマネージャがアクティブなキャラクターを保持する方式だね 
 その方が今誰がアクティブなのかが即判るので良いかもね 
  
 一つ気になる点としてはAの処理とBの処理の処理順でAが先に処理される場合 
 キャラクターAがBに衝突した際にアクティブキャラクターをBに更新してしまうと 
 その後のB側の衝突処理でBは自分がアクティブキャラクターと認識してAに更新してしまうのではと思う 
 さてどうかな? 
  
 仕様を誰でも判りやすい言語化するのはAIとの対話にも役立つと思うよ 
831: 名前は開発中のものです。 [sage] 2025/08/21(木) 18:35:03.35 ID:OYDY07jx(7/8) AAS
 ちょっと訂正、後から文章足したからキャラクターAの登場がずれた 
  
 キャラクターAとBが存在する時にAとBの処理順がAが先に処理される場合 
 AがBに衝突した際にアクティブキャラクターをBに更新してしまうと 
 その後のB側の衝突処理でBは自分がアクティブキャラクターと認識してAに更新してしまうのではと思う 
832: 名前は開発中のものです。 [] 2025/08/21(木) 19:10:14.51 ID:zThVp00O(3/3) AAS
 おっしゃる通りキャラAからキャラBにタッチした時にB側の_on_area_enteredが実行されて再度キャラAに操作権が渡る可能性があるため(物理サーバーがシグナルを発火させる順番に依存するため100%ではない) 
 「アクティブ側だけが切替処理を実行」「同じ物理フレームでの多重切替を禁止」の処理を盛り込む必要ありです 
  
 流石です 
833: 名前は開発中のものです。 [sage] 2025/08/21(木) 19:31:45.99 ID:OYDY07jx(8/8) AAS
 AIが使えるとかなり捗るね 
  
 自分の上げた>>828828(2): 名前は開発中のものです。 [sage] 2025/08/21(木) 15:57:31.56 ID:OYDY07jx(5/8) AAS
 必要なのかどうか判らんが>>825の制御方法を回答するなら以下かな 
 操作可能キャラクターに現在操作権があるかどうかを判定するアクティブフラグを持たせる 
 操作はフラグが有効な場合にのみ処理する 
 衝突シグナルの発呼はフラグが有効な場合にのみ処理する 
 衝突シグナル発呼後にフラグを無効にする 
 衝突シグナル着呼時にフラグを有効にする  
方式だと発呼するのが一人だけなのが保証されているので複数による切り替えは発生しない 
 >>829方式の場合はもうひと工夫が必要 
  
 これもやり方は色々あるけど一つ方法を挙げておくと 
 即時にアクティブキャラクターを更新するのが問題の発生原因なので更新処理を遅延させる 
 call_deferredを使用すると現フレームと次フレームの間に処理が行われるのでこれを利用する 
  
 より具体的にはアクティブキャラクター更新処理を関数化してcall_deferredで呼ぶ 
 自分で使うならこう書くんだけど行儀が良くないコードなので実用するなら適宜直してね 
  
 (func():gm.active_char = other_char).call_deferred() 
834: 名前は開発中のものです。 [] 2025/08/22(金) 12:59:11.02 ID:5H9qw/cT(1/2) AAS
 ありがとう 
 じっくり読んで作るナリよ 
  
 やっぱりアクティブキャラだけシグナルを発する方式が安全なんすかね? 
835: 名前は開発中のものです。 [sage] 2025/08/22(金) 13:20:20.86 ID:hykeI/+Z(1) AAS
 今回上がった>>828,829どちらでも多重切り替えの対策をしていれば安全性は変わらない 
 作る人が作りやすい間違えにくい方式を選べば良い 
 現在のアクティブキャラを頻繁に知る必要があるなら>>829の方が良いと思う 
 >>828の場合は対象キャラクターの全件走査が必要になる 
 >>828のメリットはゲームマネージャ不要なので携わるクラスやファイルが少なくなる事かな 
 全件走査の件はグローバルクラス化して静的変数を持たせればゲームマネージャを用意せずとも同じ結果を得られる 
 やり方は色々存在する 
  
 尚現処理では2体以上のキャラクターと同時に衝突した場合の切り替え対象が不定となるので 
 優先順位が必要な場合は何らかの追加処理が必要 
836: 名前は開発中のものです。 [] 2025/08/22(金) 19:05:13.94 ID:5H9qw/cT(2/2) AAS
 ありがとう 
 勉強がてら、フィルタリングでやってみるか 
837: 名前は開発中のものです。 [] 2025/08/25(月) 19:24:52.64 ID:pgacrMvG(1) AAS
 パッパとRPG造りたいナリ 
838: 名前は開発中のものです。 [sage] 2025/08/26(火) 07:36:55.38 ID:jvaDPhtX(1) AAS
 そういうあなたにぴったりなゲームエンジンがカドカワさんからでてますよ・・・ 
839: 名前は開発中のものです。 [] 2025/08/26(火) 09:16:02.52 ID:QxOlVIen(1) AAS
 あーいうの余計むずく感じるんで無理 
840(1): 名前は開発中のものです。 [sage] 2025/08/26(火) 13:49:17.12 ID:WJT07pkb(1) AAS
 じゃあ、おまえは何もできません、おまえ自身が無理だからです 
 出直してきてください 
 はい、次のワナビどうぞ 
841: 生出白液 [] 2025/08/29(金) 00:02:13.70 ID:511euTV9(1/2) AAS
 extends CharacterBody2D 
 var gravity = 980 
 var jump_velocity = -600 
 var p = 2 # ジャンプ回数 
 @onready var sprite = get_node("rotation_fish") # 子ノード(回転魚など) 
 func _physics_process(delta): 
 velocity.y += gravity * delta 
 if is_on_floor(): 
 p = 2 
 if Input.is_action_just_pressed("jump") and p > 0: 
 velocity.y = jump_velocity 
 p -= 1 
 if sprite: 
 sprite.call("receive_message", p) # 回転に通知 
 move_and_slide() 
 if is_on_wall(): 
 get_parent().result = 1 
 get_parent()._result() 
 queue_free() 
 このコードに物体のy座標が800を超えたら 
 get_parent().result = 1  get_parent()._result()  queue_free() 
 と同じような実行をするコードを追加で作ってもらいたいです。親ノードは下のようです 
 extends Node2D 
 var result = 0 # 状態管理用 
 func _ready(): 
 $Label.visible = false # 最初は非表示 
 func _result(): 
 if result == 1: 
 $Label.text = "finish" 
 $Label.visible = true 
 else: 
 $Label.visible = false 
842: 名前は開発中のものです。 [sage] 2025/08/29(金) 01:40:24.24 ID:VmXngAYr(1) AAS
 >>840 
 お前Unity質問スレでもその先生ごっこやってたことあるだろ 
 滑ってんだよそのノリ 
 いちいちワナビ追っかけていって絡むのやめろ 
843(1): 名前は開発中のものです。 [sage] 2025/08/29(金) 01:51:57.67 ID:NTpF3sfj(1) AAS
 「子が移動後に壁にぶつかったら親に通知して消滅するコードに 
 子のy座標が800を超えたら1行目と同様の処理を追加したい」 
  
 "壁に接触している"事を判定しているのはif is_on_wall():の部分なのでここを変更する 
 "壁に接触している"または"y座標が800を超えている"とする 
 if is_on_wall() or position.y > 800.0: 
  
 こんなん? 
844(2): 生出白液 [] 2025/08/29(金) 21:55:18.53 ID:511euTV9(2/2) AAS
 そのコードを加えてみましたが、Invalid assignment of property or key 'result' with value of type 'int' on a base object of type 'Window'.というエラーが出ました。このエラーの意味が全く分かりません教えてもらいたいです 
845: 名前は開発中のものです。 [sage] 2025/08/29(金) 22:12:20.66 ID:US91n0Bz(1) AAS
 煽りとか抜きにチャットAIに投げたほうが早いぞ 
846: 名前は開発中のものです。 [sage] 2025/08/29(金) 22:48:50.42 ID:Zy5HkM5N(1/2) AAS
 >>844 
 そのエラーはresultプロパティにアクセスしようとしたがプロパティが存在しないから発生している 
 >>843の修正を元には発生しない 
  
 想像に想像を重ねるとエラー文に出てくる"Window"はエラーを出したノードの親ノードを指している 
 if _on_wall():の次行のget_parent().result = 1が既出エラーを発生させる可能性がある 
 親ノードにぶら下がる子ノードだったならこのエラーにはならず親ノードの場合に発生する 
  
 修正以前にコードの親関係が正しくなくコードが機能する状態でないと思われる 
 修正前コードを動かすには孫ノードとコードが不足しているのでそれらの追加が必要 
  
 ノード構成は以下となるはず 
 Node2D (親コードextends Node2D配下のアタッチ先) 
 +CharacterBody2D (子コードextends CharacterBody2D配下のアタッチ先) 
 ++CollisionShape2D 
 ++Sprite2D (孫コードのアタッチ先※提示されていない) 
  
 自分もAIに聞いた方が応答速度が早くて良いと思うよ 
847: 名前は開発中のものです。 [sage] 2025/08/29(金) 23:01:21.73 ID:Zy5HkM5N(2/2) AAS
 想定が足りていなかった 
 CharacterBody2Dノードをブランチしてシーンとした場合に 
 修正後コードでこのシーンを「現在のシーンを実行」で動かすと>>844のエラーが発生する 
 本来親ノードがなければ動かないシーンをカレントシーンで動かした事が原因 
 正しく親ノードの配下としてCharacterBody2Dを配置する事 
848(3): 生出白液 [] 2025/09/02(火) 22:58:19.74 ID:E0WT+1Oc(1) AA×

849: 名前は開発中のものです。 [sage] 2025/09/02(火) 23:33:43.35 ID:HYRahreF(1/3) AAS
 >>848 
 get_parent()とは一つ上のノードを取得する関数なので 
 図のPlayerでget_parent()を実行したならば結果はColorRectになる 
 なのでColorRectの子としてPlayerを配置するならがresult変数はColorRectが持っていなければエラーとなる 
  
 一回の実行で同じ_redayが二回呼ばれる事は考えにくい 
 print関数で表示した結果の後ろの数字はノードの固有番号なので違っているならばそれぞれのノードが存在している事になる 
 ツリー上にCharacterBody2Dが2つ存在していてそれぞれが同じコードが割り当てられていると推測する 
 この場合、図示されているCharacterBody2DではないCharacterBody2DはNode2Dの配下のはず 
 ルート直下のCharacterBody2Dを削除すればresultにアクセスできないエラーはなくなる 
850: 名前は開発中のものです。 [sage] 2025/09/02(火) 23:45:42.11 ID:HYRahreF(2/3) AAS
 >>848 
 >シンプルにChatgptの使い方が悪いかもしれないけどあまり使えなかったです 
 判らない事は幾ら考えても判らないので聞いてくれて構わないが 
 残念ながらこういう場では解答が貰える保証がない 
 なので独学で学習しているならAIの利用方法を習得するのが望ましい 
  
 もちろんAIが確実に正答を返してくれる訳ではないので判らなかったら質問を投げてくれてOK 
 しかし返ってくるかどうかいつ返ってくるかも判らない返答を待つのは効率が悪い 
 自分は使ってないので判らないが廃墟に近いここよりDiscordの方が活気があったりしないだろうか? 
851: 名前は開発中のものです。 [sage] 2025/09/02(火) 23:49:54.24 ID:HYRahreF(3/3) AAS
 後は英語力必要になるけどredditあたりか 
 どこでも同じだけどコミュニティのルールに沿った質問が出来ないと相手にされなくなるから 
 質問する際にはルールを覚える必要はあるね 
852(1): 名前は開発中のものです。 [sage] 2025/09/03(水) 00:01:51.40 ID:jiI02xbM(1/4) AAS
 >>848 
 少し間違っていた 
 自分:fish:<CharacterBody2D#29007807814> 
 親:root:<Window#28470936891> 
 親の親:<Object#null> 
 自分:fish:<CharacterBody2D#31323063660> 
 親:result:<Node2D#31272731991> 
 親の親:ColorRect:<ColorRect#31239177554> 
  
 このパターンだとColorRectの下にコードを持ったCharacterBody2Dは居ない 
 rootの下に配置されているのでこのツリーには存在していない 
 グローバルにCharacterBody2Dのコードを登録してはいまいか? 
853: 名前は開発中のものです。 [sage] 2025/09/03(水) 11:39:46.16 ID:2H/FhQha(1/2) AAS
 こういうやり取りのいいところは 
 ChatBOT使ったところでそいつができないことができるようになるわけじゃない、と確認できることだよな 
 こりゃあ、何年かかっても何もできないわけだわ 
上下前次1-新書関写板覧索設栞歴
あと 142 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.051s