Изучаем С++ создавая игры в ue4 Уилльям Шериф Изучайте программирование С++ с интересным применением реально мира, что позволит вам создавать ваши собственные игры!



Pdf көрінісі
бет195/252
Дата06.01.2022
өлшемі12,25 Mb.
#11940
1   ...   191   192   193   194   195   196   197   198   ...   252
Байланысты:
аа

Предварительное объявление 
Перед  классом  АAvatar,  заметьте,  что  у  нас  есть  предварительное  объявление 
класса APickupItem. Дальнейшие объявления нужны в кодовом файле, когда класс 
затрагивается (такой как прототип функции APickupItem::Pickup( APickupItem *item 
);), но  нет кода в файле, который использует объект этого типа внутри файла.  Так 
как  заголовочный  файл  Avatar.h  не  содержит  выполняемый  код,  который 


201 | 
С т р а н и ц а
 
 
использует  объект  типа  APickupItem,  то  предварительно  объявление  то,  что  нам 
нужно.  Отсутствие  предварительного  объявления  даст  ошибку  компилятора,  так 
как  компилятор  не  слышал  бы  о  классе  APickupItem  до  компилирования  кода  в 
классе  AAvatar.  Ошибка  компилятора  появится  в  объявлении  APickupItem::Pickup( 
APickupItem*item ); объявлении функции прототипа.  
Мы  объявили  два  объекта  TMap  в  классе  AAvatar.  Объекты  будут  выглядеть,  как 
показано в следующей таблице: 
FString (имя)  
Int (количество)   UTexture2D* (изображение)  
 
 
 
 
GoldenEgg 
 
 
 
 

 
 
 
 
 
 
MetalDonut 
 
 
 
 
 

 
 
 
 
 
 
Cow 
 
 
 
 
 
 

 


202 | 
С т р а н и ц а
 
 
В рюкзаке TMap, мы храним переменную FString предмета, который держит игрок. 
В  карте  Icons,  мы  храним  единственную  ссылку  на  изображение  предмета, 
который держит игрок.  
Во  время  визуализации,  мы  можем  использовать  две  карты  работающие  вместе, 
чтобы  просматривать  и  количество  предметов  имеющихся  у  игрока  (в  его  карте 
Backpack),  и  ссылку  ресурса  текстуры  этого  предмета  (в  карте  Icons).  Следующий 
скриншот показывает, как будет выглядеть визуализация HUD:  
 
Примечание 
Обратите  внимание,  что  мы  также  можем  использовать  массив  struct  с 
переменной FString и UTexture2D* в нём, вместо использования двух карт.  
Например,  мы  можем  держать  TArray  Backpack  с  помощью  переменной 
struct, как показано в следующем коде: 
struct Item 

FString name; 
int qty; 
 
UTexture2D* tex; 
}; 
Затем,  по  мере  того,  как  мы  подбираем  предметы,  они  будут  добавлены  в 
линейный  массив.  Однако  подсчёт  каждого  предмета,  который  есть  у  нас  в 
рюкзаке,  потребует  постоянную  переоценку,  посредством  итерации  через  массив 
предметов,  каждый  раз,  когда  мы  хотим  видеть  счёт.  Например,  чтобы  увидеть, 
сколько расчёсок есть у вас, вам потребуется сделать передачу через весь массив. 
И это не так эффективно, как использование карты. 


Достарыңызбен бөлісу:
1   ...   191   192   193   194   195   196   197   198   ...   252




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет