Setactivepage - глюк, :( |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Setactivepage - глюк, :( |
Palux |
Сообщение
#1
|
Гость |
Пишу на Паскале лабу с использованием Graph.
Суть задачи: Рисуется рандомная картинка (линиями и кружочками) потом она проподает и появляется луч фанарика, который двигается и ее освещает. Для это я использау 2 страници. Проблема в том, что они накладываются одна на другую (где то пополам) при смене страниц. Подскажите под. че делать .... Лабу надо быстро сдавать |
Altair |
Сообщение
#2
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
а какой графический режим используешь? не все режимы имеют видеостраницы...
тогда в них происходят просто разделения экрана при попытке их использования.. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Palux |
Сообщение
#3
|
Гость |
блин .... а как узнать какой?
На глаз 640х480х16 |
Archon |
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
detect'ом наверно определился не тот режим который ты хотел. Исходник кинь, поправим.
-------------------- Close the World...txeN eht nepO
|
Altair |
Сообщение
#5
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Многостраничный вывод возможен только на EGA (256Кб), (S)VGA и Hercules. А вот так выглядит проверка поддерживает ли выбранные детектом драйвер страницы:
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
Сообщение
#6
|
Гость |
Цитата(Archon @ 15.06.05 13:54) detect'ом наверно определился не тот режим который ты хотел. Detect-ом может и тот определился, но Detect дает лучший из доступных режимов, поэтому устанавливать придется вручную:Gd:=Ega; |
Palux |
Сообщение
#7
|
Гость |
Режим 640x480 VGA
исходник Код Gd := Detect; InitGraph(Gd, Gm, 'f:\bp\bgi'); If GraphResult <> grOk Then Halt(1); mode:=GetModeName(GetGraphMode); SetActivePage (1); SetVisualPage (1); Repeat Begin SetColor (Random(15)); Line (Random(GetMaxX-2)+1,Random(GetMaxY-2)+1, Random(GetMaxX-2)+1,Random(GetMaxY-2)+1); End Until KeyPressed; SetActivePage (0); SetVisualPage (0); |
Palux |
Сообщение
#8
|
Гость |
заработало с EGA, EGAHi ,но разрешение какоето неприкольное....
Мне бы с VGA, но с ним не работает |
Altair |
Сообщение
#9
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
А чего ты хочешь добиться в программе? ты же все равно на 1 страницу выводишь... зачем тебе они тогда вообще?
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Palux |
Сообщение
#10
|
Гость |
ну скажите еще ченить, мне эту лабу уже здать надо
|
Palux |
Сообщение
#11
|
Гость |
Oleg_Z,
я хочу добиться эффекта освещения в темноте рисунка фанариком (световое пятно). А как по другому сделать то? Если начальный экран загнать в массив каконить (GetImage), то как из него потом доставать кусочки, которые надо засветить? А тут удобно (я тык думаю): Перевлючил актив страницу, взял кусок, опять переключил, обрезал по кругу, положил ..... |
Palux |
Сообщение
#12
|
Гость |
может у меня изначально неправельный подход?
Тады как сделать по правельному? |
Archon |
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Да нормалёк... Делай по своему. А разрешением придётся пожертвовать, я сам от чего-то выше 320x200x256 давно отказался(муторно слишком, а чужие модули использовать не хочу).
Цитата Если начальный экран загнать в массив каконить (GetImage), то как из него потом доставать кусочки, которые надо засветить? Достать-то можно, только весь экран в большом разрешении загнать будет сложно(640*480*4=153600 байт ...да нет если указатель на массив тады можно...мысли в слух... ) -------------------- Close the World...txeN eht nepO
|
volvo |
Сообщение
#14
|
Гость |
Palux, держи исходник для начала... Учти, при больших значениях радиуса будет притормаживать. И попробуй (если это не устроит) переделать, как тебе нужно... ;)
Код uses crt, graph; var buffer: array[1 .. 10000] of byte; curr: integer; procedure get_square(x, y, r: integer); var ix, iy: integer; begin setactivepage(0); curr := 0; for iy := y - r to y + r do for ix := x - r to x + r do begin inc(curr); buffer[curr] := getpixel(ix, iy); end; setactivepage(1); end; procedure put_circle(x, y, r: longint); var ix, iy: integer; begin curr := 0; for iy := y - r to y + r do for ix := x - r to x + r do begin inc(curr); if (sqr(x - ix) + sqr(y - iy) <= sqr(r) then putpixel(ix, iy, buffer[curr]); end; end; procedure darkcircle(x, y, r: integer); begin setfillstyle(solidfill, black); bar(x - r, y - r, x + r, y + r); end; var gd, gm: integer; x, y, i: integer; const r = 20; begin Gd := ega; Gm := egahi; InitGraph(Gd, Gm, ''); If GraphResult <> grOk Then Halt(1); SetActivePage(0); SetVisualPage(0); Repeat SetColor (Random(15)); Line (Random(GetMaxX-2)+1,Random(GetMaxY-2)+1, Random(GetMaxX-2)+1,Random(GetMaxY-2)+1); Until KeyPressed; while keypressed do readkey; SetActivePage(1); SetVisualPage(1); x := getmaxx div 2; y := getmaxy div 2; repeat get_square(x, y, r); put_circle(x, y, r); delay(22000); darkcircle(x, y, r); inc(x, 10); Until KeyPressed; while keypressed do readkey; closegraph; end. |
Текстовая версия | 16.05.2024 6:04 |