В UE4 Я работаю над играми с головоломкой в классе Graphics 2. Наш профессор и наш класс изучают UE4 вместе. Наш класс в целом немного смущен одной вещи в коде на С ++, и мой профессор сказал, что он попытается понять ответ сам, но я решил, что я начну наш следующий класс с информацией, которую я нахожу здесь.UE4.9 Адресация головоломок C++
Хорошо, поэтому в файле BlockGrid.cpp этот раздел кода используется для создания блоков.
void AMyProject2BlockGrid::BeginPlay()
{
Super::BeginPlay();
// Number of blocks
const int32 NumBlocks = Size * Size;
// Loop to spawn each block
for(int32 BlockIndex=0; BlockIndex<NumBlocks; BlockIndex++)
{
const float XOffset = (BlockIndex/Size) * BlockSpacing; // Divide by dimension
const float YOffset = (BlockIndex%Size) * BlockSpacing; // Modulo gives remainder
// Make postion vector, offset from Grid location
const FVector BlockLocation = FVector(XOffset, YOffset, 0.f) + GetActorLocation();
// Spawn a block
AMyProject2Block* NewBlock = GetWorld()->SpawnActor<AMyProject2Block>(BlockLocation, FRotator(0,0,0));
// Tell the block about its owner
if(NewBlock != NULL)
{
NewBlock->OwningGrid = this;
}
}
}
Путаница начинается со следующей строкой в этой функции:
AMyProject2Block* NewBlock = GetWorld()->SpawnActor<AMyProject2Block>(BlockLocation, FRotator(0,0,0));
Каждый раз, когда он выглядит, как он переписывает NewBlock для каждого нового блока в головоломке. Наша проблема заключается в создании игры, которая является Lights Out game, если NewBlock постоянно переписывается, то как она отслеживает адреса для информации для блоков, отображаемых на экране? Это можно было бы исправить, просто создав массив для хранения информации, но если информация все еще хранится где-то, это будет неэффективно. Итак, как мы можем получить доступ к информации для блоков, если NewBlock перезаписывается каждым циклом, не делая массив для неэффективного хранения данных?
СПАСИБО !!!! :)
Примечание: Я не знаю каких-либо особенностей UE4. Основываясь на вышеприведенном коде (который, как я предполагаю, является шаблоном из других источников), мир (из 'GetWorld()') хранит ссылку на созданного актера, поэтому указатель 'NewBlock' существует только для поля' OwningGrid' могут быть установлены. Любой дополнительный доступ к Актерам в мире должен был бы найти эту ссылку другим способом. (См. Например: https://answers.unrealengine.com/questions/16805/c-find-specific-actor-in-scene.html).Обратите внимание, что сохранение массива указателей не является неэффективным, хотя я не знаю политики UE4 по сохранению указателей Actor. –