Программирование игр для Windows. Советы профессионала


Операция - часть 3


*** 000034 c9                leave

*** 000035 cb                ret OFFSET 0 Local Size: 6

; Line

0

Если вы внимательно посмотрите на Листинги 7.1 и 7.2, то увидите, что в каждой программе я выделил некую область. Именно эти куски и определяют принципиальное различие приведенных программ. Мы видим, что код, в котором используется логическая операция OR, почти в два раза короче кода с оператором IF. Однако, мы должны прикинуть и время выполнения обоих фрагментов. Это довольно сложно, так как мы не знаем, какой процессор будет использован: 386, 486 или 586. Тем не менее, мы можем приблизительно подсчитать, что код, содержащий операцию OR, будет выполняться почти в два раза быстрее, чем код, в котором используется IF. Однако если нагородить несколько операторов OR, можно легко потерять эффективность этого приема. Поэтому имеет смысл заменять оператор IF только одной, максимум двумя логическими операциями. Следовательно, мы должны найти возможность получения требуемого результата с применением единственной логической операции.

Один из путей такой. Мы можем воспользоваться разнообразными специальными эффектами и нетривиальными манипуляциями, изменяющими с помощью логических операций значение пикселя заданным образом. Например, можно создать такую таблицу выбора цветов, чтобы в результате логических операций получившийся новый индекс цвета имел то же значение RGB, что и исходные данные, а его числовое значение было бы логической комбинацией исходных и результирующих данных.

Попробуем создать цветовую модель для того, чтобы проиллюстрировать это. Пусть в нашей игре фон имеет 16 цветов с индексами 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 200 и 224. Изображение объекта (или спрайт) также содержит 16 цветов, только индексироваться они будут от 0 до 15. Следовательно, когда к исходному и результирующему пикселю применяется логическая операция OR, четыре младших бита результата всегда будут определять цвет фона, в то время как старшая тетрада задаст цвет объекта.




Начало  Назад  Вперед



Книжный магазин