IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Передвижение графических объектов, графика
punkska
сообщение 29.09.2005 19:40
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

Репутация: -  0  +


Необходимо перемещать прямоугольник ( для примера ) с помощбю клавиш управления курсором как это правильно описываеться? лучше в процедуре иои в самой программе! желательно пример! Спасибо


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.09.2005 21:01
Сообщение #2


Гость






Лучше всего для перемещения простых фигур пользоваться вот такой структурой:
var
pos_x, pos_y: integer;
size_x, size_y: integer;
...

{ присвоение начальных значений }
pos_x := ...; pos_y := ...;
size_x := ...; size_y := ...;

SetWriteMode(XorPut);
SetColor(White);
Rectangle(pos_x, pos_y, pos_x+size_x, pos_y+size_y);

Case ReadKey Of
{ управляющие клавиши }
#0: Begin
{ скрываем прямоугольник со старыми координатами ... }
Rectangle(pos_x, pos_y, pos_x+size_x, pos_y+size_y);

{ ... в зависимости от нажатой клавиши изменяем координаты ... }
Case ReadKey Of
#72: { Вверх }
dec(pos_y, 5);
#80: { Вниз }
inc(pos_y, 5);
#75: { Влево }
dec(pos_x, 5);
#77: { Вправо }
inc(pos_x, 5);
End;
{ ... и показываем прямоугольник на новых координатах }
Rectangle(pos_x, pos_y, pos_x+size_x, pos_y+size_y);
End; { #0 }
End;

Здесь все дело в режиме XorPut, при использовании которого для "гашения" изображения достаточно нарисовать еще раз то же самое изображение в том же самом месте, и нет необходимости хранить фон в буфере (но, к сожалению, режим рисования, задаваемый в SetWriteMode, действует только на рисование отрезками: Line, LineRel, LineTo, Rectangle и DrawPoly)...
 К началу страницы 
+ Ответить 
punkska
сообщение 30.09.2005 7:20
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

Репутация: -  0  +


а другие элементарные фигуры перемещать как тогда


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.09.2005 8:27
Сообщение #4


Гость






А какие фигуры ты считаешь элементарными? Если она может быть отрисована линиями, то точно по такому же принципу: задаешь координаты pos_x и pos_y, и отрисовываешь фигуру используя только эти две координаты (чтобы не менять значения многих переменных в момент нажатия на кнопки управления курсором)...

Если же "элементарные" фигуры НЕ отрисовываются линиями, то используй не XORPut, а обычный CopyPut, и для того, чтобы стереть фигуру, просто рисуй ее цветом фона (GetBkColor)
 К началу страницы 
+ Ответить 
punkska
сообщение 30.09.2005 8:36
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

Репутация: -  0  +


точно!!!
спасибо!!!


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"