cow1330 发表于 2019-3-7 12:36:14

長按的的時間判定

小弟正在試蓄力攻擊的測式,但小弟卡在時間的判定

小弟目前做法是按下攻擊鍵的時候把蓄力的判定打開 ( bHoldAttack = true )
放開攻擊鍵就把蓄力的判定打開 ( bHoldAttack = false )
但這樣的話無法判定按下的時間,有什麼好的方式去抓嗎


這是小弟目前找到的可能方法之一用 GetInputKeyTimeDown 去抓,但測試後不知是那有問題
小弟實測後(time > 0.f)是立即輸出,改成四>1.f ,則沒作用,且以我我比較希望是放開後輸出
目前還達不到小弟的需求

APlayerController *PController = GetWorld()->GetFirstPlayerController();
float time = PController->GetInputKeyTimeDown(EKeys::LeftMouseButton);
if (time > 0.f)
{
    GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, TEXT("test Input Key Time Down"));
}

叶知秋_lz 发表于 2019-3-7 14:05:33

Timer 了解一下

久丶情 发表于 2019-3-7 15:28:22

时间轴创建函数变量,加几个值在外部检测值是否达到,达到多少用多少伤害:D

mknmknmk 发表于 2019-3-8 08:57:36

本帖最后由 mknmknmk 于 2019-3-8 08:59 编辑

bool previousKeyDown=false;

float keydownTime=0;


   Tick(float deltaTime)
{

APlayerController *PController = GetWorld()->GetFirstPlayerController();
bool mouseKeyDown = PController->GetInputKeyDown(EKeys::LeftMouseButton);
   if(!previousKeyDown&&mouseKeyDown){
       keydownTime=0;
   }
   else if(previousKeyDown&&mouseKeyDown){
             keydownTime +=deltaTime;
         }
      else if(previousKeyDown&&!mouseKeyDown){
             keydownTime=0;
      }
   previousKeyDown = mouseKeyDown;
   if(keydownTime >5.0f){
       LeftMouseHoldTime(keydownTime );
      }

}

lennon1989 发表于 2019-3-8 10:00:05

看来不会c++还是不要考虑做游戏了。。

cow1330 发表于 2019-3-9 18:14:16

感謝大家的幫忙
花了半天終於試出來了,最後用是 Timer 做的
試出廷長的時間的判定之後就搞定

GetInputKeyDown還在試,看來一開始我想的太簡單了

此心安处 发表于 2019-3-11 18:30:47

在Tick事件里,当bHoldAttack == true时,timeCounter += deltaTime;当bHoldAttack == false时,timeCounter =0 。这个timeCounter就是蓄力的时间。

Dsingol 发表于 2019-4-28 09:59:40

按下按键的时候,bHoldKey = true, startTime = GetWorld()->TimeSeconds, SetTimer设置进入下阶段蓄力的功能(如果你有多段蓄力的话)
松开按钮的时候,bHoldKey = false, holdTime = GetWorld()->TimeSeconds - startTime. ClearTimer清掉下阶段蓄力的功能
页: [1]
查看完整版本: 長按的的時間判定