Секреты программирования игр


Битовое отсечение - часть 4


{

return;

} // конец оператора if

// Спрайт частично видим, следовательно, необходимо

// рассчитать рисуемую область

// Отсечение по координате Х

if(xs<0)

xs=0;

else

if (xe >= SCREEN_WIDTH) xe = SCREEN_WIDTH-l;

//Отсечение по координате Y

if(ys<0)

уs=0;

else

if(ye >= SCREEN_HEIGHT) ye = SCREEN_HEIGHT-1;

// Расчет новой высоты и ширины

clip_width=xe-xs+l;

clip height=ye-ys+l;

// Расчет рабочего смещения на основе нового начального

// значения координаты Y

work_offset=(sprite->y-ys)*sprite_width;

x_off=(xs-sprite->x);

// Построение усеченного спрайта

// Для упрощения дадим указателю на спрайт новое имя

work_sprite = sprite->frames[sprite->curr_frame];

// Расчет смещения,спрайта в видеобуфере

offset = (ys<< 8) + (ys<< 6) + sprite->xs;

for (y=0; y<clip_height; y++)

{

// Копируем следующую строку в видеобуфер

for (х=0; x<clip_width; x++)

(

// Проверка пикселя на "прозрачность" (то есть на 0);

// если пиксель "непрозрачный" - рисуем

if ((data=work_sprite[work_offset+x+x_off]))

double_buffer[offset+x+x_off] = data;

} // конец цикла по X

// Переход к следующей строке в видеобуфере

// и в растровом буфере спрайта

offset      += SCREEN_WIDTH;

work_offset += sprite_width;

} // конец цикла по У

} // конец функции

Как и к двум первым листингам этой главы, к Листингу 7.3 надо относиться достаточно скептически. Эта программа, конечно, делает то, что ей и положено, однако не учитывает при этом контекста. А контекст - это все! Например, в вашей игре все картинки могут располагаться посередине. Тогда в отсечении у вас просто отпадет необходимость. Возможно, ваш объект всегда будет двигаться по горизонтали, в этом случае не потребуется выполнять вертикальное отсечение и вы сможете провести оптимизацию части предварительной обработки. Иными словами, всегда пытайтесь создавать ваши функции для конкретной ситуации и для определенной игры. В данном случае передо мной стояла несколько иная задача - объяснить вам суть проблемы.Если вы поняли идею, то, потратив определенное время и силы, найдете свое правильное решение.




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