|
||||||||
§32. Обзор классов и модулей PascalABC.NET. Класс GraphABCWindow. Когда мы запускаем программу, к которой подключён модуль GraphABC.NET, на экране автоматически появляется виндоусовское окно. Это не что иное, как графический объект, подобный нашим кнопкам и мячам. Имя этого объекта – Window. Он создаётся автоматически при запуске программы и выводится на экран. Этот объект принадлежит классу GraphABCWindow. Как и у любого другого класса у него есть свои поля, свойства и методы, о которых можно прочитать в разделе справки: «Стандартные модули -> Модуль GraphABC -> GraphABC: объект графического окна Window». Для того, что бы обратиться к этим свойствам и методам, так же как и в случае с другими объектами, необходимо написать имя Window и после точки указать имя свойства или метода. Например, в следующей программе мы изменили заголовок окна через свойство Caption: uses GraphABC; begin Window.Caption:='Привет всем!'; end. Здесь необходимо добавить, что свойства и методы можно менять и вызывать через процедуры и функции, о которых написано в разделе справки: «Стандартные модули -> Модуль GraphABC -> GraphABC: Подпрограммы для работы с графическим окном». Класс GraphABCCoordinate. Объект Coordinate данного класса позволяет менять масштаб, сдвигать и поворачивать координатную сетку окна, в которое мы выводим свои рисунки. Что это значит? Если мы не делали ни каких настроек данного объекта, то, к примеру примеру, масштаб рисования будет один к одному, т.е. если нам нужна линия в 10 пикселей, то рисуя такую линию, мы получим линию в 10 пикселей. Если мы изменим масштаб на два к одному, и нарисуем линию длиной 10 пикселей, то в реальности получим линию в 20 пикселей. Т.е. если мы, каким либо образом настроим данный объект, то изменится либо масштаб вывода, либо рисунки будут смещены относительно левого верхнего угла, либо всё нарисованное повернётся на определённый угол. Этот класс находится в модуле GraphABC. О нём достаточно понятно расписано в разделе справки: «Стандартные модули -> Модуль GraphABC -> GraphABC: Объект Coordinate координат графического окна». Далее простейший пример, в котором с помощью метода Scale (изменение масштаба) объекта Coordinate меняется масштаб вывода: uses GraphABC; begin DrawRectangle(10,10,100,50); Coordinate.Scale:=1.5;//Масштаб 1:1.5 DrawRectangle(10,10,100,50); Coordinate.Scale:=1;//Масштаб 1:1 DrawRectangle(10,10,100,50); end. Примечание: в результате работы программы мы видим 2 прямоугольника, хотя процедура DrawRectangle была вызвана 3 раза. Это потому, что изначально масштаб настроен как один к одному, затем он был изменён. После того, как мы снова сделали масштаб один к одному, прямоугольник был нарисован точно на первом. Далее ещё один пример, в котором на основе модулей MObjects и MRisunki, создаётся класс TMashinkaPrepyatstviye. Этот класс является почти копией класса TMashinka, только машинка этого класса будет направлена лобовой частью вниз. Т.е. в игре её можно будет использовать в качестве препятствия. Далее код: uses GraphABC,MObjects,MRisunki; type TMashinkaPrepyatstviye = class (TMashinka) procedure Draw; override; begin Coordinate.OriginX:=2*x+30; Coordinate.OriginY:=2*y+40; Coordinate.Angle:=180; DrawCar(x,y); Coordinate.OriginX:=Round(Coordinate.OriginX/2-30); Coordinate.OriginY:=Round(Coordinate.OriginY/2-40); Coordinate.Angle:=0; end; end; var MasPrep:TMashinkaPrepyatstviye:=new TMashinkaPrepyatstviye(100,10); begin end. Пояснение: свойство Angle поворачивает всю координатную сетку. Соответственно нарисованный объект не только повернётся, но и сместится с ней со всей. Поэтому, что бы его как бы вернуть обратно, необходимо сместить и всю координатную сетку влево и вниз. Модуль ABCObjects . Модуль ABCObjecnts представляет собой библиотеку классов векторных графических объектов. До сих пор мы прописывали методы рисования и стирания объектов вручную, а так же реализовывали движение объектов самостоятельно. При использовании классов данного модуля, всё это будет делаться автоматически. В данном модуле описан базовый класс ObjectABC и ряд производных от него. В качестве примера приведу использование класса PictureABC, который позволяет выводить на экран рисунки из файла: uses GraphABC,ABCObjects; var Kartinka:PictureABC:=new PictureABC(10,10,'Kartinka.jpg'); begin Window.Clear(clDimGray); Kartinka.dx:=2; Kartinka.dy:=2; For var i:=1 to 100 do begin Kartinka.Move; Sleep(200); end; Kartinka.Destroy; end. В данном примере в качестве параметра в конструктор класса PictureABC передаются координаты и имя файла, в котором содержится рисунок. Для проверки данного примера можете передать имя своего рисунка. Класс Timer. Объекты класса Timer предназначены для выполнения определённых действий через равные промежутки времени. Описание данного класса дано в следующем разделе справки: «Стандартные модули -> Модуль Timers». Простейшим примером использования данного класса может быть программа вывода на экран мигающей надписи: uses GraphABC,Timers; const sNadpis = 'Привет всем!'; var Vidimost:boolean:=true;
procedure Pr; begin if vidimost then begin TextOut(100,10,sNadpis); vidimost:=false end else begin FillRect(100,10,100+TextWidth(sNadpis),10+TextHeight(sNadpis)); vidimost:=true end; end; var time:Timer:=new Timer(400,Pr); begin SetBrushColor(clWhite); time.Start; end. В примере приведено два рисунка для того, что бы показать, что надпись то появляется, то исчезает. Если вы будете использовать мигающую надпись в своей программе, то вероятнее всего будет удобнее, если она будет оформлена в виде объекта. Поэтому приведу пример, в котором описан и использован класс TMigNadpis: uses GraphABC,Timers; type TMigNadpis = class vidimost:boolean:=true; x,y:integer; sNadpis:string; Time:Timer; constructor (xx,yy,t:integer;ss:string); begin sNadpis:=ss; x:=xx; y:=yy; Time:=new Timer(t,Draw); Time.Start; end; procedure Draw; begin if vidimost then begin TextOut(x,y,sNadpis); vidimost:=false end else begin SetBrushColor(clWhite); FillRect(x,y,x+TextWidth(sNadpis),y+TextHeight(sNadpis)); vidimost:=true end; end; end; var MigNadpis_1:TMigNadpis:=new TMigNadpis(100,20,400,'Привет всем!'); MigNadpis_2:TMigNadpis:=new TMigNadpis(300,20,300,'Ура!'); begin end. В качестве параметров в конструктор класса TMigNadpis передаются координаты, время интервала мигания и текст надписи. Используя этот класс можно создать не одну, а несколько мигающих надписей в любом месте экрана. Так же стоит заметить, что в данном примере надписи мигают независимо друг от друга. По такому же принципу можно организовать анимацию, используя класс MultiPictureABC. Модуль ABCSprites . В модуле ABCSprite описан класс SpriteABC, объекты которого являются анимационными рисунками. Данный класс удобно использовать при создании игровых объектов. Пример использования данного класса приводить не буду, т.к. он может получиться достаточно большим. А так же потому, что в нём должны использоваться рисунки из файлов, поэтому проверить работу данного примера вы не сможете. Находится данная тема в разделе справки: «Стандартные модули -> Модуль ABCSprites». Думаю, вы с ней без труда разберётесь. В данном параграфе мы произвели обзор готовых модулей и классов, которыми вы можете пользоваться, решая последние задания этого учебника. Задача. Изучить все классы, представленные в обзоре. Придумать и написать пример использования каждого свойства и метода этих классов. Примечание: решение данной задачи может отнять у вас много времени, тем не менее, решить её надо обязательно, т.к. вы приобретёте знания, которые просто необходимы для решения задач из следующего параграфа. Хочется сделать рекомендацию, сохраните все придуманные вами примеры и дайте им соответствующие имена. Сделать это необходимо потому, что помнить всё невозможно и эти примеры помогут вам оперативно находить нужную информацию. Решение. Это задание вы должны выполнить самостоятельно.
|