Помощь - Поиск - Пользователи - Календарь
Полная версия: Машинка-дай газу!
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Костян
Здорово народ, ну в общем название темы это и есть вопрос. Короче проблема такая: сделал прогу- рисует машинку. Вопрос на 10 баллов, как заставить эту бесбашенную конструкцию перемещатся по экрану? Через delay со стиранием экрана.
klem4
Сначала сделай процедуру, которая рисует машину относительно базовой точки ну а потом выводии ее на экран изменяя координаты ... вот можешь посмотреть на примере движеня шариков : Движение рисунка
volvo
Не обязательно для этого стирать экран... Достаточно с помощью 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"... По-моему, уже кое-что выкладывалось...
Костян
Народ еще один вопрос. прога должна рисовать пятиконечную звезду, но почему то выдает ошибку, проверьте- кому не лень. blush.gif
Код
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

gd:=detect;
initgraph(gd,gm,'');
cleardevice;
fillpoly(4,zvezda);

readkey;
end.
klem4
Не хватает внешних скобок и пропущены координаты одной точки
volvo
Костян, а что, "пятиконечная звезда" напрямую связана с темой - "Машинка-дай газу"? Что за привычка, делать из каждой темы свалку вопросов? Нельзя было задать этот вопрос в "Задачах"?
Костян
Большое СПАСИБО за ПоМоЩь! smile.gif
Shura
Кстати, про движение машинки... Если она контурная, т.е. состоит из десятка-другого линий, то лучше ее закрашивать каждый раз (рисовать цветом фона), потому что GetImage/PutImage тут себя не оправдают - производительность упадет без пользы. Оных использовать нужно только если перемещается действительно спрайт. И вообще эти процедуры в Graph'е какие-то неуклюжие... Там, где есть фон и множество перекрывающихся спрайтов, иногда так приходится извращаться... Лучше работать с видеостраницами, а эти процедуры написать самому, под свои требования.
volvo
Shura, а
Цитата
если она контурная, т.е. состоит из десятка-другого линий,
, то просто
SetWriteMode(XORPut); 
{ и в цикле }
ShowAuto(X, Y); { <-- Рисуем машинку }
Delay(1000);
ShowAuto(X, Y); { <- Стираем ее }
{ Изменяем координаты }

А видеостраницами ты пользоваться, например, в 640*480 со стандартным EGAVGA.BGI вообще не сможешь... Так что еще большой вопрос, чем стОит пользоваться, а чем - нет...
Shura
Цитата(volvo @ 10.01.2006 18:23) *

Shura, а , то просто
SetWriteMode(XORPut); 
{ и в цикле }
ShowAuto(X, Y); { <-- Рисуем машинку }
Delay(1000);
ShowAuto(X, Y); { <- Стираем ее }
{ Изменяем координаты }



Ну это ведь то, что я и имел ввиду... Или нет?

Цитата

А видеостраницами ты пользоваться, например, в 640*480 со стандартным EGAVGA.BGI вообще не сможешь... Так что еще большой вопрос, чем стОит пользоваться, а чем - нет...


Я и не говорил про использование стандартного EGAVGA.BGI. wink.gif В том-то и дело, что со страницами тут не поработаешь, максимум - GetImage/PutImage, но использовать их без страниц, чтобы сделать что-то красивое, динамичное - супер-изврат. Все идет к тому, что нужно брать другие режимы. Или режим MCGA на крайний случай, или Весу там, например... А в стандартном так и придется, как выше описано.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.