В Годо 4.3, C#. < /p>
Я хочу обновить позицию объекта GUI или узла 3D внутри задачи. объект. В круге. ..
Ожидаемая продолжительность анимации:
3,6 секунды => 50 мс * 360Degree/5step; < бренд /> Фактическое поведение: < /strong> < /p>
Когда я запускаю этот код, пользовательский интерфейс ничего не делает. он замораживает некоторое время ...
code
public partial class Scene1 : Node3D
{
public override void _Ready(){};
public override void _Process(double delta){};
void Button_Move_in_Circle_onClick() => MoveCube_inCirclularPath();
private void MoveCube_inCirclularPath()
{
Task.Run( () =>
{
//cube y is Height, move it to 2meter. above ground;
InvokeHelper.CallDeferred(() =>{
cube.position.x = 2;
});
for (int i = 0; i < 360; i = i +5)
{
Thread.Sleep(50);
var pt = GetCircleCoordinates_FromAngle(i, 4);
InvokeHelper.CallDeferred(() =>{
cube.position.x = pt.x;
cube.position.z = pt.y;
});
}
});
}
public static (double x, double y) GetCircleCoordinates_FromAngle(double angleDegrees, double distance)
{
double angleRadians = angleDegrees * Math.PI / 180.0;
double x = distance * Math.Cos(angleRadians);
double y = distance * Math.Sin(angleRadians);
return (x, y);
}
}
< /code>
invokehelper.cs
using Godot;
using System;
public static class InvokeHelper
{
///
/// in winforms equivalent is *this.Invoke( delegate { } )*
///
public static void CallDeferred(this Action action)
{
Callable.From(action).CallDeferred();
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ect-in-cir
Обновление node3d cube.position inside task.run? (Цель состоит в том, чтобы оживить объект по круговому пути.) ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Vuetify: justify-position/align-position vs justify="position"/align="position"
Anonymous » » в форуме CSS - 0 Ответы
- 74 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему вызов неоднозначен между Task.Run
(Func ) и Task.Run(Func ) при передаче имени метода
Anonymous » » в форуме C# - 0 Ответы
- 92 Просмотры
-
Последнее сообщение Anonymous
-