Ich stelle einen Fußball-/Fußball -Match -Engine in Godot 4.3 als Lernübung zusammen und bin auf ein Problem gestoßen, um einen Ball zu frieren/den Ball an einen der Spieler zu befestigen. Hier ist, was passiert: < /p>
Die Spieler bewegen sich zu ihrer Position < /li>
Sobald die Spieler in Position sind, nimmt der Eins von ihnen den Start ab und gibt den Ball an einen anderen Spieler hinter sich. Der Ball tritt in die Gegend ein und die Idee ist, dass er in der genauen Position "an den Spieler steckt", in die er in den Bereich 3D eindringt. Vor dem Spieler. Ich hatte die Hälfte erwartet, dass die Physik nicht vollständig war, also verschoben sie, aber die Schlaftimer -Rabatte, die diese Theorie - ich glaube. src = "https://i.static.net/v8w5myao.png"/>
GIF zeigt den Ball "Verschiebung", sobald sich der Spieler bewegt. Bitte sehen Sie sich bei IMGUR an: https://imgur.com/drszstz
public void OnFeetEntered(Node3D body)
{
if(CurrentState == PlayerState.KickingOff || CurrentState == PlayerState.MovingToPosition)
{
return;
}
if (body is Ball ball)
{
HasBall = true;
CurrentState = PlayerState.JustTakenBall;
ball.LinearVelocity = Vector3.Zero;
ball.AngularVelocity = Vector3.Zero;
ball.FreezeMode = RigidBody3D.FreezeModeEnum.Kinematic;
ball.Freeze = true;
ball.GlobalPosition = ball.GlobalPosition;
var localPosition = ToLocal(ball.GlobalPosition);
AddChild(ball);
ball.Position = localPosition;
}
}
< /code>
Und so wird der Spieler angewiesen, sich für Testzwecke zu Vektor3 (-10,0f, 0,252f, -8,0f) zu verschieben (-10,0f, 0,252f, -8,0f): < /p>
private void MoveToTarget(Vector3 targetPosition)
{
Vector3 direction = GlobalPosition.DirectionTo(targetPosition);
float distance = GlobalPosition.DistanceTo(targetPosition);
if (distance > stopThreshold)
{
Velocity = direction * Speed;
MoveAndSlide();
}
else
{
Velocity = Vector3.Zero; // Stop movement
CurrentState = PlayerState.Idle;
Look();
}
}
< /code>
Was mache ich hier falsch? [url=viewtopic.php?t=14917]Ich möchte[/url] nur, dass dieser Ball an der Position bleibt. Er tritt in den Spieler ein, wenn dieser Spieler vorwärts geht oder dreht. Wenn ich nun das Spiel leite und versuche, den Spieler voranzutreiben, stürzt das Spiel mit einem Stack -Überlauffehler ab: < /p>
Exception of type 'System.StackOverflowException' was thrown.
Es gibt keine weiteren Informationen, keine innere Ausnahme oder irgendetwas sehr hilfreich. Ich bin ein bisschen von einem Verlust! Dies führte dazu, dass der Elternteil entfernt und in einer unendlichen Schleife hinzugefügt wurde, wodurch die Ausnahme des Stapelüberlaufs verursacht wurde. Mein Spieler bewegt sich jetzt glücklich mit dem Ball in der richtigen Position!
Ich stelle einen Fußball-/Fußball -Match -Engine in Godot 4.3 als Lernübung zusammen und bin auf ein Problem gestoßen, um einen Ball zu frieren/den Ball an einen der Spieler zu befestigen. Hier ist, was passiert: < /p> [list] [*] Die Spieler bewegen sich zu ihrer Position < /li> Sobald die Spieler in Position sind, nimmt der Eins von ihnen den Start ab und gibt den Ball an einen anderen Spieler hinter sich. Der Ball tritt in die Gegend ein und die Idee ist, dass er in der genauen Position "an den Spieler steckt", in die er in den Bereich 3D eindringt. Vor dem Spieler. Ich hatte die Hälfte erwartet, dass die Physik nicht vollständig war, also verschoben sie, aber die Schlaftimer -Rabatte, die diese Theorie - ich glaube. src = "https://i.static.net/v8w5myao.png"/>
GIF zeigt den Ball "Verschiebung", sobald sich der Spieler bewegt. Bitte sehen Sie sich bei IMGUR an: https://imgur.com/drszstz [/list] Die auf Körper eingegebene Methode sieht so aus: [code]public void OnFeetEntered(Node3D body) { if(CurrentState == PlayerState.KickingOff || CurrentState == PlayerState.MovingToPosition) { return; }
if (body is Ball ball) { HasBall = true; CurrentState = PlayerState.JustTakenBall;
ball.GlobalPosition = ball.GlobalPosition; var localPosition = ToLocal(ball.GlobalPosition);
AddChild(ball);
ball.Position = localPosition; } } < /code> Und so wird der Spieler angewiesen, sich für Testzwecke zu Vektor3 (-10,0f, 0,252f, -8,0f) zu verschieben (-10,0f, 0,252f, -8,0f): < /p> private void MoveToTarget(Vector3 targetPosition) { Vector3 direction = GlobalPosition.DirectionTo(targetPosition);
if (distance > stopThreshold) { Velocity = direction * Speed;
MoveAndSlide(); } else { Velocity = Vector3.Zero; // Stop movement
CurrentState = PlayerState.Idle;
Look(); } } < /code> Was mache ich hier falsch? [url=viewtopic.php?t=14917]Ich möchte[/url] nur, dass dieser Ball an der Position bleibt. Er tritt in den Spieler ein, wenn dieser Spieler vorwärts geht oder dreht. Wenn ich nun das Spiel leite und versuche, den Spieler voranzutreiben, stürzt das Spiel mit einem Stack -Überlauffehler ab: < /p> Exception of type 'System.StackOverflowException' was thrown. [/code] Es gibt keine weiteren Informationen, keine innere Ausnahme oder irgendetwas sehr hilfreich. Ich bin ein bisschen von einem Verlust! Dies führte dazu, dass der Elternteil entfernt und in einer unendlichen Schleife hinzugefügt wurde, wodurch die Ausnahme des Stapelüberlaufs verursacht wurde. Mein Spieler bewegt sich jetzt glücklich mit dem Ball in der richtigen Position!
Ich füge einige Hover-Animationen zu einer Karte hinzu, die ich als Teil einer Website erstelle (alles über CSS), und während es wie beabsichtigt funktioniert, versuche ich, an den „obersten“ Werten,...
Ich bin ein absoluter Anfänger mit Java -Swing und versuche, eine einfache GUI für einen Einheitskonverter zu erstellen. Die Taste erstreckt sich über die gesamte Breite des Fensters. Genau das...