【軽量】godot engine【無料】 part4 (940レス)
1-

822: 08/21(木)12:09 ID:Ajf2SJxV(1) AAS
最後はアルゴリズムだからなぁ
823: 08/21(木)12:24 ID:OYDY07jx(2/8) AAS
ゲームにおけるデータ処理なら必要なアルゴリズムは辞典読めば事足りると思う
ゲームに必要な物ならある程度はエンジンが機能を提供してくれる
他がやってない独創的な処理を実装したいなら頭悩ますしかないね
824: 08/21(木)13:27 ID:zThVp00O(1/3) AAS
実装したい機能について考え方さえわからない場合も多い
Godotではないが答えを見なければ今でも簡単な当たり判定すら実装できていなかっただろうと思う
825
(2): 08/21(木)14:05 ID:/HImpd/9(3/3) AAS
キャラクターをスイッチしたいのだけども
アクティブキャラだけ操作権があって、別キャラと衝突したらそっちに操作権が移る

シグナルはキャラA,B共にarea2dを使っていてあらかじめ有効化している
シグナルのオンオフをいちいち切り替えるのは面倒そうなんで

a,b両方から衝突のシグナルが飛んでくるんで、フィルタリングしたい
フィルタリングの条件分岐に必要な要素って何があるかな?

現在操作キャラ(a)からのシグナルを無視して、それ以外(b)からのシグナルが来たら、bに切り替えるって流れかな
オンオフで対応したほうがシンプルでいいかな

こういう論理的思考が壊滅的に出来ないみたい
練習方法ない?
826: 08/21(木)14:59 ID:OYDY07jx(3/8) AAS
自分が理解できない物を論理的に考えるのは無理なのでまず自分が理解できる所まで単純化する
コンピュータを指示通りに動く人として捉える
相手に自分の考えを伝えるには相手が理解できる言葉を使う
相手がどこまで理解できているかを想像する

>>325の例題を要約すると以下の感じであってるかな?
「アクティブ時にのみ操作可能なキャタクターが複数存在する」
「操作キャラクターが操作可能キャラクターに衝突すると操作権が衝突した相手に移る」
相手が理解しやすい単純な説明を心がける
まず概要を伝えて会話する為の基礎を築く
シグナルとかArea2Dだとか複雑な話題はなくて良い
相手と共通認識ができたらより複雑な話題へ移る

こんな感じで物事を単純化してそこから徐々に複雑化していく
練習方法としては相手が知らない事を説明する事、仕様書を書いて読んで貰う事かな?
場を作るのが難しいけどディスカッションを多数こなすのが良いのではないかな
827: 08/21(木)15:00 ID:OYDY07jx(4/8) AAS
>>325でなくて>>825だったわ
828
(2): 08/21(木)15:57 ID:OYDY07jx(5/8) AAS
必要なのかどうか判らんが>>825の制御方法を回答するなら以下かな
操作可能キャラクターに現在操作権があるかどうかを判定するアクティブフラグを持たせる
操作はフラグが有効な場合にのみ処理する
衝突シグナルの発呼はフラグが有効な場合にのみ処理する
衝突シグナル発呼後にフラグを無効にする
衝突シグナル着呼時にフラグを有効にする
829
(2): 08/21(木)17:37 ID:zThVp00O(2/3) AA×

外部リンク:pastebin.com
830: 08/21(木)18:26 ID:OYDY07jx(6/8) AAS
ゲームマネージャがアクティブなキャラクターを保持する方式だね
その方が今誰がアクティブなのかが即判るので良いかもね

一つ気になる点としてはAの処理とBの処理の処理順でAが先に処理される場合
キャラクターAがBに衝突した際にアクティブキャラクターをBに更新してしまうと
その後のB側の衝突処理でBは自分がアクティブキャラクターと認識してAに更新してしまうのではと思う
さてどうかな?

仕様を誰でも判りやすい言語化するのはAIとの対話にも役立つと思うよ
831: 08/21(木)18:35 ID:OYDY07jx(7/8) AAS
ちょっと訂正、後から文章足したからキャラクターAの登場がずれた

キャラクターAとBが存在する時にAとBの処理順がAが先に処理される場合
AがBに衝突した際にアクティブキャラクターをBに更新してしまうと
その後のB側の衝突処理でBは自分がアクティブキャラクターと認識してAに更新してしまうのではと思う
832: 08/21(木)19:10 ID:zThVp00O(3/3) AAS
おっしゃる通りキャラAからキャラBにタッチした時にB側の_on_area_enteredが実行されて再度キャラAに操作権が渡る可能性があるため(物理サーバーがシグナルを発火させる順番に依存するため100%ではない)
「アクティブ側だけが切替処理を実行」「同じ物理フレームでの多重切替を禁止」の処理を盛り込む必要ありです

流石です
833: 08/21(木)19:31 ID:OYDY07jx(8/8) AAS
AIが使えるとかなり捗るね

自分の上げた>>828方式だと発呼するのが一人だけなのが保証されているので複数による切り替えは発生しない
>>829方式の場合はもうひと工夫が必要

これもやり方は色々あるけど一つ方法を挙げておくと
即時にアクティブキャラクターを更新するのが問題の発生原因なので更新処理を遅延させる
call_deferredを使用すると現フレームと次フレームの間に処理が行われるのでこれを利用する

より具体的にはアクティブキャラクター更新処理を関数化してcall_deferredで呼ぶ
自分で使うならこう書くんだけど行儀が良くないコードなので実用するなら適宜直してね

(func():gm.active_char = other_char).call_deferred()
834: 08/22(金)12:59 ID:5H9qw/cT(1/2) AAS
ありがとう
じっくり読んで作るナリよ

やっぱりアクティブキャラだけシグナルを発する方式が安全なんすかね?
835: 08/22(金)13:20 ID:hykeI/+Z(1) AAS
今回上がった>>828,829どちらでも多重切り替えの対策をしていれば安全性は変わらない
作る人が作りやすい間違えにくい方式を選べば良い
現在のアクティブキャラを頻繁に知る必要があるなら>>829の方が良いと思う
>>828の場合は対象キャラクターの全件走査が必要になる
>>828のメリットはゲームマネージャ不要なので携わるクラスやファイルが少なくなる事かな
全件走査の件はグローバルクラス化して静的変数を持たせればゲームマネージャを用意せずとも同じ結果を得られる
やり方は色々存在する

尚現処理では2体以上のキャラクターと同時に衝突した場合の切り替え対象が不定となるので
優先順位が必要な場合は何らかの追加処理が必要
836: 08/22(金)19:05 ID:5H9qw/cT(2/2) AAS
ありがとう
勉強がてら、フィルタリングでやってみるか
837: 08/25(月)19:24 ID:pgacrMvG(1) AAS
パッパとRPG造りたいナリ
838: 08/26(火)07:36 ID:jvaDPhtX(1) AAS
そういうあなたにぴったりなゲームエンジンがカドカワさんからでてますよ・・・
839: 08/26(火)09:16 ID:QxOlVIen(1) AAS
あーいうの余計むずく感じるんで無理
840
(1): 08/26(火)13:49 ID:WJT07pkb(1) AAS
じゃあ、おまえは何もできません、おまえ自身が無理だからです
出直してきてください
はい、次のワナビどうぞ
841: 生出白液 08/29(金)00:02 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: 08/29(金)01:40 ID:VmXngAYr(1) AAS
>>840
お前Unity質問スレでもその先生ごっこやってたことあるだろ
滑ってんだよそのノリ
いちいちワナビ追っかけていって絡むのやめろ
843
(1): 08/29(金)01:51 ID:NTpF3sfj(1) AAS
「子が移動後に壁にぶつかったら親に通知して消滅するコードに
子のy座標が800を超えたら1行目と同様の処理を追加したい」

"壁に接触している"事を判定しているのはif is_on_wall():の部分なのでここを変更する
"壁に接触している"または"y座標が800を超えている"とする
if is_on_wall() or position.y > 800.0:

こんなん?
844
(2): 生出白液 08/29(金)21:55 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: 08/29(金)22:12 ID:US91n0Bz(1) AAS
煽りとか抜きにチャットAIに投げたほうが早いぞ
846: 08/29(金)22:48 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: 08/29(金)23:01 ID:Zy5HkM5N(2/2) AAS
想定が足りていなかった
CharacterBody2Dノードをブランチしてシーンとした場合に
修正後コードでこのシーンを「現在のシーンを実行」で動かすと>>844のエラーが発生する
本来親ノードがなければ動かないシーンをカレントシーンで動かした事が原因
正しく親ノードの配下としてCharacterBody2Dを配置する事
848
(3): 生出白液 09/02(火)22:58 ID:E0WT+1Oc(1) AA×

849: 09/02(火)23:33 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: 09/02(火)23:45 ID:HYRahreF(2/3) AAS
>>848
>シンプルにChatgptの使い方が悪いかもしれないけどあまり使えなかったです
判らない事は幾ら考えても判らないので聞いてくれて構わないが
残念ながらこういう場では解答が貰える保証がない
なので独学で学習しているならAIの利用方法を習得するのが望ましい

もちろんAIが確実に正答を返してくれる訳ではないので判らなかったら質問を投げてくれてOK
しかし返ってくるかどうかいつ返ってくるかも判らない返答を待つのは効率が悪い
自分は使ってないので判らないが廃墟に近いここよりDiscordの方が活気があったりしないだろうか?
851: 09/02(火)23:49 ID:HYRahreF(3/3) AAS
後は英語力必要になるけどredditあたりか
どこでも同じだけどコミュニティのルールに沿った質問が出来ないと相手にされなくなるから
質問する際にはルールを覚える必要はあるね
1-
あと 89 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.042s