пятница, 10 апреля 2015 г.

Рисуем в Pascal. Маленькие фокусы

Разница между командами Circle, FillCircle, DrawCircle


uses GraphABC;
begin
    Window.SetSize(500, 250);
    Pen.SetWidth(4);
    Pen.SetColor(clRed);
    Brush.SetColor(clBlue);
    DrawCircle(100, 100, 60); //рисует окружность
    Circle(250, 100, 60); //рисует круг
    FillCircle(400, 100, 60); // закрашивает внутреннюю часть круга
end.

Пример работы с SetPixel

 
uses    GraphABC; 
var    x, y: integer; 
begin
    Window.SetSize(256, 256); //Задаем размер окна
    //Проходим по всем точкам окна и закрашиваем их     
    for x := 0 to 255 do
        for y := 0 to 255 do
            setpixel(x, y, rgb(x, 150, y)); 
end.
Команда setpixel(x, y, rgb(x, 150, y)); позволяет задавать цвет каждого пикселя в зависимости от его позиции на экране.

Попробуйте заменить строчку setpixel(x, y, rgb(x, 150, y)); на :setpixel(x, y, rgb(x, y, x+y)); setpixel(x, y, rgb(x, y, x*y));

Простая анимация с помощью sleep. Рисуем луну



uses GraphABC;
var x: integer;
begin
    Window.SetSize(800, 600);
    Window.Clear(clDarkBlue);
    LockDrawing;
    for x := 550 downto 150 do
    begin
        Brush.SetColor(clGold); // рисуем диск Луны
        FillCircle(400, 200, 100);
        Brush.SetColor(clDarkBlue); // рисуем темно-синюю тень
        FillCircle(x, 200, 100);
        Redraw;
        sleep(10); // задержка в 10 милисекунд
    end;
end.

Команда sleep(10)  создает задержку в 10 милисекунд.
Команды LockDrawing и Redraw обеспечивают анимацию без "мерцания"

Попробуйте убрать команды LockDrawing и Redraw из программы. Посмотрите, что получилось?

Комментариев нет:

Отправить комментарий