Читать «Виртуальная библиотека Delphi» онлайн - страница 56

Unknown

Далее следует вывод на экран:

For j := 0 to ElemCount.y do  For i := 0 to ElemCount.x do Begin // Вычислить координаты куда выводить

 X := i * ElemWidth – OffsPoint.x;

 Y := j * ElemHeight – OffsPoint.y;

 // Вычислить номер текстуры

 Index := GetElement(TopLeftElem.X + i,TopLeftElem.Y + j);

 // Вывести текстуру на экран

 // Учтите что LandType это не тип земли, а тип мира

 // Snow,West и т.д.

 ImageList.Items.Find(LandType).Draw(DXDraw.Surface,x,y,Index);

end;

Строка: Index := GetElement(TopLeftElem.X + i,TopLeftElem.Y + j); обращается к матрице карты и считывает оттуда номер текстуры, следующая строка выводит ее на экран.

Возможно вы спросите: А как же нецелые текстуры слева и сверху окна вывода? Их-то ты не учел? Посмотрите на кусок кода отвечающий за вывод на экран. Циклическая переменная инициализируется от 0 до ElemCount.(x,y). Это значит, что всегда выводится на одну текстуру больше, чем в ElemCount, а если слева и сверху нет нецелых текстур, то переменная OffsPoint.(x,y) будет равна размерам ячейки. Переменные HelpVar(1,2) станут на размер ячейки меньше, и следовательно переменные ElemCount.(x,y) станут на единицу меньше. Все. Смотрите исходники в модуле Main.pas.

В программе не отловлены все баги. Например определен только один тип мира "West", да и текстуры нарисованы чисто схематически.

Исходные тексты Вы можете скачать тут , а библиотеку DelphiX найдете на сайте DelphiGFX в разделе Libs.

Шпаргалка по ресурсам Windows-32 (для Delphi)

Этот текст — попытка сжатого ответа на большинство заданных в конференции вопросов по ресурсам Windows. Возможно, Вы найдете здесь (в неявном виде) объяснение части связанных с ресурсами сложностей в Delphi.

Стандартная технология доступа к ресурсам

Для компиляции примера надо создать на диске перечисленные исходные файлы (все в текстовом формате). Я не привел примеров для ресурсов типа BitMap`ов, Icon`ов и курсоров, поскольку обращения к ним достаточно тривиальны и не содержат каких-либо неоднозначностей, и, во-вторых, они (декларации ресурсов) недостаточно компактно записываются в виде текста.

Файл `#_Msg.Ini`

Список строк в текстовом файле

msgHello= Здавствуйте !

msgBye= До свидания …

Файл `#_Msg.RC`

Скрипт компилятора ресурсов. В двоичном ресурсе с именем RC1 записана ASCIIz-строка `QWERTY`.

RC1 RCDATA

{

'51 57 45 52 54 59 00'

}

STRINGTABLE

{

1000, "Здравствуйте ."

1001, "До свидания ..."

}

Файл `Proj_L.Dpr`:

Мы используем Delphi как линкер, чтобы дописать стандартный заголовок исполняемых файлов Windows к файлу `#_Msg.Res`. Последний делается компилятором ресурсов из скрипта `#_Msg.RC`. IDE может ругаться при загрузке этого проекта из-за отсутствия секции `uses` —дура.

{$IMAGEBASE $40000000}

{$APPTYPE CONSOLE}

library Proj_L;

{$R #_MSG.RES}