Обновление node3d cube.position inside task.run? (Цель состоит в том, чтобы оживить объект по круговому пути.)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Обновление node3d cube.position inside task.run? (Цель состоит в том, чтобы оживить объект по круговому пути.)

Сообщение Anonymous »

В Годо 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»