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

UptoLike

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

36
}
// Устанавливает цвет следа и, одновременно, делает след цветным
void __fastcall TTracedSprite::SetTraceColor(TColor const value)
{
traceColor=value;
traceColored=true;
}
// Перемещает спрайт на вектор drift
bool __fastcall TTracedSprite::Move(TSize const drift)
{
if (Visible && Traced) PutTrace();
bool result=TSprite::Move(drift); // Так вызывается метод наследника
if (result) center =CenterPoint(SpriteRect);
return result;
}
#define sprite ((TTracedSprite*)(SpriteList->Items[i]))
#define sprList ((TTracedSpriteList*)SpriteList)
// Помещает пиксел следа на канву
void __fastcall TTracedSprite::PutTrace()
{
for (int i=SpriteList->Count-1;i>=0;i--)
if (sprite->Visible && PtInRect(sprite->SpriteRect,Center))
sprite->Restore();
// Знак ! означает оператор логического отрицания в C
if (!sprList->TraceMap[Center.x-sprList->ClientRect.Left]
[Center.y-sprList->ClientRect.Top])
{
SpriteList->Canvas->Pixels[Center.x][Center.y]=traceColored?traceColor:
// Знак ^ означает оператор логической симметрической разности.
(TColor)(0xffffff ^ SpriteList->Canvas->Pixels[Center.x][Center.y]);
sprList->TraceMap[Center.x-sprList->ClientRect.Left]
[Center.y-sprList->ClientRect.Top]=true;
trPoints.Length++;
trPoints[trPoints.High].x=Center.x;
trPoints[trPoints.High].y=Center.y;
}
for (int i=0;i<SpriteList->Count;i++)
if (sprite->Visible && PtInRect(sprite->SpriteRect,Center))
sprite->Paint();
}
#undef sprite
#undef sprList
// Реализация методов класса эллиптического спрайта TEllipseSprite
// Констуктор вызывает конструктор предка и инициализирует поле color
__fastcall TEllipseSprite::TEllipseSprite(TRect const rect):