grupa AntalisaСтатьи

Cоздание файлов свойств

Автор:

Для наглядности опишу полностью вручную создание файлов.
Для этого создадим полностью новый документ, добавим в список используемых модулей OpenGL чтобы использовать ее типы данных (можно и по-другому, но не будем усложнять себе жизнь)

Опишем нужные нам типы данных:
//Свойства объекта
TAPObjectsProperties = record
  size:glFloat;
  StartX:glFloat;
  StartY:glFloat;
  moveX:glFloat;
  moveY:glFloat;
  AccelerationX:glFloat;
  AccelerationY:glFloat;
  TextureID:GLUint;
  end;

//Свойство изображения
TTexturProperties = record
  ID:GLUint; //будущий идентификатор текстуры
  Name: string[16]; //Название ресурса
  TileCountX: Byte; //деление на тайлы п- горизонтали (пока не используем при загрузки
  TileCountY: Byte; //деление на тайлы по-вертикали (пока не используем при загрузки
  end;

Создадим переменные и файлы данных типов
var
ObjectsProperties:TAPObjectsProperties;
ObjectInfoFile:file of TAPObjectsProperties;

TexturProperties: TTexturProperties;
TexturInfoFile:file of TTexturProperties;

Описываю процедуры создания и записи данных в файлы:
procedure WorkWithObjectFile;
procedure WorkWithTextureFile;

Добавляю на форму 2 кнопки и по их нажатию вызываю данные процедуры. В директории, где находится программа должны появиться нужные нам файлы под названиями: ObjectTest.odf, TexturTest.tdf.

Загрузку из них данных уже опишу в другой статье и в другом примере.

Вот текст программы: (чтобы не засорять качалку выкладывать исходник не буду - его вы можете создать сами)
_________________________________________________________________________________________________
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGL, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type

//Свойства объекта
TAPObjectsProperties = record
  size:glFloat;
  StartX:glFloat;
  StartY:glFloat;
  moveX:glFloat;
  moveY:glFloat;
  AccelerationX:glFloat;
  AccelerationY:glFloat;
  TextureID:GLUint;
  end;

//свойства изображения
TTexturProperties = record
  ID:GLUint; //будущий идентификатор текстуры
  Name: string[16]; //название ресурса
  TileCountX: Byte; //деление по-горизонтали изображения на тайлы
  TileCountY: Byte; //деление по-вертикали изображения на тайлы
  end;

var
ObjectsProperties:TAPObjectsProperties;
ObjectInfoFile:file of TAPObjectsProperties;

TexturProperties: TTexturProperties;
TexturInfoFile:file of TTexturProperties;

//------------------------------------------------------------------------------
procedure WorkWithObjectFile;
begin
  //Для наглядности проделаем все в ручную
  //Описываю свойства первого объекта
  //Можно искользовать директиву with тогда не надо много раз повторять название переменной
  ObjectsProperties.size:=0.3;
  ObjectsProperties.StartX:=0.0;
  ObjectsProperties.StartY:=0.0;
  ObjectsProperties.moveX:=0.01;
  ObjectsProperties.moveY:=0.01;
  ObjectsProperties.AccelerationX:=0.0;
  ObjectsProperties.AccelerationY:=0.0;
  ObjectsProperties.TextureID:=1;

  AssignFile(ObjectInfoFile,'ObjectTest.odf'); //Связываем файловую переменную с файлом, расширение имени из головы  (ObjectDataFile)
// {$I-} //Отключаем автоматическую проверку на ошибку
  Rewrite(ObjectInfoFile); //Создание и открытие нового файла
//  Seek(ObjectInfoFile,0);  // Позицию записи в начало
  Write(ObjectInfoFile,ObjectsProperties);  //Первая запись

  //Описываю свойства второго объекта
  ObjectsProperties.size:=0.3;
  ObjectsProperties.StartX:=0.5;
  ObjectsProperties.StartY:=1.0;
  ObjectsProperties.moveX:=0.01;
  ObjectsProperties.moveY:=0.01;
  ObjectsProperties.AccelerationX:=0.0;
  ObjectsProperties.AccelerationY:=0.0;
  ObjectsProperties.TextureID:=2;

  Write(ObjectInfoFile,ObjectsProperties);  //Вторая запись

  //Описываю свойства третьего объекта
  ObjectsProperties.size:=0.3;
  ObjectsProperties.StartX:=1.5;
  ObjectsProperties.StartY:=1.5;
  ObjectsProperties.moveX:=0.01;
  ObjectsProperties.moveY:=0.01;
  ObjectsProperties.AccelerationX:=0.0;
  ObjectsProperties.AccelerationY:=0.0;
  ObjectsProperties.TextureID:=3;

  Write(ObjectInfoFile,ObjectsProperties);  //Третья запись

  //Описываю свойства четвертого объекта
  ObjectsProperties.size:=0.3;
  ObjectsProperties.StartX:=0.75;
  ObjectsProperties.StartY:=1.5;
  ObjectsProperties.moveX:=0.01;
  ObjectsProperties.moveY:=0.01;
  ObjectsProperties.AccelerationX:=0.0;
  ObjectsProperties.AccelerationY:=0.0;
  ObjectsProperties.TextureID:=3;

  Write(ObjectInfoFile,ObjectsProperties);  //Четвертая запись

  CloseFile(ObjectInfoFile); //закрываем файл

end;

//------------------------------------------------------------------------------
procedure WorkWithTextureFile;
begin
  //Описываю свойства первого объекта
  //Можно искользовать директиву with тогда не надо много раз повторять название переменной
  TexturProperties.ID:=1;
  TexturProperties.Name:='ufo1';
  TexturProperties.TileCountX:=1; //Пока при загрузке не используется
  TexturProperties.TileCountY:=1; //Пока при загрузке не используется

  AssignFile(TexturInfoFile,'TexturTest.tdf'); //Связываем файловую переменную с файлом, расширение имени из головы  (TextureDataFile)
  Rewrite(TexturInfoFile); //Создание и открытие нового файла

  Write(TexturInfoFile,TexturProperties);  //Первая запись

  //Описываю свойства второго объекта
  TexturProperties.ID:=2;
  TexturProperties.Name:='ufo2';
  TexturProperties.TileCountX:=1; //Пока при загрузке не используется
  TexturProperties.TileCountY:=1; //Пока при загрузке не используется

  Write(TexturInfoFile,TexturProperties);  //Вторая запись

  //Описываю свойства третьего объекта
  TexturProperties.ID:=3;
  TexturProperties.Name:='ufo3';
  TexturProperties.TileCountX:=1; //Пока при загрузке не используется
  TexturProperties.TileCountY:=1; //Пока при загрузке не используется

  Write(TexturInfoFile,TexturProperties);  //Третья запись

  CloseFile(TexturInfoFile); //закрываем файл

end;

//Добавил на форму 2 стандартные кнопки, по их нажатию записываем информацию в файлы
//------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
  WorkWithObjectFile;
end;
//------------------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
  WorkWithTextureFile;
end;

end.

6 сентября 2006