Я собираю футбольный/футбольный матч в Godot 4.3 в качестве учебного упражнения, и я столкнулся с проблемой, пытаясь заморозить/прикрепить мяч одному из игроков. Вот что происходит: < /p>
игроки перемещаются на свою позицию < /li>
Как только игроки находятся в позиции, один из них снимает начало и передает мяч другому игроку за ними < /li>
Игрок - персонаж 3D с областью 3d вокруг ног. Мяч попадает в область, и идея заключается в том, что он «придерживается» игрока в точной позиции, он входит в область 3d. Перед игроком. Я имел наполовину ожидал, что физика не была полной, поэтому она сдвигалась, но таймер сна сбрасывает эту теорию - я думаю. src = "https://i.sstatic.net/v8w5myao.png"/>
Gif, показывающий мяч "Shift", как только игрок движется. Пожалуйста, просмотрите на Imgur: 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>
И именно так игрок должен двигаться (целевая позиция жестко кодируется в вектор3 (-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>
Так что я здесь делаю не так? Я просто хочу, чтобы этот мяч оставался в положении, который он входит в игрока, когда этот игрок движется вперед или вращается. Теперь, когда я запускаю игру и пытаюсь продвинуть игрока вперед, игра сбивается с ошибкой переполнения стека: < /p>
Exception of type 'System.StackOverflowException' was thrown.
больше нет информации, внутреннего исключения или чего -то очень полезного. У меня есть небольшая потеря! edit 2
Вторая проблема, с которой я столкнулся, была простая рекурсия, я не ценил, что введенный метод будет вызван неоднократно. Это заставило родителя удалить и добавить в бесконечную петлю, вызывая исключение переполнения стека. Мой игрок теперь счастливо движется вперед с мячом в правильном положении!
Я собираю футбольный/футбольный матч в Godot 4.3 в качестве учебного упражнения, и я столкнулся с проблемой, пытаясь заморозить/прикрепить мяч одному из игроков. Вот что происходит: < /p> [list] [*] игроки перемещаются на свою позицию < /li> Как только игроки находятся в позиции, один из них снимает начало и передает мяч другому игроку за ними < /li> Игрок - персонаж 3D с областью 3d вокруг ног. Мяч попадает в область, и идея заключается в том, что он «придерживается» игрока в точной позиции, он входит в область 3d. Перед игроком. Я имел наполовину ожидал, что физика не была полной, поэтому она сдвигалась, но таймер сна сбрасывает эту теорию - я думаю. src = "https://i.sstatic.net/v8w5myao.png"/>
Gif, показывающий мяч "Shift", как только игрок движется. Пожалуйста, просмотрите на Imgur: https://imgur.com/drszstz [/list] Введенный на корпус метод выглядит следующим образом: [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> И именно так игрок должен двигаться (целевая позиция жестко кодируется в вектор3 (-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> Так что я здесь делаю не так? Я просто хочу, чтобы этот мяч оставался в положении, который он входит в игрока, когда этот игрок движется вперед или вращается. Теперь, когда я запускаю игру и пытаюсь продвинуть игрока вперед, игра сбивается с ошибкой переполнения стека: < /p> Exception of type 'System.StackOverflowException' was thrown. [/code] больше нет информации, внутреннего исключения или чего -то очень полезного. У меня есть небольшая потеря! [b] edit 2 [/b] Вторая проблема, с которой я столкнулся, была простая рекурсия, я не ценил, что введенный метод будет вызван неоднократно. Это заставило родителя удалить и добавить в бесконечную петлю, вызывая исключение переполнения стека. Мой игрок теперь счастливо движется вперед с мячом в правильном положении!
Я собираю футбольный/футбольный матч в Godot 4.3 в качестве учебного упражнения, и я столкнулся с проблемой, пытаясь заморозить/прикрепить мяч одному из игроков. Вот что происходит:
игроки перемещаются на свою позицию
Как только игроки...
Я пытаюсь использовать Harmony 2.3.3 с Godot 4.2.1, и в редакторе он работает должным образом, но не в экспортированной сборке.
Я пытаюсь чтобы исправить префикс метода, и в редакторе метод успешно исправлен, но в экспортированной сборке метод не...
Я обнаружил, что когда я позиционирую исправленную элемент, не имеет значения, является ли родитель относительным или нет, он будет расположен фиксированным по сравнению с окном? #wrapper {
width: 300px;
background: orange;
margin: 0 auto;
position:...
Я столкнулся с этой ошибкой, когда вводил команду «pod init» для проекта. Для терминала установлено значение «Открыть с помощью Rosetta».
Изображения:
Открыть с помощью Rosetta
pod init ошибка
Спасибо за помощь.
(base) airpc@192 InstaClone % pod...