|
Основной форум Сюда все проблемы связанные с программированием. |
27.01.2011, 18:02
|
#1
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Сенсоры и прямая линия.
Написал функцию отрисовки линии с помощью сенсора. По задумке она должна точно рисовать линию на подобие пейнтовской. Тоесть как бы "царапать" экран).
Но иногда она работает не корректно. А именно: с самого начала рисует линию из начала координат и принимает координаты конца предыдущей линии за начало новой линии. Исчезать она должна - это не баг.
program line;
uses sensor;
var x, y, xline, yline, pointer_x, pointer_y, first_pointer_x, first_pointer_y, pointer_time, pe: integer;
keyCode: integer;
begin
sensor.init;
repeat
SetColor(255, 255, 255);
FillRect(0, 0, GetWidth, GetHeight);
SetColor(0, 0, 0);
keyCode:= GetKeyPressed;
pe:=pointer_state;
pointer_x:=pointer_dragged_x;
pointer_y:=pointer_dragged_y;
If pe>0 then begin
DrawLine(first_pointer_x,first_pointer_y,pointer_x,pointer_y);
DrawText('+',pointer_x,pointer_y);
if pointer_time=0 then begin
first_pointer_x:= pointer_dragged_x;
first_pointer_y:= pointer_dragged_y;
end;
if pointer_time>0 then begin
pointer_x:= pointer_dragged_x;
pointer_y:= pointer_dragged_y;
end;
pointer_time:=pointer_time+1;
end;
if pe=0 then begin
pointer_time:=0;
first_pointer_x:= pointer_x;
first_pointer_y:= pointer_y;
end;
Repaint;
until (keyCode = KE_KEY0) or (KeyToAction(keyCode) = GA_FIRE);
end.
__________________
Ибо как сказал Бгдн:
|
(Offline)
|
|
27.01.2011, 20:29
|
#2
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Сенсоры и прямая линия.
Проблема решена.
Код:
program line;
uses sensor;
var x, y, xline, yline, pointer_x, pointer_y, first_pointer_x, first_pointer_y, pointer_time, pe: integer;
keyCode: integer;
begin
sensor.init;
repeat
SetColor(255, 255, 255);
FillRect(0, 0, GetWidth, GetHeight);
SetColor(0, 0, 0);
keyCode:= GetKeyPressed;
pe:=pointer_state;
DrawText(IntegerToString(pe),0,0);
DrawText(IntegerToString(pointer_time),0,20);
If pe>0 then begin
//if has_pointer_motion_events=1 then begin
first_pointer_x:=pointer_pressed_x;
first_pointer_y:=pointer_pressed_y;
//pointer_x:= pointer_released_x;
//pointer_y:= pointer_released_y;
pointer_x:=pointer_dragged_x;
pointer_y:=pointer_dragged_y;
//end;
DrawLine(first_pointer_x,first_pointer_y,pointer_x,pointer_y);
DrawText('+',pointer_x,pointer_y);
end;
Repaint;
until (keyCode = KE_KEY0) or (KeyToAction(keyCode) = GA_FIRE);
end.
З.Ы. Хорошая тенденция: пишу и ожидая ответа допираю до решения сам ...
__________________
Ибо как сказал Бгдн:
|
(Offline)
|
|
28.01.2011, 02:36
|
#3
|
AnyKey`щик
Регистрация: 20.12.2008
Сообщений: 13
Написано 4 полезных сообщений (для 12 пользователей)
|
Ответ: Сенсоры и прямая линия.
А так всегда, пока всё держишь в голове, ничего не понимаешь, а как-только начинаешь излагать суть проблемы, то мысли выравниваются и всё становится понятным
__________________
Use a music as a weapon
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо aNNiMON за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:00.
|