Int32 вызывает сбои при использованииC++

Программы на C++. Форум разработчиков
Anonymous
Int32 вызывает сбои при использовании

Сообщение Anonymous »

Я работаю над этой фанатской игрой FNAF уже пару месяцев и приближаюсь к третьему этапу разработки. Однако при создании последнего персонажа и его ИИ я столкнулся с ошибкой.
Переменная int32 под названием «Stage» вызывает проблемы и приводит к сбою игры при каждом перезапуске.

Код: Выделить всё

int32 Stage;
Он используется в этой BTTask:

Код: Выделить всё

void UBTTask_FoxyCountdown::TimerCompleted(UBehaviorTreeComponent& OwnerComp) const
{
Foxy->IncreaseStage();
if (Foxy->GetStage() >= 5)
{
FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
}

FinishLatentTask(OwnerComp, EBTNodeResult::InProgress);
}
В Пиратской бухте:

Код: Выделить всё

if (Foxy && Mesh2)
{
if (Foxy->GetStage() >= 2)
И в самом классе: `

Код: Выделить всё

void AFoxy::IncreaseStage()
{
Stage++;
UE_LOG(LogTemp, Log, TEXT("Increased Foxy's stage to: %d"), Stage);

if (Stage < 5)
{
TeleportTo(Positions[Stage], Rotations[Stage]);

}

}

void AFoxy::ResetStage()
{
Stage = 0;
SetActorLocation(FVector{0, 0, -100});
}

int32 AFoxy::GetStage() const
{

return Stage;
}
Где-то здесь происходит сбой игры, и после некоторой отладки (UE_LOGS, который сообщил мне номер, и удаление кода, связанного с этапом, и он больше не вылетает), это «Используется этап». Это странно, потому что я никогда не видел, чтобы int32 приводил к обычному сбою указателя. Я заметил одну вещь: через некоторое время Stage каким-то образом устанавливается на этот конкретный номер: 1983924. И это именно этот номер каждый раз в обязательном порядке. Вот код перезапуска уровня:

Код: Выделить всё

UNightInstance* Instance = Cast(GetGameInstance());

if (Instance)
{
Instance->IncreaseNight();
UE_LOG(LogTemp, Log, TEXT("NightNumber increased to: %d"), Instance->NightNumber);

if (Instance->NightNumber >= 6)
{
Instance->ResetNightNumber();
UE_LOG(LogTemp, Log, TEXT("NightNumber reset to: %d"), Instance->NightNumber);
}

UGameplayStatics::OpenLevel(GetWorld(), DecidingLevel);
Когда он открывает уровень, чтобы решить, хотите ли вы перейти к следующей карте, очевидно, дерево поведения Фокси все еще используется, и, поскольку его нет в мире, оно вызывает сбои?? ????? Зачем он активируется, если в мире ТОЛЬКО ИГРОК.
Я все перепробовал, и это крайне деморализует. Вот несколько ответов на вопросы, которые я пробовал.
Пожалуйста, помогите, я так долго застрял.
Я пробовал:
1: Я инициализировал этап на 0 в начале игры.
2: Я проверяю, все ли верно 3: У меня есть задержка после уровня, чтобы все могло загрузиться.
3: Перешел на другой уровень, подождал немного и перешел на него.
После перезапуска уровня сбоев нет.
Журнал сбоев:

Код: Выделить всё

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000069 UnrealEditor_Fnaftsor_1905!AFoxy::IncreaseStage() [C:\Users\Askari\Documents\Unreal Projects\Fnaf-TOSR\Source\Fnaftsor\Animatronic\Foxy.cpp:26] UnrealEditor_Fnaftsor_1905!TBaseFunctorDelegateInstance::Execute() [C:\Program Files\Epic Games\UE_5.3\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:862]
В частности, The Line: Stage++
Я также время от времени получаю одно и то же сообщение об ошибке, но вместо Stage++ — TeleportTo
Я думаю, это связано со стадией, потому что, когда я удаляю код, связанный с ее уменьшением или увеличением (или просто получением), сбои прекращаются.

Подробнее здесь: https://stackoverflow.com/questions/786 ... being-usec

Вернуться в «C++»