Как я говорил повсюду в этой главе, формат файла .X является полностью открытым; не существует ограничений на хранимые типы данных. Имея это ввиду, вы можете создать хранилище любого типа данных, и получить доступ к этим данным будет не сложнее, чем к мешам или фреймам, рассмотренным выше.
Вернемся к шаблону ContactEntry и посмотрим, как анализировать .X файл и отобразить все экземпляры ContactEntry. Как и раньше небольшой, унаследованный от cXParser, нам отлично подойдет.
// Сначала объявим GUID ContactEntry #include "initguid.h" DEFINE_GUID(ContactEntry, \
0x4c9d055b, 0xc64d, 0x4bfe, 0xa7, 0xd9, 0x98, \
0x1f, 0x50, 0x7e, 0x45, 0xff);
// Now, define the .X parser class class cXContactParser : public cXParser
public:
BOOL ParseObject(IDirectXFileData *pDataObj, \ IDirectXFileData *pParentDataObj, \ DWORD Depth, \
void **Data, BOOL Reference) // пропустить ссылочные объекты
if(Reference == TRUE) return TRUE;
// убедиться, что анализируемый объект - ContactEntry if(*GetObjectGUID(pDataObj) == CONTACTENTRY) {
// Получить указатель на данные и их размер
DWORD DataSize;
DWORD *DataPtr;
DataPtr = (DWORD*)GetObjectData(pDataObj, &DataSize); // Получить имя из объекта данных char *Name = (char*)*DataPtr++;
// Получить номер телефона из объекта данных
char *PhoneNum = (char*)*DataPtr++;
// Получить возраст из объекта данных
DWORD Age = *DataPtr++;
// Отобразить контактную информацию
char Text[102 4] ;
sprintf(Text, "Name: %s\r\nPhone #: %s\r\nAge: %lu", \
Name, PhoneNum, Age) ; MessageBox(NULL, Text, "Contact", MB_OK);
return ParseChildObjects(pDataObj,Depth,Data,Reference);
}
};
cXContactParser Parser; Parser.Parse("contacts.x");
После единственного вызова cXContactParser::Parse вы увидите список имен людей, телефонных номеров и возрастов - все содержащееся в "contact.x" файле! Разве это не было просто? Видите, вы не должны боятся формата файла .X. Лично я использую этот формат для хранения всех данных, какие только могу.
Я предлагаю, чтобы вы перечитали эту главу несколько раз, прежде чем продолжать; заострите внимание на создании ваших собственных шаблонов и получения доступа к данным объекта. Всюду в оставшейся части книги вы будете опираться на .X формат для хранения специализированных данных, связанных с каждым разделом анимирования, так что я хочу, чтобы вы чувствовали себя уверенно используя .X
Посмотрите демонстрационные программы
В этой главе вы узнали, что такое .X, все - от создания ваших собственных шаблонов до использования этих шаблонов для создания объектов данных, хранящих важные данные вашей игры. Для помощи в демонстрировании полезности .X и для примера использования кода, приведенного в этой главе, я включил две демонстрационные программы (ParseFrame и ParseMesh) в компакт-диск этой книги. Посмотрите, что делает каждая демонстрационная программа.