У меня вопрос по Visualpage. Cейчас рисую НЛО на фоне мерцающего неба. Проблема в том, что когда с помощью putimage вставляю рандомайзом свой НЛО, затирается мое небо. Не уверена, поэтому хочу спросить,как мне сделать небо основным фоном(чтобы не затиралось). Наверное это связано с Visualpage.
Тогда вот. Режим XOR хорошая вещь, но у него есть та особенность, что при наложении картинки на сложный фон этот фон будет просвечивать. Вот еще возможный вариант. Для изображения НЛО используем PutImage в режиме NormalPut. Это достаточно быстро. Для того, чтобы его убирать, можно использовать еще один спрайт - черный прямоугольник (если небо у нас черное). Тогда возникает проблема - при движении НЛО будет затирать звезды. Значит, их надо восстанавливать. А заодно надо решить и задачу мигания звезд. Что бы я сделал: создал бы массив Nx2 (Stars: array[1..2][1..N] of word), где N - число звезд (штук 100). Перед началом основного цикла заполняем этот массив случайными координатами звезд:
For i:=1 to N do begin Stars[ i ][1] := random(640); Stars[ i ][2] := random(480); end;
Теперь основной цикл программы выглядит так: - вычисляем новые координаты НЛО - затираем НЛО - пробегаемся по массиву и в точках с координатами звезд выводим случайный цвет:
For i:=1 to N do PutPixel(Stars[i][1],Stars[i][2],random(16));
- рисуем НЛО - выдерживаем паузу Теперь осталась еще та проблема, что при выводе НЛО звезды затираются по всей площади прямоугольника, а ведь НЛО у нас не прямоугольный. Ну... может, этим стоит пренебречь? Как только НЛО улетит с этого места, звезды восстановятся. По поводу движения: если хватит сил замутить фигуры Лиссажу, это будет здорово, но стоит ли? Проще сделать так: пусть Х и У - текущие координаты НЛО. Определяем новые случайные координаты, Х1 и У1. А затем вычисляем шаг перемещения
If X < X1 then DX := 1 else if X = X1 then DX := 0 else DX := -1;
Аналогично для Y, Y1 и DY. Потом в цикле движения проверяем, достигли ли мы уже точки назначения? Если нет, тогда вычисляем новые координаты там, где это необходимо:
If X <> X1 then X := X + DX; If Y <> Y1 then Y := Y + DY;
А если достигли, тогда выбираем новые случайные Х1 и Y1. При такой схеме НЛО будет не спеша летать по некоторой ломаной линии. Не спеша, потому что шаг единичный. Если шаг увеличить, то потребуются дополнительные усилия с определением того, достигли ли мы точки назначения. А еще можно просто выбрать случайное направление и лететь, пока не упремся в стенку. Когда упремся, выбрать новое направление, и т.д.