Здорово народ, ну в общем название темы это и есть вопрос. Короче проблема такая: сделал прогу- рисует машинку. Вопрос на 10 баллов, как заставить эту бесбашенную конструкцию перемещатся по экрану? Через delay со стиранием экрана.
klem4
18.12.2005 11:07
Сначала сделай процедуру, которая рисует машину относительно базовой точки ну а потом выводии ее на экран изменяя координаты ... вот можешь посмотреть на примере движеня шариков : Движение рисунка
volvo
18.12.2005 11:08
Не обязательно для этого стирать экран... Достаточно с помощью GetImage захватить тот кусок экрана, на котором отрисована машинка, а потом в цикле делать, например, так:
Var Img: Pointer; ... GetMem(Img, ImageSize(10, 10, 100, 50)); { Подставь свои координаты, машинка должна вмещаться в заданный прямоугольник полностью }
GetImage(10, 10, 100, 50, Img^); { Сохранить образ машинки в память } ClearDevice; { Очистить экран } ... for i := 1 to 30 do begin PutImage(X+5*i, Y, Img^, XorPut); { Рисуем изображение } Delay(2000); { Ждем немного } putimage(X+5*i, Y, Img^, XorPut); { И опять затираем, особенность XorPut } end; ...
А вообще, попробуй поискать по форуму с ключевыми словами "анимация", "PutImage", "GetImage"... По-моему, уже кое-что выкладывалось...
Костян
18.12.2005 11:46
Народ еще один вопрос. прога должна рисовать пятиконечную звезду, но почему то выдает ошибку, проверьте- кому не лень.
Код
program supercar; uses graph, crt; const zvezda : array[1..12] of pointtype= (x:1; y:176),(x:124; y:175),(x:212; y:2),(x:302; y:175), (x:428; y:177),(x:335; y:237),(x:427; y:427),(x:217; y:308), (x:2; y:427),(x:96; y:236),(x:1; y:176); var gd, gm :integer; begin
Не хватает внешних скобок и пропущены координаты одной точки
volvo
18.12.2005 11:58
Костян, а что, "пятиконечная звезда" напрямую связана с темой - "Машинка-дай газу"? Что за привычка, делать из каждой темы свалку вопросов? Нельзя было задать этот вопрос в "Задачах"?
Костян
18.12.2005 19:34
Большое СПАСИБО за ПоМоЩь!
Shura
10.01.2006 18:14
Кстати, про движение машинки... Если она контурная, т.е. состоит из десятка-другого линий, то лучше ее закрашивать каждый раз (рисовать цветом фона), потому что GetImage/PutImage тут себя не оправдают - производительность упадет без пользы. Оных использовать нужно только если перемещается действительно спрайт. И вообще эти процедуры в Graph'е какие-то неуклюжие... Там, где есть фон и множество перекрывающихся спрайтов, иногда так приходится извращаться... Лучше работать с видеостраницами, а эти процедуры написать самому, под свои требования.
volvo
10.01.2006 18:23
Shura, а
Цитата
если она контурная, т.е. состоит из десятка-другого линий,
, то просто
SetWriteMode(XORPut); { и в цикле } ShowAuto(X, Y); { <-- Рисуем машинку } Delay(1000); ShowAuto(X, Y); { <- Стираем ее } { Изменяем координаты }
А видеостраницами ты пользоваться, например, в 640*480 со стандартным EGAVGA.BGI вообще не сможешь... Так что еще большой вопрос, чем стОит пользоваться, а чем - нет...
Shura
10.01.2006 18:48
Цитата(volvo @ 10.01.2006 18:23)
Shura, а , то просто
SetWriteMode(XORPut); { и в цикле } ShowAuto(X, Y); { <-- Рисуем машинку } Delay(1000); ShowAuto(X, Y); { <- Стираем ее } { Изменяем координаты }
Ну это ведь то, что я и имел ввиду... Или нет?
Цитата
А видеостраницами ты пользоваться, например, в 640*480 со стандартным EGAVGA.BGI вообще не сможешь... Так что еще большой вопрос, чем стОит пользоваться, а чем - нет...
Я и не говорил про использование стандартного EGAVGA.BGI. В том-то и дело, что со страницами тут не поработаешь, максимум - GetImage/PutImage, но использовать их без страниц, чтобы сделать что-то красивое, динамичное - супер-изврат. Все идет к тому, что нужно брать другие режимы. Или режим MCGA на крайний случай, или Весу там, например... А в стандартном так и придется, как выше описано.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.