Мигание объекта на графике.

 

Создаю объект при нажатии на кнопку , все нормально.

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

OnTimer(){
 
 
            
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); 
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

}
 
Igor Petrov:

Создаю объект при нажатии на кнопку , все нормально.

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

Попробуйте так:

OnTimer(){
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); 
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      removeFlickering();
}
 
Igor Petrov:

Создаю объект при нажатии на кнопку , все нормально.

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

Видимо, у Вас интервал таймера 1 секунда. Попробуйте интервал 10 секунд. Вместо мигания будет скакать. Может понравиться больше.

В кино более 25 кадров в секунду. При меньшей частоте глаз замечает мигание.

 
a007 #:

...

В кино более 25 кадров в секунду. При меньшей частоте глаз замечает мигание.

Классическое число - 24 кадра в секунду.

 
Igor Petrov:

Создаю объект при нажатии на кнопку , все нормально.

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

А ObjectMove() пробовали?

Еще проверьте, чтобы  ChartRedraw() лишнего не вызывалась.
 

1. " Видимо, у Вас интервал таймера 1 секунда. Попробуйте интервал 10 секунд. " - Пробовал разные интервалы результат тот же. Скакать мне не нужно, мне нужно просто переместить объект.

2. " А ObjectMove() пробовали? " - Да на других объектах работает. Но эта функция  для времени и  цены, а у меня координаты в пикселях, которые я вычисляю путем преобразования. 

3. "ChartRedraw() лишнего не вызывалась " пробовал и с ней и без. тоже самое.

4.  removeFlickering();  = не активна функция , что это?

язык Mql5 Объект кнопка = мигает постоянно даже без никаких перемещений,  Такой же код в mql4 работает стабильно, без глюков. При перемещении тянется за ценой без мигания.  

 
Недосмотрел с ObjectMove тоже самое происходит мерцание при перемещении. И порой объекты вообще пропадают. Когда  происходит следующее движение появляются. 
 
Igor Petrov:

Создаю объект при нажатии на кнопку , все нормально.

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

не перемещайте объекты если координаты не поменялись. Возможно это недооптимизировано и вызывает ChartRedraw, отсюда мерцание

OnTimer() {

    if (old_x != x || old_y !=y) {

        old_x=x; old_y=y;

        ObjectMove(...);

    }

}

 
Igor Petrov #:
Недосмотрел с ObjectMove тоже самое происходит мерцание при перемещении. И порой объекты вообще пропадают. Когда  происходит следующее движение появляются. 

Там координаты как-то вычисляются или просто фиксированное какое-то значение ? Функция ChartTimePriceToXY говорят не быстрая (если координаты рассчитываются как-то).

Вообще операции с объектами медленные.

Кроме того, нет никаких данных вообще (код). Как тут люди могут посоветовать?

 
Maxim Kuznetsov #:

не перемещайте объекты если координаты не поменялись. Возможно это недооптимизировано и вызывает ChartRedraw, отсюда мерцание

OnTimer() {

    if (old_x != x || old_y !=y) {

        old_x=x; old_y=y;

        ObjectMove(...);

    }

}

Лучше проверять координаты графика наверное?

 
Yevhenii Levchenko #:

Лучше проверять координаты графика наверное?

ObjectGetInteger лучше не трогать в OnTimer и вообще пореже.

Это синхронный вызов и чреват неожиданными тормозами