Полезное

Мы Вконтакте

Discord канал

#
1 ... 345678
Аватара пользователя
Пользователь
Сообщения: 27
Все я снова чета делаю не так =) Посаны памагите:

Короче тема такая, я делаю драг Widget'а в вьюпорте, и использую локальные координаты виджета из FPointerEvent для оффсета, только вот почему-то не работает так как надо, я так понмиаю там значения не подходят, только во что их конвертировать я не понимаю, может округлить в какую-то сторону? или количество цифр после точки урезать? Или возможно я не учитываю разрешение вьюпорта? я честно сказать не ошен понимаю.

В Виджете
Код:
FReply UInventoryWidget::NativeOnMouseButtonDown(const FGeometry & InGeometry, const FPointerEvent & InMouseEvent)
{
    controller->PanelDrag(this, this->GetCachedGeometry().AbsoluteToLocal(InMouseEvent.GetScreenSpacePosition()));
    return FReply::Handled();
}


Переменные в контроллере
Код:
    UUserWidget* DraggingPanel;
    FVector2D DraggingPanelOffset;
    void PanelDrag(UUserWidget* panel, FVector2D offset) { DraggingPanel = panel; DraggingPanelOffset = offset; }


это фреймтик в контролере
Код:
void AController::Tick(float DeltaTime)
{
    if (DraggingPanel)
    {
        MoveDraggingPanel();
    }
}


это функция перемещения
Код:
void AController::MoveDraggingPanel()
{
    FVector2D mouseposition;
    GetMousePosition(mouseposition.X, mouseposition.Y);
    DraggingPanel->SetPositionInViewport(mouseposition - DraggingPanelOffset);
}


вот видео
Аватара пользователя
Пользователь
Сообщения: 27
И еще вопросик случаем никто не знает переведена ли эта статья на русский где нибудь?
https://wiki.unrealengine.com/GameplayA ... an_Ability
Аватара пользователя
Пользователь
Сообщения: 2319
RepkaGaming писал(а):
И еще вопросик случаем никто не знает переведена ли эта статья на русский где нибудь?
https://wiki.unrealengine.com/GameplayA ... an_Ability

нет не переведена, и еще хуже материала по GameplayAbility крайне мало чтоб уверенно его использовать...
пробовал изучать но как-то не особо получилось.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
такс чето я туплю

два вектора
FVector V1,V2;
есть два флоата - вес векторов
float w1 , w2; // значение от 0 до 1
нужно найти
float alpha; //
для
FVector outV= lerp(V1,V2,alpha);

например при весах w1=1 , w2=1 ,alpha будет равно 0,5.
аналогично если ихние значения будут равны.

а вот скажем w1=0,5 , w2=1 результирующий вектор от 0,5 должен смещаться в сторону w2 пропорционально весу...
Изображение
хм... формулу вывести надо...

P.S.: 0.5 + (((-1 * w1) + w2)*0.5); вроде работает...
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 15
есть функция

Код:
void UBaseStatComponent::ChangeStat_Implementation(float val, float effectTime)
{
   FTimerDelegate timerDelegate;

   currentVal = val;
   currentTime = effectTime;

   effectTimerIndex = effectTimers.Add(FTimerHandle::FTimerHandle());

   timerDelegate.BindLambda([&]()
   {
      float lVal = currentVal;
      float lEffectTime = currentTime;
      int timerIndex = effectTimerIndex;

      value += lVal;

      if (value > 110)
      {
         GetWorld()->GetTimerManager().ClearTimer(effectTimers[timerIndex]);
      }
   });

   GetWorld()->GetTimerManager().SetTimer(effectTimers[effectTimerIndex], timerDelegate, 1.f, true, 0.1f);

}


в массив effectTimers добавляются FTimerHandle
проблема в том что сколько бы их не добавилось последний будет 0 (не валидный)
Аватара пользователя
Пользователь
Сообщения: 98
Добрый день!
Если я засуну в
Код:
BeginPlay()

или в
Код:
Tick(float DeltaTime)

какой-нибудь очень тяжелый обсчет чего-нибудь или что-нибудь, что отнимает много времени, например (просто пример) коннект к серверу или запись на диск, где надо будет ждать ответ, UE4 отнесется к этому с пониманием?=) Нет никаких принудительных средств сброса долго выполняющихся операций? Он точно сделает все, что мне надо и не зависнет или сбросит?

Вопрос, так вообще можно делать? Или для этого есть другие средства (возможности) у движка?
Аватара пользователя
Пользователь
Сообщения: 44
Например в отдельном потоке выполнять операцию.

У вас какие-то сверхвычисления, что вешают все приложение? Добавляйте проверки на валидность, ошибки и прочее. И все будет отлично работать.
Аватара пользователя
Пользователь
Сообщения: 237
rachok писал(а):
Добрый день!
Если я засуну в
Код:
BeginPlay()

или в
Код:
Tick(float DeltaTime)

какой-нибудь очень тяжелый обсчет чего-нибудь или что-нибудь, что отнимает много времени, например (просто пример) коннект к серверу или запись на диск, где надо будет ждать ответ, UE4 отнесется к этому с пониманием?=) Нет никаких принудительных средств сброса долго выполняющихся операций? Он точно сделает все, что мне надо и не зависнет или сбросит?

Вопрос, так вообще можно делать? Или для этого есть другие средства (возможности) у движка?


BeginPlay - событие, вызываемое один раз за сессию игровую. При запуске сессии.
Tick - выполняется каждый кадр.
А теперь представь, что у тебя сложные вычисления будут выполняться каждый кадр "коннект к серверу или запись на диск". Само по себе звучит странно, нет?!

Ну а вообще если такая операция не будет осуществляться каждый кадр, то проблем не будет, пусть даже процесс очень долгий.
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
Он точно сделает все, что мне надо и не зависнет или сбросит?

если памяти хватит то сделает... в это время все будет висеть и ждать пока процесс не выполнится...
пример с бесконечной рекурсией - пока памяти хватает она работает, вся система в этот момент висит...
если конца рекурсии не будет то вылетит в итоге с ошибкой... какой-то...
сброса никакого не предусмотренно.

а вообще для таких вещей используют многопоточность.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 98
Dany писал(а):
А теперь представь, что у тебя сложные вычисления будут выполняться каждый кадр "коннект к серверу или запись на диск". Само по себе звучит странно, нет?!


Есть же такие штуки, ну вроде if-ов и bool-ов, не?))) Я могу вызвать код однократно и только при необходимости повторить.
Цитата:
если памяти хватит то сделает... в это время все будет висеть и ждать пока процесс не выполнится...

Т.е. кадр в игре остановится, игра как-бы зависнет, а в это время будет происходить моя тяжелая операция?
Цитата:
а вообще для таких вещей используют многопоточность.

Есть какаие-то встроенные возможности движка? Или на голом С++ городить? С семафорами и критическими секциями...


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница