首页 > 代码库 > 201611151200

201611151200

1.如何用UE4C++代码去实现一段时间内做完某事
在tick函数中,DeltaTime就可以表示世界运行的时长;通过变量去接收累加该值,即可得到接受该事件开始,持续的时间;通过条件去限制结束执行代码即可
注意:接受事件是与否可以通过传递布尔值来标识;也可控制该值来开启和关闭需要执行的代码段

2.如何用UE4实现字符串转化数值
在UE4中,字符串的类型常为FString;该类重载了运算符*,其重载函数的返回值是一个TCHAR*类型的指针,且运算符*的重载是一个const的成员函数,意味着不能改变类成员变量的值;
所以不需要我们去手动释放内存,且返回的类型是const类型的指针,即我们外部也不能改变指针指向内存的值;表现为我们必须用const的TCHAR*的指针去接受该函数的返回值;然后
通过LexicalConversion作用域的函数FromString()函数去转化成int或double等类型
eg:
FString tagToString = "12";
const TCHAR *buf = tagToString.operator*();
int32 outValue;
LexicalConversion::FromString(outValue, buf);

3.如何通过定时器的机制去实现一段时间类去做某事
我们通过2个定时器合作去完成该功能,一个定时器去频繁寻循环调用某动作函数,另一个定时器设置规定时间内去调用终止该动作的函数;通常终止动作函数,需要重置开启标识符,清理
数组等操作
eg:
可以把下面代码放在BeginPlay函数中
FTimerManager& timerMoveManager = GetWorld()->GetTimerManager();
timerMoveManager.SetTimer(moveTimerHandle, this, &AFloorAnimation::MoveActor, (1.0 / speedChangeFrequency), true);
timerMoveManager.SetTimer(StopTimerHandle, this, &AFloorAnimation::StopMoveActor, moveTime, false);

void AFloorAnimation::MoveActor(TArray<AActor*> needActorRef)
{
if (needActorRef.Num() != 0)
{
for (AActor* moveIter : needActorRef)
{
moveIter->AddActorLocalOffset(FVector(0, 0, moveSpeed), false);
}
}
}

void AFloorAnimation::StopMoveActor()
{
FTimerManager& timerMoveManager = GetWorld()->GetTimerManager();
timerMoveManager.ClearTimer(moveTimerHandle);
timerMoveManager.ClearTimer(StopTimerHandle);
moveSpeed = 0.0f;
needActorRef.Empty();

}

注意:在UE4中,定时器是在Tick()函数中是不起作用的,具体原因还不知!知道的求留言,谢谢

201611151200