Движущиеся изображения: операторы GET и PUT
Простой способ "оживить" экран состоит в исполнении операторов get и put. Они позволяют "снять" изображение с части экрана и повторить его в другом месте. Это происходит очень быстро, поскольку исходная фигура не перерисовывается теми графическими операторами, которыми она вначале была создана, а просто дублируются все ее точки.
Представленная ниже программа рисует блоху, которая "скачет" по экрану, т. к. сначала оператор get сохраняет ее изображение, а затем оператор put копирует это изображение в любое заданное место экрана. Ощущение движения возникает из-за того, что перед каждым "прыжком" блохи ее старое изображение стирается.
CLS
SCREEN 9
COLOR 9, 1
REM Рис.ание блохи
DRAW "C2 L20 U20 R20 D20 F10 D10 R2"
DRAW "BM300,175 C2 G10 D10 L2"
DRAW "ВМ300Д55 С2 НЮ ЕЮ L2"
DRAW "BM320,155 C2 ЕЮ НЮ R2"
DRAW "ВМ310Д55 С2 U4"
DRAW "ВМ307,151 С2 RIO H6 G6"
PAINT (310, 170), 2, 2
BYTES = INT((55 *2+7)/8)*60
DIM BUG(BYTES)
GET (285, 135)-(340, 195), BUG
CLS
PUT (250, 80), BUG: SLEEP 1
PUT (250, 80), BUG: SLEEP 1
PUT (30, 60), BUG: SLEEP 1
PUT (30, 60) , BUG: SLEEP 1
PUT (460, 130) , BUG : SLEEP 1
PUT (460, 130) , BUG : SLEEP 1
PUT (180, 70), BUG: SLEEP 1
PUT (180, 70), BUG: SLEEP 1
PUT (300, 70), BUG: SLEEP 1
END
Оператор GET
Прежде чем выполнить оператор get, нужно провести важную подготовительную работу: определить местоположение и размер той области экрана, которую вы хотите снять. Большую помощь в этом вам окажет предварительный набросок на миллиметровой бумаге, где каждый квадратик сопоставляется с точкой экрана.
Оператор get запоминает в массиве изображение заданной области экрана. Поэтому нужно заранее описать массив оператором dim. Существует формула, определяющая требуемую длину массива исходя из размеров запоминаемой области и режима работы экрана. Формула для средней разрешающей способности экрана такова:
INT ( (число точек по горизонтали * 2 + 7) /8) * число точек по вертикали
Формула для высокой разрешающей способности экрана:
INT {(число точек по горизонтали + 7) /8) * число точек по вертикали
В строке программы, содержащей присваивание переменной bytes, подсчитывается длина массива, необходимая для изображения блохи при средней разрешающей способности. Рис.ок занимает примерно 55 позиций по .горизонтали и 60 — по вертикали. Результат вычисления определяет длину массива bog в следующей строке.
Оператор
GET (285, 135)-(340, 195), BUG
переписывает в массив bug содержимое прямоугольной области экрана, левый верхний угол которой совпадает с точкой (285, 135), а правый нижний — с точкой (340, 195).
Оператор PUT
Теперь уже совсем просто "посадить" блоху в любое место экрана. Это делается с помощью оператора put. В строках, следующих за оператором get программы, содержимое массива bug размещается на экране с той позиции, которая указана в операторах put. Так, оператор
PUT (250, 80), BUG
накладывает содержимое области экрана, снятое с помощью get, на прямоугольник, левый верхний угол которого находится в точке (250, 80). Эффект наложения таков, что если два одинаковых оператора put следуют подряд, то второй нейтрализует действие первого: изображение сначала рисуется, а затем стирается. Таким образом, несколько сдвоенных операторов put создают иллюзию движения изображения.
Дополнительный параметр оператора put определяет способ наложения рисуемого изображения с тем, что уже есть на экране. Оператор с параметром pset
PUT (250, 80), BUG, PSET
игнорирует прежнее изображение в данной области экрана. Оператор
PUT (250, 80), BUG, PRESET
действует так же, но рисует негативное изображение, а оператор
PUT (250. 80), BUG, XOR
действует так же, как оператор без последнего параметра. Два таких оператора, следующих подряд, рисуют и тут же стирают изображение, оставляя экран неизменным.
Оператор
PUT (250, 80), BUG, AND
оставляет только общую часть нового и старого изображения. Оператор
PUT (250, 80), BUG, OR
"добавляет" изображение к тому, что уже есть на экране. Поэкспериментируйте с оператором put и постарайтесь использовать предоставляемые им возможности.
Назад Содержание Вперед