ue4 C++ 收放自如的四连击
时间: 2023-09-02 12:11:57 浏览: 52
实现一个收放自如的四连击,需要用到输入检测和定时器。以下是一个简单的实现示例:
首先,定义一个 `bool` 类型的变量 `bIsAttacking` 来表示当前是否正在攻击。
在 `Tick` 函数中,检测输入是否为攻击指令(如按下鼠标左键),如果是,则设置 `bIsAttacking` 为 `true`,并启动一个定时器,设定攻击持续时间。
在定时器回调函数中,将 `bIsAttacking` 设置为 `false`,表示攻击已结束。
在每次攻击结束后,通过计数器来判断是否可以进行下一次攻击。如果可以,则重置计数器,否则忽略输入。
以下是示例代码:
```cpp
// 在头文件中声明定时器回调函数
void OnAttackTimerExpired();
// 在构造函数中初始化计数器和定时器
MyActor::MyActor()
{
...
m_AttackCount = 0;
m_AttackDuration = 0.5f;
GetWorldTimerManager().SetTimer(m_AttackTimerHandle, this, &MyActor::OnAttackTimerExpired, m_AttackDuration, false);
}
void MyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// 检测输入
if (bCanAttack && bIsAttacking == false && IsInputAttack())
{
// 开始攻击
bIsAttacking = true;
m_AttackCount++;
GetWorldTimerManager().SetTimer(m_AttackTimerHandle, this, &MyActor::OnAttackTimerExpired, m_AttackDuration, false);
}
// 检测攻击是否结束
if (bIsAttacking && GetWorldTimerManager().IsTimerActive(m_AttackTimerHandle) == false)
{
bIsAttacking = false;
}
// 检测攻击计数器是否满足要求
if (m_AttackCount >= 4)
{
bCanAttack = false;
}
else if (m_AttackCount > 0 && GetWorldTimerManager().IsTimerActive(m_AttackTimerHandle) == false)
{
m_AttackCount = 0;
}
}
void MyActor::OnAttackTimerExpired()
{
bIsAttacking = false;
}
```
这个示例中,`bCanAttack` 表示当前是否可以进行攻击。如果已经进行了四次攻击,则需要等待一段时间后才能再次攻击。可以根据需要修改计数器和定时器的值来适应实际需求。