Координаты X Y тормозят процесс

prescott

Member
Добрый день.
Я в программировании новичок, так что не пугайтесь глупых вопросов.
По сути: есть код, который отлично работает на ПК, но тормозит на КПК.

B4X:
Sub Globals
MouseDown=False
 Pencil=0
 Brush=0
 
 Mouse=0
 
x1=0
y1=0
x2=0
y2=0

End Sub

Sub App_Start
 frmMain.Show
End Sub

Sub Pencil_Click
 Pencil=1
 Brush=0
End Sub

Sub Brush_Click
 Pencil=0
 Brush=1
End Sub

Sub frmMain_MouseMove (x,y)
 If Pencil=1 AND Mouse=1 Then
 x2=x
 y2=y
 x1=x1
 y1=y1
 frmMain.Line(x1,y1,x2,y2,0,0,0)
 If x1<>x2 OR y1<>y2 Then
 x1=x2
 y1=y2
 End If
 End If 

If Brush=1 AND Mouse=1 Then
x2=x
y2=y
frmMain.Circle(x2,y2,3,0,0,0,f)
End If
End Sub

Sub frmMain_MouseDown (x,y)
 x1=x
 y1=y
 Mouse=1
End Sub

Sub frmMain_MouseUp (x,y)
 Mouse=0
End Sub

Вопрос: Можно как-то по-другому придумать работу с координатами X Y, или может, есть библиотека DLL, которая помогает закинуть в оперативку процедуру постоянного вычисления координат.

Может, я че-то не так делаю:sign0013:
:sign0085:

На всякий случай приложу Example
 
Last edited:

Sergey Kravchenko

Active Member
Licensed User
Longtime User
Поробовал твой код на ПК и на КПК. у меня застарелый Hp 1950 с процессором 300 Мгц.
Всё отлично работает и по скорости тоже, причем как компилированный код, так и через интрепретатор...:)
 

prescott

Member
Поробовал твой код на ПК и на КПК. у меня застарелый Hp 1950 с процессором 300 Мгц.
Всё отлично работает и по скорости тоже, причем как компилированный код, так и через интрепретатор...:)

Я имею ввиду, что линию я уже нарисовал, а она появилась только спустя энное время. Причем если долго водить по экрану, то координаты считаються, а вот картинка появиться после отжатия стилуса.


Вот тут реализовал тоже самое только через масив и с выводом координат на дисплей.
Также прикладываю exe-ху моего проэкта на ППС.
 
Last edited:

Sergey Kravchenko

Active Member
Licensed User
Longtime User
Я имею ввиду, что линию я уже нарисовал, а она появилась только спустя энное время. Причем если долго водить по экрану, то координаты считаються, а вот картинка появиться после отжатия стилуса.
Да я понял, но у меня так - веду стилус и сразу на ним линия - отображается все сразу по ходу движения....
 

Sergey Kravchenko

Active Member
Licensed User
Longtime User
Вот тут реализовал тоже самое только через масив и с выводом координат на дисплей.
Также прикладываю exe-ху моего проэкта на ППС.
Тута тоже все нормально - рисует и круги и квадраты, линии и прочее, без задержек.
Кстать, поскольку у тебя бета 6.90 поставь возле описания каждой переменной Number - быстродействие увеличится в несколько раз...
 

prescott

Member
Тута тоже все нормально - рисует и круги и квадраты, линии и прочее, без задержек.
Кстать, поскольку у тебя бета 6.90 поставь возле описания каждой переменной Number - быстродействие увеличится в несколько раз...

:sign0013:
Я проверил на другом КПК - Фсе гуд:)
Вопрос снят.
--
Допишу рисовалку дам на обозрения код может кому-то пригодиться example
 

Byak@

Active Member
Licensed User
задержка на твоем кпк возникает изза того что ты принудительно не перерисовываеш экран после отрисовки.некоторые "видео дрова" имеют особенность в целях повышения производительности перерисовывать экран только после окончания отрисовки чегото.сама посебе эта функция вызывает задержку + при многократной отрисовке будет ожидание окончания.
настоятельно советую использовать для отрисовки ImageLibEx и отрисовывать не на форму а на image и поокончанию перерисовки вызываей refresh.это даст максимальную скорость.

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

другое дело что тут сам код неоптимизирован.хотябы вот

Sub frmMain_MouseMove (x,y)
If Pencil=1 AND Mouse=1 Then
frmMain.Line(x1,y1,x,y,0,0,0)
If x1<>x then x1=x
if y1<>y Then y1=y
End If

If Brush=1 AND Mouse=1 Then
frmMain.Circle(x,y,3,0,0,0,f)
End If
End Sub
а x2 и y2 убираем савсем
 
Top