Unreal Engine 4 http://uengine.ru/forum/ |
|
Unreal C++ общие вопросы. http://uengine.ru/forum/viewtopic.php?f=19&t=12369 |
Страница 6 из 8 |
Автор: | RepkaGaming [ 21 фев 2018, 06:19 ] |
Заголовок сообщения: | |
Все я снова чета делаю не так =) Посаны памагите: Короче тема такая, я делаю драг 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); } вот видео |
Автор: | RepkaGaming [ 21 фев 2018, 22:17 ] |
Заголовок сообщения: | |
И еще вопросик случаем никто не знает переведена ли эта статья на русский где нибудь? https://wiki.unrealengine.com/GameplayA ... an_Ability |
Автор: | Snake [ 27 фев 2018, 20:57 ] |
Заголовок сообщения: | Re: |
RepkaGaming писал(а): И еще вопросик случаем никто не знает переведена ли эта статья на русский где нибудь? https://wiki.unrealengine.com/GameplayA ... an_Ability нет не переведена, и еще хуже материала по GameplayAbility крайне мало чтоб уверенно его использовать... пробовал изучать но как-то не особо получилось. |
Автор: | Snake [ 01 мар 2018, 09:01 ] |
Заголовок сообщения: | |
такс чето я туплю два вектора 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); вроде работает... |
Автор: | Alex1984 [ 06 мар 2018, 22:29 ] |
Заголовок сообщения: | |
есть функция Код: 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 (не валидный) |
Автор: | rachok [ 16 май 2018, 12:37 ] |
Заголовок сообщения: | |
Добрый день! Если я засуну в Код: BeginPlay() или в Код: Tick(float DeltaTime) какой-нибудь очень тяжелый обсчет чего-нибудь или что-нибудь, что отнимает много времени, например (просто пример) коннект к серверу или запись на диск, где надо будет ждать ответ, UE4 отнесется к этому с пониманием?=) Нет никаких принудительных средств сброса долго выполняющихся операций? Он точно сделает все, что мне надо и не зависнет или сбросит? Вопрос, так вообще можно делать? Или для этого есть другие средства (возможности) у движка? |
Автор: | ue4help [ 16 май 2018, 15:53 ] |
Заголовок сообщения: | |
Например в отдельном потоке выполнять операцию. У вас какие-то сверхвычисления, что вешают все приложение? Добавляйте проверки на валидность, ошибки и прочее. И все будет отлично работать. |
Автор: | Dany [ 16 май 2018, 15:58 ] |
Заголовок сообщения: | Re: |
rachok писал(а): Добрый день! Если я засуну в Код: BeginPlay() или в Код: Tick(float DeltaTime) какой-нибудь очень тяжелый обсчет чего-нибудь или что-нибудь, что отнимает много времени, например (просто пример) коннект к серверу или запись на диск, где надо будет ждать ответ, UE4 отнесется к этому с пониманием?=) Нет никаких принудительных средств сброса долго выполняющихся операций? Он точно сделает все, что мне надо и не зависнет или сбросит? Вопрос, так вообще можно делать? Или для этого есть другие средства (возможности) у движка? BeginPlay - событие, вызываемое один раз за сессию игровую. При запуске сессии. Tick - выполняется каждый кадр. А теперь представь, что у тебя сложные вычисления будут выполняться каждый кадр "коннект к серверу или запись на диск". Само по себе звучит странно, нет?! Ну а вообще если такая операция не будет осуществляться каждый кадр, то проблем не будет, пусть даже процесс очень долгий. |
Автор: | Snake [ 16 май 2018, 18:42 ] |
Заголовок сообщения: | |
Цитата: Он точно сделает все, что мне надо и не зависнет или сбросит? если памяти хватит то сделает... в это время все будет висеть и ждать пока процесс не выполнится... пример с бесконечной рекурсией - пока памяти хватает она работает, вся система в этот момент висит... если конца рекурсии не будет то вылетит в итоге с ошибкой... какой-то... сброса никакого не предусмотренно. а вообще для таких вещей используют многопоточность. |
Автор: | rachok [ 17 май 2018, 07:53 ] |
Заголовок сообщения: | Re: Re: |
Dany писал(а): А теперь представь, что у тебя сложные вычисления будут выполняться каждый кадр "коннект к серверу или запись на диск". Само по себе звучит странно, нет?! Есть же такие штуки, ну вроде if-ов и bool-ов, не?))) Я могу вызвать код однократно и только при необходимости повторить. Цитата: если памяти хватит то сделает... в это время все будет висеть и ждать пока процесс не выполнится... Т.е. кадр в игре остановится, игра как-бы зависнет, а в это время будет происходить моя тяжелая операция? Цитата: а вообще для таких вещей используют многопоточность. Есть какаие-то встроенные возможности движка? Или на голом С++ городить? С семафорами и критическими секциями... |
Страница 6 из 8 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |