Сравнительное объектно-ориентированное проектирование - 31 стр.

UptoLike

Составители: 

31
{
// двойной знак && есть операция логического умножения
if (sprite && Contains(sprite->SpriteRect,ClientRect))
{
sprite->spriteList=this;
sprite->z =list->Add(sprite);
count=list->Count;
return sprite;
} else return NULL;
}
// Перемещает спрайт с одной плоскости в другую (в смысле z-упорядочения)
void __fastcall TSpriteList::MoveSprite(int const fromZ, int const toZ)
{
if (fromZ != toZ && fromZ > -1 && fromZ < count &&
toZ > -1 && toZ < count)
{
//В языке C локальные переменные (как minZ здесь)
// могут быть описаны в любой точке кода
// Выражение вида a = b?c:d называется условным выражением.
// В нем переменной a присваивается значение c, если выполняется условие b,
// и значение d, если оно не выполняется
// int minZ = fromZ < toZ ? fromZ : toZ;
// В операторе цикла значение i в начале инициализируется,
// затем проверяется условие окончания цикла,
// выполняется оператор внутри цикла (если условие соблюдено),
// затем меняется значение параметра i.
// В данном случае оператор i-- означает уменьшение i на 1.
for (int i = count - 1; i >= minZ; i--)
if (Items[i]->Visible) Items[i]->Restore();
list->Move(fromZ,toZ);
for (int i = minZ; i < count; i++)
{
Items[i]->z = i;
if (Items[i]->Visible) Items[i]->Paint();
}
}
}
// Освобождает экземпляр объекта типа TSprite,
// находящийся в списке под номером aZ, и убирает указатель из списка
void __fastcall TSpriteList::DeleteSprite(int const aZ)
{
if (aZ<count && aZ>-1)
{
for (int i= count-1;i>=aZ;i--)
if (Items[i]->Visible) Items[i]->Restore();
delete Items[aZ];