[過去ログ] 【軽量】godot engine【無料】 part3 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
92: 2024/03/04(月)16:51 ID:Y8uyU2JR(3/4) AAS
ありがとう
93: 2024/03/04(月)18:19 ID:Y8uyU2JR(4/4) AAS
extends Node2D
var line2d_node:Line2D
var mouse_pos
func _ready() -> void:
line2d_node = get_node("Line2D")
func draw_to_cursor():
for i in range(1):
# 点を打つ処理
var line_point = self.position
line2d_node.add_point(self.position)
line2d_node.add_point(mouse_pos)
print("draw")
line2d_node.clear_points()

連投すみません
数時間やって解決出来なかったので質問させてください

上で放物線の質問をしたものです。

自キャラを起点としてマウス位置にline2dを伸ばしたいのですが、描画されません。
画像のように線を1本だけ描きたい感じです

clear_points関数がなければ描画されるので、この部分の処理がまずいのだと思います。
inputでdraw_to_cursorを実行しているので、マウスを動かしたときに処理が走りますが、瞬時に消えてしまうから問題なのだと思います。
しかし、process内でやってもすぐ消えてしまいます(ラインが描画されない)。

94: 2024/03/04(月)18:58 ID:maXrH/rV(1) AAS
点追加→描画→クリアじゃなくて最初にクリアしてから点を追加する様にすればいいんじゃない?
それかLine2dは使わずdraw_line()で描くとか
95
(1): 2024/03/04(月)21:05 ID:MRQbhd4x(4/4) AAS
ほぼ正解なのに後一考が足りないのが惜しい
clear_points()が何をする命令かを理解し
処理の最後にclear_points()するとどうなるのか考えれば自明だと思うのだがな
96: 2024/03/05(火)05:33 ID:NetOoeu2(1/3) AAS
リファレンス見直してみます ありがとう
消し方の部分ですね
97
(1): 2024/03/05(火)06:35 ID:NetOoeu2(2/3) AAS
godotってaiインテリセンスとかないのですかね?
visual studioのあれは楽すぎてビビった記憶があります
先の先まで先読みしてくれるので
98: 2024/03/05(火)12:37 ID:NetOoeu2(3/3) AAS
>>95
こんなふうに描画関数内の削除ではなく、フレーム内で削除するようにしたらうまくいきました。
どうもコードの流れが分かってないみたいです
画像リンク

図にしてみましたがこれの違いを言語化出来ないでしょうか?

外部リンク:ideone.com
extends Node2D
var line2d_node:Line2D
var mouse_pos
func _ready() -> void:
line2d_node = get_node("Line2D")
func _process(delta: float) -> void:
mouse_pos = get_global_mouse_position()
line2d_node.clear_points()
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
draw_to_cursor()
func draw_to_cursor():
for i in range(1):
# 点を打つ処理
var line_point = self.position
line2d_node.add_point(self.position)
line2d_node.add_point(mouse_pos)
print("描画")
99
(1): 2024/03/05(火)13:32 ID:LGdF4KOk(1) AAS
図表が何の例なのかが判らないのでそれとは違う話をする
GUIアプリはライフサイクルに従って動作する
Godotの良い例が見つからなかったのでUnityのライフサイクルを元に話を進める
外部リンク[html]:docs.unity3d.com
図中の処理を以下の様に読み替えて欲しい
Awake=_init()
Start=_ready()
FixedUpdate=_physics_process()
OnMouseXXX=_input()
Update=_process()

ここで注視するのは画面描画のタイミングでそれは各種Renderingのステージで行われる
Initialization:初期化
Physics:物理演算
Input events:入力反映
Game logic:ゲーム処理
を経て、それらの処理で作られた描画データを元に描画が行われる
描画後は物理演算から繰り返し
これはUnityの例なのでGodotにおいては実行順が異なる可能性がある
100
(1): 2024/03/05(火)14:58 ID:2jT49Fhn(1) AAS
そもそもdraw_to_cursor内に描画処理は入ってない
add_pointは後から_draw()で描画される事になる線を構成する点を追加するというだけ
101
(1): 2024/03/05(火)16:14 ID:WbtfMd0/(1) AAS
>>97
vscode経由でやればできるにはできるけど
gdscriptだと実用レベルのコードはほぼでないよ
102: 2024/03/06(水)06:26 ID:0YKHfOtY(1/5) AAS
>>99
返信遅れてごめんなさい
寝不足でずっと寝てました

>>100
あっそうか、マウスクリック時にしか描画されないという点が問題だったんですね

>>101
unity c#より記述量少ないからなくてもいいかもですね
103: 2024/03/06(水)06:39 ID:xC/Ga180(1) AAS
自分は同じような内容列記するときだけ使ってるかな
APIの使い方が間違ってたり、文法がおかしかったりと普段使いはむしろ邪魔
104: 2024/03/06(水)06:45 ID:0YKHfOtY(2/5) AAS
放物線あと2日くらいで完成させる(*´ω`*)
105
(1): 2024/03/06(水)06:49 ID:0YKHfOtY(3/5) AAS
インテリコードっていう呼び名でしたっけね
106: 2024/03/06(水)17:57 ID:0YKHfOtY(4/5) AAS
is_mouse_button_pressedはありますけど、
マウスにjust pressed系はないんですかな?
107: 2024/03/06(水)18:12 ID:0YKHfOtY(5/5) AAS
あっ、action pressのほうでやるんすね ごめんなさい(*´ω`*)
108: 2024/03/06(水)18:15 ID:mNCkxtfo(1) AAS
そもそもjust pressedはactionにしかない
109
(1): 2024/03/07(木)14:31 ID:pWb+fA4v(1) AAS
>>105
IntelliCodeはGDScriptに対応してないね
VSCodeでGDScriptを書いても無理だわ
110: 2024/03/07(木)15:51 ID:qvtd0tl6(1) AAS
今日仕入れた豆知識
ランダムでtrueかfalseの2択を使いたい時
 var random : bool = randf() > 0.5
この1行でOK
111: 2024/03/08(金)10:20 ID:G13/EPQ6(1) AAS
randiの方が早いよ
112
(1): 2024/03/08(金)15:09 ID:4aurAYnx(1) AAS
速度詰めるなら(randi() & 1) == 1;とか?
113
(1): 軌道予測 2024/03/08(金)19:43 ID:vGL0nvHr(1) AAS
軌道予測の者です
考え方として、予測軌道を描きたい場合、軌道予測用のオブジェクトを一度投げないと、ポイントを取得出来ないのではないでしょうか?
物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
方法を思いつかなかったので質問させてください

>>109
ですよね(*´ω`*)
114: 2024/03/08(金)23:32 ID:Eb0+PHr0(1/2) AAS
>>69
>>88の解決法が判った
予想通り初期設定が足りていなかった
RigidBody2Dのcustom_integratorを有効にする事できっちり同じ挙動になった
衝突まで出来たが反射が出来てないので課題は残る
115: 2024/03/08(金)23:52 ID:Eb0+PHr0(2/2) AAS
>>112に補足
速さを求めるなら==は要らない
bool型に代入すると型変換で遅くなるので代入するならint型
var random:int = randi() & 1
しないなら
if randi() & 1:
pass
だけどゲームで使う分には誤差だから判りやすい記述が良いと思う
116
(1): 2024/03/09(土)00:57 ID:TY4JoG/O(1/3) AAS
>>113
>物理を使わない場合、方角と力の値があれば、そこから事前に予測出来るのでしょうか?
できる
予測用のオブジェクトを投げなくても計算で求められるが
RigidBodyがやってくれている計算と同等の処理は必要

ノードツリーにSprite2Dがあるとして以下のコードで右上方向に投げた場合の再現ができる
var d:Vector2 = Vector2(500, -500) #初期運動量
func _physics_process(delta: float) -> void:
d += Vector2(0, 980.0 * delta) #運動量に経過時間分の重力加速度を加算
$Sprite2D.position += d * delta #座標に経過時間分の運動量を加算

リアルタイム制のゲームは座標計算→描画を繰り返し行うのが基本
前回の座標計算からの経過時間を元に計算を行う
概ね運動量に経過時間を掛ける事で求められる
117: 2024/03/09(土)01:59 ID:TY4JoG/O(2/3) AAS
言い回しは運動量dじゃなく速度velocityとした方が良いかな?
118: 軌道予測 2024/03/09(土)06:47 ID:HzeElu7U(1/3) AAS
初速、方向ベクトル、力、時間の4要素がおそらく必要なんですね

運動方程式物理の本買ったんですけど、数学への抵抗感なくなればいいなぁ(*´ω`*)
119: 軌道予測 2024/03/09(土)11:31 ID:HzeElu7U(2/3) AAS
Programmingの理解が遅い人って何が問題なんでしょうか
自分のことですけども

抽象化、というかイメージ化が出来てないのかも
120
(1): 2024/03/09(土)12:48 ID:TY4JoG/O(3/3) AAS
理解できないのは理解できるサイズまで対象を分解できていないから
思い描いているイメージを具体化できてない
抽象的かつ大雑把過ぎるので細かい要素に分割する
分割した要素毎に必要な知識を理解する

Peglinを作りたい→軌道予測線を描きたい
線を描くとは→線分を画面に表示する
軌道予測とは→放物運動の開始から終了までの線分を描くための座標を取得する
放物運動とは→等速運動と自由落下する運動

座標の取得とは→放物運動の計算式から得られる
放物運動の計算式とは→(a)物理エンジンから取得するか(b)自前で自前で計算するかの二択
(a)物理エンジンで取得する→RigidBodyを実際に投げた結果から座標を取得する
実際に投げるには→他に影響を与えずに投げた結果を得るには特殊な手法が必要
特殊な手法とは→>>69が提示
(b)自前で計算する→放物運動の計算式を作る
計算式を作る→線分を描くために時間経過毎の座標を取得する→>>116で提示

要素を分解するとこんなもんか?
放物運動の計算は複雑な計算式は不要で時間経過毎に等加速と自由落下を加算するだけ
判らないなら判る所まで分解して考える
121: 軌道予測 2024/03/09(土)18:53 ID:HzeElu7U(3/3) AAS
>>120
1つずつ単体テストみたいなことをやるといいんですかね?
1-
あと 881 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.015s