Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите с графикой

Автор: Buka 1.06.2009 22:15

Надо представить в виде мультфильма картину медленного захода солнца за линию горизонта с изменением освещения пейзажа.
есть текст как солнце заходит:

program fgh;
uses crt,graph;
var GrDr,GrMd,i,g,j:integer; f:word;
const
cga=1;
begin
grdr:=detect;
initgraph(grdr,grmd,'c:\pascal\bgi');
setcolor(2);
line(0,400,getmaxX ,400);
g:=getbkcolor;
i:=50;j:=50;
while i<700 do
begin
setcolor(yellow);
setfillstyle(1,yellow);
fillellipse(i,j,40,40);
delay(2000);
setcolor(g);
setfillstyle(1,g);
fillellipse(i,j,40,40);
i:=i+random(3);
j:=j+random(2);
end;

closegraph;
end.
readln;


а вот с фоном проблемы((

Тегами пользуйся в следующий раз (выделяешь код, и выбираешь в листбоксе CODE нужный язык программирования)

Автор: volvo 1.06.2009 22:36

Цитата
есть текст как солнце заходит:
Ну, во-первых, оно ни разу не "заходит", а просто пересекает линию "горизонта". Чтоб заходило - надо сделать Вьюпорт без отображения графики за его границами, тогда солнце будет именно заходить, т.е., исчезать за линией горизонта...

Во-вторых: по какому признаку ты хочешь менять освещение? В зависимости от высоты солнца? А как должно меняться освещение? Может, просто менять цвет фона (скажем, когда солнце в зените - фон светло-синий, когда посередине между зенитом и горизонтом - фон просто синий, и когда солнце уже касается горизонта - фон становится черным)? Пойдет тебе такое? Если да, расскажу, как реализуется smile.gif

Автор: Lapp 1.06.2009 22:40

Цитата(Buka @ 1.06.2009 19:15) *

Надо представить в виде мультфильма картину медленного захода солнца за линию горизонта с изменением освещения пейзажа.
...
а вот с фоном проблемы((
Стоп. А какой, собственно, пейзаж? "Бабы с граблями рядами ходят, сено шевелят"? Или "двух озер лазурные равнины, где парус рыбаря белеет иногда, за ними ряд холмов и нивы полсаты, вдали рассыпанные хаты, на влажных береагх бродящие стада.." Что ты имеешь в виду? Ты уж скажи поточнее, а то тебе нарисуют баб, а ты скажешь - хочу стада.. Или ваще Бэтмана, летящего на крыльях ночи.. Пейзажей же много бывает! Понимаешь мою идею?

Или я что-то упускаю?.. blink.gif

Автор: Buka 1.06.2009 22:55

надо только чтоб цвет фона менялся smile.gif

Добавлено через 19 мин.

Цитата(volvo @ 1.06.2009 21:36) *

Ну, во-первых, оно ни разу не "заходит", а просто пересекает линию "горизонта". Чтоб заходило - надо сделать Вьюпорт без отображения графики за его границами, тогда солнце будет именно заходить, т.е., исчезать за линией горизонта...

Во-вторых: по какому признаку ты хочешь менять освещение? В зависимости от высоты солнца? А как должно меняться освещение? Может, просто менять цвет фона (скажем, когда солнце в зените - фон светло-синий, когда посередине между зенитом и горизонтом - фон просто синий, и когда солнце уже касается горизонта - фон становится черным)? Пойдет тебе такое? Если да, расскажу, как реализуется smile.gif


Да да, так мне и надо))

Автор: volvo 2.06.2009 0:17

Ну, тогда что-то в этом роде:

uses crt, graph;

var
gd, gm: integer;
x, y: integer;

begin
initgraph(gd, gm, '');
if graphresult <> grok then begin
writeln('graphics error'); readln; halt(100);
end;

setcolor(green);
line(0, getmaxy div 2 + 1, getmaxx, getmaxy div 2 + 1);
setviewport(0, 0, getmaxx, getmaxy div 2, true);
y := 0;
while y < getmaxy div 2 do
begin
case y div (getmaxy div 6) of
0: setbkcolor(lightblue);
1: setbkcolor(blue);
2: setbkcolor(black);
end;
clearviewport;

setcolor(yellow);
setfillstyle(solidfill, yellow);
fillellipse(x, y, 40, 40);
delay(30);
y:=y+random(3);
x:=x+random(2);
end;
readln;
end.
В FPC отработало, для Турбо-Паскаля могут быть 2 проблемы: 1) слишком маленькая задержка в Delay, поменяй на то, что больше подходит. 2) смена цвета фона будет распространяться на весь экран, а не только на Вьюпорт... Попробуй, если что не так - говори, будем думать, как исправлять, вместе smile.gif

Автор: Buka 2.06.2009 8:47

Спасибо smile.gif